vkdot/badwolf/userscripts.c
2025-03-02 03:05:35 -05:00

76 lines
2.1 KiB
C
Executable file

// BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser
// SPDX-FileCopyrightText: 2019-2023 Badwolf Authors <https://hacktivis.me/projects/badwolf>
// SPDX-License-Identifier: BSD-3-Clause
#include "userscripts.h"
#include "badwolf.h"
#include "config.h"
#include <assert.h>
#include <glib/gi18n.h> /* _() and other internationalization/localization helpers */
#include <glob.h>
void
load_userscripts(WebKitUserContentManager *content_manager)
{
glob_t scripts_path_glob;
gchar *scripts_path = g_build_filename(g_get_user_data_dir(), "badwolf", "scripts", "*.js", NULL);
unsigned int loaded = 0, failed = 0;
fprintf(stderr, _("badwolf: Checking for userscripts matching %s\n"), scripts_path);
switch(glob(scripts_path, GLOB_NOSORT, NULL, &scripts_path_glob))
{
case 0:
fprintf(stderr, _("badwolf: Notice: Found %zd userscripts\n"), scripts_path_glob.gl_pathc);
break;
case GLOB_NOMATCH:
fprintf(stderr, _("badwolf: Notice: No userscripts found\n"));
goto clean;
break;
case GLOB_NOSPACE:
fprintf(stderr, _("badwolf: Failed to list userscripts: Out of Memory\n"));
goto clean;
break;
case GLOB_ABORTED:
fprintf(stderr, _("badwolf: Failed to list userscripts: Read Error\n"));
goto clean;
break;
}
for(size_t i = 0; i < scripts_path_glob.gl_pathc; i++)
{
char *filename = scripts_path_glob.gl_pathv[i];
gchar *contents;
GError *err = NULL;
if(g_file_get_contents(filename, &contents, NULL, &err) && err == NULL)
{
WebKitUserScript *userscript =
webkit_user_script_new(contents,
WEBKIT_USER_CONTENT_INJECT_ALL_FRAMES,
WEBKIT_USER_SCRIPT_INJECT_AT_DOCUMENT_START,
NULL,
NULL);
webkit_user_content_manager_add_script(content_manager, userscript);
loaded++;
}
else
{
fprintf(stderr, _("badwolf: Error reading userscript: %s\n"), err->message);
g_error_free(err);
failed++;
}
}
fprintf(stderr,
_("badwolf: Notice: Userscript loading: %d loaded, %d failed to load\n"),
loaded,
failed);
clean:
g_free(scripts_path);
globfree(&scripts_path_glob);
}