Duck.ai kann keinen Webkit Browser erstellen)=

bluedxca93

Commander
Registriert
Juli 2019
Beiträge
2.085
Mithilfe der duck.ai mixtral auf duck.ai kann keinen gtk3 webkit2 basierten browser-/Fenster erstellen. Jedenfalls reicht die Qualität der ausgegebenen Code Schnipsel nicht dafür aus.

Ich habe nach 10-20 Versuchen herausgefunden das das webview widget in ne vbox mit ner hbox gepackt werden muss, falls man vor-/zurück Buttons möchte. Das war aber auch alles.

Dann habe ich claude ai poe gefunden. Auch wenn die Seite nicht wesentlich bessere Ergebnisse erziehlen kann, lässt sie weingstens die alten Ergebnisse länger im "Gedächtnis" und kann Fehlermeldungen manchmal in den nächsten Codevorschlag miteinbeziehen.


Lg bluedxca93
 
Zuletzt bearbeitet:
Achtung AI:

1000016824.jpg


Hab jetzt es geschafft, das ich tatsächlich nen weiter , und zurücknopf und ne url leiste habe, google untendruntrr rest teste ich mal morgen.
 
Soll wohl eher ein Hinweis für alle sein die das selbe vorhaben, also so gut wie niemand?
 
  • Gefällt mir
Reaktionen: bluedxca93
Muss auf jeden Fall mal Screenshots hochladen morgen, was überhaupt funktioniert. Im Prinzip nur das was webkit gtk3 demo auch bietet ne Leiste um ne url einzutippen und ein Browser widget-/Whatever.

@duAffentier
Mich nervt das epiphany seit Version 3.3.3 keine menubar mehr hat und seit so nem Jahr auf gtk4 basiert. Erst war meine Idee Die KI aufzufordern tazweb nach gtk3 zu portieren aber das verweigert sie komplett.
Ergänzung ()

@Xero261286
Gitb einen Browser namens badwolf der in die ähnliche Richtung zu gehen scheint. Den compiliere icj auch mal morgen, wenn das überhaupt funktikniert.

B.t.w es ist zu kalt im Moment...
 
  • Gefällt mir
Reaktionen: netzgestaltung
#include <gtk/gtk.h>
#include <webkit2/webkit2.h>

static void show_about_dialog(GtkWidget *widget, gpointer data) {
GtkWidget *dialog = gtk_about_dialog_new();
gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(dialog), "Simple Browser");
gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(dialog), "1.0");
gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(dialog), "A simple GTK3 WebKit2 based browser");
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
}

static void go_back(GtkWidget *widget, WebKitWebView *web_view) {
g_print("Back button clicked\n");
if (webkit_web_view_can_go_back(web_view)) {
g_print("Going back\n");
webkit_web_view_go_back(web_view);
} else {
g_print("Cannot go back\n");
}
}

static void go_forward(GtkWidget *widget, WebKitWebView *web_view) {
g_print("Forward button clicked\n");
if (webkit_web_view_can_go_forward(web_view)) {
g_print("Going forward\n");
webkit_web_view_go_forward(web_view);
} else {
g_print("Cannot go forward\n");
}
}

static void print_web_view(GtkWidget *widget, WebKitWebView *web_view) {
WebKitPrintOperation *print_operation = webkit_print_operation_new(web_view);
webkit_print_operation_run_dialog(print_operation, GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(web_view))));
g_object_unref(print_operation);
}

static void save_web_view_callback(GObject *source_object, GAsyncResult *res, gpointer user_data) {
WebKitJavascriptResult *js_result;
GError *error = NULL;

js_result = webkit_web_view_run_javascript_finish(WEBKIT_WEB_VIEW(source_object), res, &error);
if (!js_result) {
g_print("Error running JavaScript: %s\n", error->message);
g_error_free(error);
return;
}

JSCValue *value = webkit_javascript_result_get_js_value(js_result);
if (jsc_value_is_string(value)) {
gchar *str_value = jsc_value_to_string(value);
gchar *filename = (gchar *)user_data;

if (g_file_set_contents(filename, str_value, -1, &error)) {
g_print("File saved successfully: %s\n", filename);
} else {
g_print("Error saving file: %s\n", error->message);
g_error_free(error);
}

g_free(str_value);
g_free(filename);
}

webkit_javascript_result_unref(js_result);
}

