Просмотр исходного кода

add html_furi_tag_exists

- we can use this to search for common tags (title, h1, p, etc)
jblanked 1 год назад
Родитель
Сommit
1ce8aa56d1
3 измененных файлов с 43 добавлено и 5 удалено
  1. 4 4
      callback/web_crawler_callback.c
  2. 29 0
      html/html_furi.c
  3. 10 1
      html/html_furi.h

+ 4 - 4
callback/web_crawler_callback.c

@@ -751,13 +751,13 @@ static char *web_crawler_parse(DataLoaderModel *model)
             {
                 return "Failed to load HTML response.\nPress BACK to return.";
             }
-            // parse HTML response
-            FuriString *p_tags = html_furi_find_tags("<p>", returned_data);
-            furi_string_free(returned_data);
-            if (p_tags == NULL)
+            if (!html_furi_tag_exists("<p>", returned_data, 0))
             {
                 return "Failed to find <p> tag.\nPress BACK to return.";
             }
+            // parse HTML response
+            FuriString *p_tags = html_furi_find_tags("<p>", returned_data);
+            furi_string_free(returned_data);
             return (char *)furi_string_get_cstr(p_tags);
         }
     }

+ 29 - 0
html/html_furi.c

@@ -256,3 +256,32 @@ FuriString *html_furi_find_tags(const char *tag, FuriString *html)
 
     return result;
 }
+
+/*
+ * @brief Check if an HTML tag exists in the provided HTML string.
+ * @param tag The HTML tag to search for (including the angle brackets).
+ * @param html The HTML string to search (as a FuriString).
+ * @param index The starting index to search from.
+ * @return True if the tag exists in the HTML string, false otherwise.
+ */
+bool html_furi_tag_exists(const char *tag, FuriString *html, size_t index)
+{
+    int tag_len = strlen(tag);
+    if (tag_len < 3)
+    {
+        FURI_LOG_E("html_furi_parse", "Invalid tag length");
+        return false;
+    }
+
+    int html_len = furi_string_size(html);
+
+    for (int i = index; i <= html_len - tag_len; i++)
+    {
+        if (furi_string_sub_equals(html, i, tag))
+        {
+            return true;
+        }
+    }
+
+    return false;
+}

+ 10 - 1
html/html_furi.h

@@ -28,4 +28,13 @@ FuriString *html_furi_find_tag(const char *tag, FuriString *html, size_t index);
  * @return A newly allocated FuriString containing the parsed content,
  *         or an empty FuriString if the tag is not found.
  */
-FuriString *html_furi_find_tags(const char *tag, FuriString *html);
+FuriString *html_furi_find_tags(const char *tag, FuriString *html);
+
+/*
+ * @brief Check if an HTML tag exists in the provided HTML string.
+ * @param tag The HTML tag to search for (including the angle brackets).
+ * @param html The HTML string to search (as a FuriString).
+ * @param index The starting index to search from.
+ * @return True if the tag exists in the HTML string, false otherwise.
+ */
+bool html_furi_tag_exists(const char *tag, FuriString *html, size_t index);