static void save_web_view(GtkWidget *widget, WebKitWebView *web_view) {
g_print("Save function called\n");

GtkWidget *dialog;
GtkFileChooser *chooser;
GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SAVE;
gint res;

dialog = gtk_file_chooser_dialog_new("Save File",
GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(web_view))),
action,
"_Cancel",
GTK_RESPONSE_CANCEL,
"_Save",
GTK_RESPONSE_ACCEPT,
NULL);
chooser = GTK_FILE_CHOOSER(dialog);

gtk_file_chooser_set_do_overwrite_confirmation(chooser, TRUE);

gtk_file_chooser_set_current_name(chooser, "webpage.html");

g_print("File chooser dialog created\n");

res = gtk_dialog_run(GTK_DIALOG(dialog));
if (res == GTK_RESPONSE_ACCEPT) {
char *filename;
filename = gtk_file_chooser_get_filename(chooser);
g_print("Selected filename: %s\n", filename);

const char *script = "document.documentElement.outerHTML;";
webkit_web_view_run_javascript(web_view, script, NULL, save_web_view_callback, g_strdup(filename));

g_print("Save operation initiated\n");
} else {
g_print("Save operation cancelled\n");
}

gtk_widget_destroy(dialog);
g_print("Save function completed\n");
}

static void update_address_bar(WebKitWebView *web_view, GtkWidget *address_bar) {
const gchar *uri = webkit_web_view_get_uri(web_view);
if (uri) {
gtk_entry_set_text(GTK_ENTRY(address_bar), uri);
}
}

static void web_view_load_changed(WebKitWebView *web_view, WebKitLoadEvent load_event, gpointer user_data) {
if (load_event == WEBKIT_LOAD_FINISHED) {
update_address_bar(web_view, GTK_WIDGET(user_data));
}
}


static void load_url(GtkWidget *widget, WebKitWebView *web_view) {
const gchar *url = gtk_entry_get_text(GTK_ENTRY(widget));
g_print("Loading URL: %s\n", url);
webkit_web_view_load_uri(web_view, url);
}

int main(int argc, char *argv[]) {
gtk_init(&argc, &argv);

GtkWidget *window;
GtkWidget *vbox;
GtkWidget *menubar;
GtkWidget *filemenu;
GtkWidget *file;
GtkWidget *save;
GtkWidget *print;
GtkWidget *quit;
GtkWidget *helpmenu;
GtkWidget *help;
GtkWidget *about;
GtkWidget *toolbar;
GtkToolItem *back_button;
GtkToolItem *forward_button;
GtkWidget *address_bar;
GtkWidget *web_view;


window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 800, 600);
gtk_window_set_title(GTK_WINDOW(window), "Simple Browser");


vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add(GTK_CONTAINER(window), vbox);


menubar = gtk_menu_bar_new();
filemenu = gtk_menu_new();
helpmenu = gtk_menu_new();

file = gtk_menu_item_new_with_label("File");
save = gtk_menu_item_new_with_label("Save");
print = gtk_menu_item_new_with_label("Print");
quit = gtk_menu_item_new_with_label("Quit");
help = gtk_menu_item_new_with_label("Help");
about = gtk_menu_item_new_with_label("About");

gtk_menu_item_set_submenu(GTK_MENU_ITEM(file), filemenu);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), save);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), print);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), quit);
gtk_menu_shell_append(GTK_MENU_SHELL(menubar), file);

gtk_menu_item_set_submenu(GTK_MENU_ITEM(help), helpmenu);
gtk_menu_shell_append(GTK_MENU_SHELL(helpmenu), about);
gtk_menu_shell_append(GTK_MENU_SHELL(menubar), help);

gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);


toolbar = gtk_toolbar_new();
gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS);


back_button = gtk_tool_button_new(gtk_image_new_from_icon_name("go-previous", GTK_ICON_SIZE_SMALL_TOOLBAR), "Back");
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), back_button, -1);


forward_button = gtk_tool_button_new(gtk_image_new_from_icon_name("go-next", GTK_ICON_SIZE_SMALL_TOOLBAR), "Forward");
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), forward_button, -1);


address_bar = gtk_entry_new();
GtkToolItem *address_item = gtk_tool_item_new();
gtk_container_add(GTK_CONTAINER(address_item), address_bar);
gtk_tool_item_set_expand(address_item, TRUE);
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), address_item, -1);


gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);


web_view = webkit_web_view_new();


gtk_box_pack_start(GTK_BOX(vbox), web_view, TRUE, TRUE, 0);


g_signal_connect(back_button, "clicked", G_CALLBACK(go_back), web_view);
g_signal_connect(forward_button, "clicked", G_CALLBACK(go_forward), web_view);
g_signal_connect(address_bar, "activate", G_CALLBACK(load_url), web_view);
g_signal_connect(about, "activate", G_CALLBACK(show_about_dialog), NULL);
g_signal_connect(print, "activate", G_CALLBACK(print_web_view), web_view);
g_signal_connect(save, "activate", G_CALLBACK(save_web_view), web_view);
g_signal_connect(quit, "activate", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

g_signal_connect(web_view, "load-changed", G_CALLBACK(web_view_load_changed), address_bar);

webkit_web_view_load_uri(WEBKIT_WEB_VIEW(web_view), "https://www.google.com");

update_address_bar(WEBKIT_WEB_VIEW(web_view), address_bar);

gtk_widget_show_all(window);

g_print("Starting GTK main loop\n");
gtk_main();

return 0;
}


test-claude-ai-browser.png

Ergänzung ()

Was der webbrowser kann : vor und zurück, drucken und html quelltext speichern.
 

Anhänge

würde das auch mit Gecko statt Webkit funktionieren?

@Evil E-Lex Es gab immer schon zb Case-Modding Blogs im Forum und ähnliches, ich hab auch ein Musik-Tagebuch hier.
@bluedxca93 Ich denke, die Überschift könnte halt aussagekräftiger sein
 
Da hast du recht. Bei dir sind aber Thema und Beiträge klar formuliert. Es gibt eine Richtung. Hier sehen die Überschriften und Beiträge aus wie von einem Spam-Bot.
 
  • Gefällt mir
Reaktionen: D.S.i.u.S., dms und BFF
Nicht nur die Ueberschrift. @netzgestaltung
Die schreibt ja von einem "Fehler" und nicht von einem Vorhaben.
Selbst der erste Post, der ja das Vorhaben beinhalten sollte, ist extrem duerftig fuer einen "Blog" aka Leserartikel.
 
bluedxca93 schrieb:
Die ai mixtral auf duck.ai kann keinen gtk3 webkit2 basierten browser-/Fenster erstellen.
@bluedxca93 .. das ist ja heute nur unwesentlich besser formuliert als im Erstbeitrag

Sollte ich das so lesen?

Ich wollte mir auf DUCK.AI Quelltext generieren lassen, um mit dem Framwork ABC dies und jenes zu machen aber
der Quelltext <CODE)..</CODE>
kann dies und jenes nicht wie müsste ich da weitermachen
uU ist die die Idee der User-Stories dir noch nicht untergekommen - das würde hilfreich (für uns Nochmenschen) sein

https://de.wikipedia.org/wiki/User_Story
 
BFF schrieb:
Selbst der erste Post, der ja das Vorhaben beinhalten sollte, ist extrem duerftig fuer einen "Blog" aka Leserartikel.
da kann ich nix dagegen sagen, aber ich finde das alles nicht sooo schlimm ;-) und es ist irgendwie unterhaltsam.
 
  • Gefällt mir
Reaktionen: BFF und bluedxca93
Danke für die Posts.
Auch wenn duck.ai es nicht kann, wird es langsam nutzbar:

Code:
gcc `pkg-config --cflags gtk+-3.0 webkit2gtk-4.1` -o claude-browser2d claude-browser-2d.c `pkg-config --libs gtk+-3.0 webkit2gtk-4.1`


Bildschirmfoto zu 2024-07-22 18-04-37.png

Ergänzung ()

dms schrieb:
. das ist ja heute nur unwesentlich besser formuliert als im Erstbeitrag
habe in dem jetzt paar Informationen ergänzt.
 

Anhänge

bluedxca93 schrieb:
Würde übrigens gleich auf GTK4 setzen. Die Gtk-Komponente die Webkit quasi nach GTK portiert hat ist WebkitGtk.
Epiphany (oder auch GNOME Web genannt?) nutzt das. Möglicherweise eigenet sich das ja als Grundlage für einen eigenen Browser.
Der ist schon recht einfach gehalten. Soll es noch einfacher sein, dann kann man auch mal einen Blick auf surf werfen. GIT-Page: https://git.suckless.org/surf/
Besteht im Wesentlichen aus einer C-Quelltextdatei.

bluedxca93 schrieb:
Mixtral ist nur semi-gut zum programmieren geeignet. Überhaupt sollte man KI-Krempel nur einsetzen, wenn man sich im betreffenden Gebiet auskennt.

Wenn man es als "Ich kenn' mich nicht aus und will es auch nicht lernen und lass die KI alles für mich machen"-Tool einsetzt, wird man eher nicht so richtig glücklich werden (ums mal nett zu umschreiben). Insbesondere wenn man dann noch Tools wie Browser bastelt, die ja auch gewissen Security-Anforderungen genügen sollten.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: dms
Ja gtk4 ist mir zu viel beta.
Nun die KI spuckt auch viel mist raus. Um das Fenster so anzuprdnen das es optisch passt und die Knöpfe auch aufs widget zugreifen können, hat es 20 Anläufe gebraucht weil die KI Lösungswege aufzeigt die nicht funktionieren können. Und das was dann am Ende rauskommt ähnelt etwas der Struktur von epiphany, wen wunderts.

Zum Hinzufügen der abspeichern Funtionhat es 3-4 Anläufe gebraucht bis das ding nicht abstürzt. Was ich als nächstes hinzufügen will ist Popup Fenster und öffnen in neuem Fenster. Tabs oder History wird zuviel Aufwand..
 
bluedxca93 schrieb:
Ja gtk4 ist mir zu viel beta.
Ähm bitte was?
GTK4 ist 2020 erschienen. Das ist ca. 4(!) Jahre her.

bluedxca93 schrieb:
menubar mehr hat und seit so nem Jahr auf gtk4 basiert.
Den Punkt würde ich Dir geben.
Die klassische Gtk.MenuBar wurde zugunsten von Gtk.PopoverMenuBar gestrichen.

bluedxca93 schrieb:
Tabs oder History wird zuviel Aufwand.
Ich verstehe auch nicht, warum Du nicht surf als Grundlage nimmst. Der ist Gtk3. Tabs und ne einfache History sind in GTK mit überschaubaren Aufwand zu machen.
Wobei Du für Tabs sogar tabbed nehmen könntest.

Ist ja auch nicht klar, was Du erwartest. Wolltest Du nur mal herum experimentieren oder war es eine ernsthafte Ansicht sich einen schlanken Browser mit gewünschten Funktionen zu bauen oder was ?
 
https://pastebin.com/TWiR6j5z


NeueVersion.png


Es sind einige Funktionen hinzugekommen. Was noch fehlt ist die Dowenload Funktionalität und öffnen in neuem Fenster. Es ist schon wesentlich weiter als am Anfang.

andy_m4 schrieb:
Ähm bitte was?
GTK4 ist 2020 erschienen. Das ist ca. 4(!) Jahre her.
Ja und es wurde seit dem nie stabil.
 
bluedxca93 schrieb:
Ja und es wurde seit dem nie stabil.
Was bedeutet das denn konkret?
Da ja auch GNOME4 darauf basiert, halte ich das für ne gewagte Behauptung die ich dann doch gerne unterfüttert sehen würde.
 
  • Gefällt mir
Reaktionen: JumpingCat
Zurück
Oben