From 6cd349ec91425b070bef8ced6c8d959842948721 Mon Sep 17 00:00:00 2001 From: Jonathan Oldenburg Date: Wed, 7 Sep 2022 14:32:32 -0300 Subject: [PATCH 1/7] edit webapp browser settings eg. isolate profile, navbar and private window --- usr/lib/webapp-manager/common.py | 188 +++++++++++++---------- usr/lib/webapp-manager/webapp-manager.py | 8 +- 2 files changed, 113 insertions(+), 83 deletions(-) diff --git a/usr/lib/webapp-manager/common.py b/usr/lib/webapp-manager/common.py index 717e9cc..e3ef022 100755 --- a/usr/lib/webapp-manager/common.py +++ b/usr/lib/webapp-manager/common.py @@ -83,6 +83,9 @@ def __init__(self, path, codename): self.category = None self.url = "" self.custom_parameters = "" + self.isolate_profile = False + self.navbar = False + self.privatewindow = False is_webapp = False with open(path) as desktop_file: @@ -122,6 +125,18 @@ def __init__(self, path, codename): self.custom_parameters = line.replace("X-WebApp-CustomParameters=", "") continue + if "X-WebApp-IsolateProfile" in line: + self.custom_parameters = line.replace("X-WebApp-IsolateProfile=", "") + continue + + if "X-WebApp-Navbar" in line: + self.custom_parameters = line.replace("X-WebApp-Navbar=", "") + continue + + if "X-WebApp-PrivateWindow" in line: + self.custom_parameters = line.replace("X-WebApp-PrivateWindow=", "") + continue + if is_webapp and self.name != None and self.icon != None: self.is_valid = True @@ -208,78 +223,7 @@ def create_webapp(self, name, url, icon, category, browser, custom_parameters, i desktop_file.write("Name=%s\n" % name) desktop_file.write("Comment=%s\n" % _("Web App")) - if browser.browser_type in [BROWSER_TYPE_FIREFOX, BROWSER_TYPE_FIREFOX_FLATPAK]: - # Firefox based - firefox_profiles_dir = FIREFOX_PROFILES_DIR if browser.browser_type == BROWSER_TYPE_FIREFOX else FIREFOX_FLATPAK_PROFILES_DIR - firefox_profile_path = os.path.join(firefox_profiles_dir, codename) - exec_string = ("Exec=sh -c 'XAPP_FORCE_GTKWINDOW_ICON=" + icon + " " + browser.exec_path + - " --class WebApp-" + codename + - " --profile " + firefox_profile_path + - " --no-remote ") - if privatewindow: - exec_string += "--private-window " - if custom_parameters: - exec_string += " {}".format(custom_parameters) - desktop_file.write(exec_string + url + "'\n") - # Create a Firefox profile - shutil.copytree('/usr/share/webapp-manager/firefox/profile', firefox_profile_path) - if navbar: - shutil.copy('/usr/share/webapp-manager/firefox/userChrome-with-navbar.css', os.path.join(firefox_profile_path, "chrome", "userChrome.css")) - elif browser.browser_type == BROWSER_TYPE_LIBREWOLF_FLATPAK: - # LibreWolf flatpak - firefox_profiles_dir = LIBREWOLF_FLATPAK_PROFILES_DIR - firefox_profile_path = os.path.join(firefox_profiles_dir, codename) - exec_string = ("Exec=sh -c 'XAPP_FORCE_GTKWINDOW_ICON=" + icon + " " + browser.exec_path + - " --class WebApp-" + codename + - " --profile " + firefox_profile_path + - " --no-remote ") - if privatewindow: - exec_string += "--private-window " - desktop_file.write(exec_string + url + "'\n") - # Create a Firefox profile - shutil.copytree('/usr/share/webapp-manager/firefox/profile', firefox_profile_path) - if navbar: - shutil.copy('/usr/share/webapp-manager/firefox/userChrome-with-navbar.css', os.path.join(firefox_profile_path, "chrome", "userChrome.css")) - elif browser.browser_type == BROWSER_TYPE_EPIPHANY: - # Epiphany based - epiphany_profile_path = os.path.join(EPIPHANY_PROFILES_DIR, "org.gnome.Epiphany.WebApp-" + codename) - # Create symlink of profile dir at ~/.local/share - epiphany_orig_prof_dir=os.path.join(os.path.expanduser("~/.local/share"), "org.gnome.Epiphany.WebApp-" + codename) - os.symlink(epiphany_profile_path, epiphany_orig_prof_dir) - exec_string = "Exec=" + browser.exec_path - exec_string += " --application-mode " - exec_string += " --profile=\"" + epiphany_orig_prof_dir + "\"" - exec_string += " " + url + "\n" - if custom_parameters: - exec_string += " {}".format(custom_parameters) - desktop_file.write(exec_string) - else: - # Chromium based - if isolate_profile: - profile_path = os.path.join(PROFILES_DIR, codename) - exec_string = ("Exec=" + browser.exec_path + - " --app=" + url + - " --class=WebApp-" + codename + - " --user-data-dir=" + profile_path) - else: - exec_string = ("Exec=" + browser.exec_path + - " --app=" + url + - " --class=WebApp-" + codename) - - if privatewindow: - if browser.name == "Microsoft Edge": - exec_string += " --inprivate" - elif browser.name == "Microsoft Edge Beta": - exec_string += " --inprivate" - elif browser.name == "Microsoft Edge Dev": - exec_string += " --inprivate" - else: - exec_string += " --incognito" - - if custom_parameters: - exec_string += " {}".format(custom_parameters) - - desktop_file.write(exec_string + "\n") + desktop_file.write("Exec=" + self.get_exec_string(browser, codename, custom_parameters, icon, isolate_profile, navbar, privatewindow, url) + "\n") desktop_file.write("Terminal=false\n") desktop_file.write("X-MultipleArgs=false\n") @@ -298,6 +242,7 @@ def create_webapp(self, name, url, icon, category, browser, custom_parameters, i desktop_file.write("X-WebApp-Isolated=false\n") if browser.browser_type == BROWSER_TYPE_EPIPHANY: + epiphany_profile_path = os.path.join(EPIPHANY_PROFILES_DIR, "org.gnome.Epiphany.WebApp-" + codename) # Move the desktop file and create a symlink new_path = os.path.join(epiphany_profile_path, "org.gnome.Epiphany.WebApp-%s.desktop" % codename) os.makedirs(epiphany_profile_path) @@ -311,7 +256,7 @@ def create_webapp(self, name, url, icon, category, browser, custom_parameters, i with open(app_mode_file, 'w') as fp: pass - def edit_webapp(self, path, name, browser, url, icon, category, custom_parameters): + def edit_webapp(self, path, name, browser, url, icon, category, custom_parameters, codename, isolate_profile=True, navbar=False, privatewindow=False): config = configparser.RawConfigParser() config.optionxform = str config.read(path) @@ -323,21 +268,108 @@ def edit_webapp(self, path, name, browser, url, icon, category, custom_parameter try: # This will raise an exception on legacy apps which # have no X-WebApp-URL and X-WebApp-Browser - old_url = config.get("Desktop Entry", "X-WebApp-URL") - exec_line = config.get("Desktop Entry", "Exec") - exec_line = exec_line.replace(old_url, url) - old_custom_parameters = config.get("Desktop Entry", "X-WebApp-CustomParameters") - exec_line = exec_line.replace(old_custom_parameters, custom_parameters) + + exec_line = self.get_exec_string(browser, codename, custom_parameters, icon, isolate_profile, navbar, privatewindow, url) config.set("Desktop Entry", "Exec", exec_line) config.set("Desktop Entry", "X-WebApp-Browser", browser.name) config.set("Desktop Entry", "X-WebApp-URL", url) config.set("Desktop Entry", "X-WebApp-CustomParameters", custom_parameters) + config.set("Desktop Entry", "X-WebApp-IsolateProfile", str(isolate_profile).lower()) + config.set("Desktop Entry", "X-WebApp-Navbar", str(navbar).lower()) + config.set("Desktop Entry", "X-WebApp-PrivateWindow", str(privatewindow).lower()) except: print("This WebApp was created with an old version of WebApp Manager. Its URL cannot be edited.") with open(path, 'w') as configfile: config.write(configfile, space_around_delimiters=False) + def get_exec_string(self, browser, codename, custom_parameters, icon, + isolate_profile, navbar, privatewindow, url, edit = False): + if browser.browser_type in [BROWSER_TYPE_FIREFOX, BROWSER_TYPE_FIREFOX_FLATPAK]: + # Firefox based + firefox_profiles_dir = FIREFOX_PROFILES_DIR if browser.browser_type == BROWSER_TYPE_FIREFOX else FIREFOX_FLATPAK_PROFILES_DIR + firefox_profile_path = os.path.join(firefox_profiles_dir, codename) + exec_string = ("sh -c 'XAPP_FORCE_GTKWINDOW_ICON=" + icon + " " + browser.exec_path + + " --class WebApp-" + codename + + " --profile " + firefox_profile_path + + " --no-remote ") + if privatewindow: + exec_string += "--private-window " + if custom_parameters: + exec_string += " {}".format(custom_parameters) + exec_string += url + "'" + if not edit: + # Create a Firefox profile + shutil.copytree('/usr/share/webapp-manager/firefox/profile', firefox_profile_path) + + user_chrome_path = os.path.join(firefox_profile_path, "chrome", "userChrome.css") + if navbar and (not os.path.exists(user_chrome_path)): + shutil.copy('/usr/share/webapp-manager/firefox/userChrome-with-navbar.css', + user_chrome_path) + elif os.path.exists(user_chrome_path): + shutil.rmtree(user_chrome_path) + elif browser.browser_type == BROWSER_TYPE_LIBREWOLF_FLATPAK: + # LibreWolf flatpak + firefox_profiles_dir = LIBREWOLF_FLATPAK_PROFILES_DIR + firefox_profile_path = os.path.join(firefox_profiles_dir, codename) + exec_string = ("sh -c 'XAPP_FORCE_GTKWINDOW_ICON=" + icon + " " + browser.exec_path + + " --class WebApp-" + codename + + " --profile " + firefox_profile_path + + " --no-remote ") + if privatewindow: + exec_string += "--private-window " + exec_string += url + "'" + if not edit: + # Create a Firefox profile + shutil.copytree('/usr/share/webapp-manager/firefox/profile', firefox_profile_path) + + user_chrome_path = os.path.join(firefox_profile_path, "chrome", "userChrome.css") + if navbar and (not os.path.exists(user_chrome_path)): + shutil.copy('/usr/share/webapp-manager/firefox/userChrome-with-navbar.css', + user_chrome_path) + elif os.path.exists(user_chrome_path): + shutil.rmtree(user_chrome_path) + elif browser.browser_type == BROWSER_TYPE_EPIPHANY: + # Epiphany based + epiphany_profile_path = os.path.join(EPIPHANY_PROFILES_DIR, "org.gnome.Epiphany.WebApp-" + codename) + # Create symlink of profile dir at ~/.local/share + epiphany_orig_prof_dir = os.path.join(os.path.expanduser("~/.local/share"), + "org.gnome.Epiphany.WebApp-" + codename) + os.symlink(epiphany_profile_path, epiphany_orig_prof_dir) + exec_string = browser.exec_path + exec_string += " --application-mode " + exec_string += " --profile=\"" + epiphany_orig_prof_dir + "\"" + exec_string += " " + url + if custom_parameters: + exec_string += " {}".format(custom_parameters) + else: + # Chromium based + if isolate_profile: + profile_path = os.path.join(PROFILES_DIR, codename) + exec_string = (browser.exec_path + + " --app=" + url + + " --class=WebApp-" + codename + + " --user-data-dir=" + profile_path) + else: + exec_string = (browser.exec_path + + " --app=" + url + + " --class=WebApp-" + codename) + + if privatewindow: + if browser.name == "Microsoft Edge": + exec_string += " --inprivate" + elif browser.name == "Microsoft Edge Beta": + exec_string += " --inprivate" + elif browser.name == "Microsoft Edge Dev": + exec_string += " --inprivate" + else: + exec_string += " --incognito" + + if custom_parameters: + exec_string += " {}".format(custom_parameters) + + return exec_string + def normalize_url(url): (scheme, netloc, path, _, _, _) = urllib.parse.urlparse(url, "http") diff --git a/usr/lib/webapp-manager/webapp-manager.py b/usr/lib/webapp-manager/webapp-manager.py index 6e5d855..cedb156 100755 --- a/usr/lib/webapp-manager/webapp-manager.py +++ b/usr/lib/webapp-manager/webapp-manager.py @@ -102,10 +102,7 @@ def __init__(self, application): self.browser_label = self.builder.get_object("browser_label") # Widgets which are in the add page but not the edit page - self.add_specific_widgets = [self.browser_label, self.browser_combo, - self.isolated_label, self.isolated_switch, - self.navbar_label, self.navbar_switch, - self.privatewindow_label, self.privatewindow_switch] + self.add_specific_widgets = [self.browser_label, self.browser_combo] # Widget signals self.add_button.connect("clicked", self.on_add_button) @@ -324,7 +321,7 @@ def on_ok_button(self, widget): shutil.copyfile(icon, new_path) icon = new_path if self.edit_mode: - self.manager.edit_webapp(self.selected_webapp.path, name, browser, url, icon, category, custom_parameters) + self.manager.edit_webapp(self.selected_webapp.path, name, browser, url, icon, category, custom_parameters, self.selected_webapp.codename, isolate_profile, navbar, privatewindow) self.load_webapps() else: self.manager.create_webapp(name, url, icon, category, browser, custom_parameters, isolate_profile, navbar, privatewindow) @@ -363,6 +360,7 @@ def on_edit_button(self, widget): self.category_combo.set_active_iter(iter) break iter = model.iter_next(iter) + self.show_hide_browser_widgets() for widget in self.add_specific_widgets: widget.hide() self.stack.set_visible_child_name("add_page") From e5c5c3fdcc612710a9758fb641c9be46c1284052 Mon Sep 17 00:00:00 2001 From: Jonathan Oldenburg Date: Mon, 3 Oct 2022 22:13:31 -0300 Subject: [PATCH 2/7] set correctly webapp properties --- usr/lib/webapp-manager/common.py | 13 +++++++------ usr/lib/webapp-manager/webapp-manager.py | 4 ++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/usr/lib/webapp-manager/common.py b/usr/lib/webapp-manager/common.py index e3ef022..d80d39b 100755 --- a/usr/lib/webapp-manager/common.py +++ b/usr/lib/webapp-manager/common.py @@ -126,15 +126,15 @@ def __init__(self, path, codename): continue if "X-WebApp-IsolateProfile" in line: - self.custom_parameters = line.replace("X-WebApp-IsolateProfile=", "") + self.isolate_profile = line.replace("X-WebApp-IsolateProfile=", "") continue if "X-WebApp-Navbar" in line: - self.custom_parameters = line.replace("X-WebApp-Navbar=", "") + self.navbar = line.replace("X-WebApp-Navbar=", "") continue if "X-WebApp-PrivateWindow" in line: - self.custom_parameters = line.replace("X-WebApp-PrivateWindow=", "") + self.privatewindow = line.replace("X-WebApp-PrivateWindow=", "") continue if is_webapp and self.name != None and self.icon != None: @@ -269,7 +269,7 @@ def edit_webapp(self, path, name, browser, url, icon, category, custom_parameter # This will raise an exception on legacy apps which # have no X-WebApp-URL and X-WebApp-Browser - exec_line = self.get_exec_string(browser, codename, custom_parameters, icon, isolate_profile, navbar, privatewindow, url) + exec_line = self.get_exec_string(browser, codename, custom_parameters, icon, isolate_profile, navbar, privatewindow, url, True) config.set("Desktop Entry", "Exec", exec_line) config.set("Desktop Entry", "X-WebApp-Browser", browser.name) config.set("Desktop Entry", "X-WebApp-URL", url) @@ -277,8 +277,9 @@ def edit_webapp(self, path, name, browser, url, icon, category, custom_parameter config.set("Desktop Entry", "X-WebApp-IsolateProfile", str(isolate_profile).lower()) config.set("Desktop Entry", "X-WebApp-Navbar", str(navbar).lower()) config.set("Desktop Entry", "X-WebApp-PrivateWindow", str(privatewindow).lower()) - except: + except Exception: print("This WebApp was created with an old version of WebApp Manager. Its URL cannot be edited.") + traceback.print_exc() with open(path, 'w') as configfile: config.write(configfile, space_around_delimiters=False) @@ -307,7 +308,7 @@ def get_exec_string(self, browser, codename, custom_parameters, icon, shutil.copy('/usr/share/webapp-manager/firefox/userChrome-with-navbar.css', user_chrome_path) elif os.path.exists(user_chrome_path): - shutil.rmtree(user_chrome_path) + os.remove(user_chrome_path) elif browser.browser_type == BROWSER_TYPE_LIBREWOLF_FLATPAK: # LibreWolf flatpak firefox_profiles_dir = LIBREWOLF_FLATPAK_PROFILES_DIR diff --git a/usr/lib/webapp-manager/webapp-manager.py b/usr/lib/webapp-manager/webapp-manager.py index cedb156..8904c90 100755 --- a/usr/lib/webapp-manager/webapp-manager.py +++ b/usr/lib/webapp-manager/webapp-manager.py @@ -352,6 +352,9 @@ def on_edit_button(self, widget): self.icon_chooser.set_icon(self.selected_webapp.icon) self.url_entry.set_text(self.selected_webapp.url) self.customparameters_entry.set_text(self.selected_webapp.custom_parameters) + + self.on_browser_changed(self.selected_webapp) + model = self.category_combo.get_model() iter = model.get_iter_first() while iter: @@ -529,3 +532,4 @@ def load_webapps(self): if __name__ == "__main__": application = MyApplication("org.x.webapp-manager", Gio.ApplicationFlags.FLAGS_NONE) application.run() + From 179cfa3f6c65b27f7be1ce0e1fe4a359b63609b2 Mon Sep 17 00:00:00 2001 From: Jonathan Oldenburg Date: Sat, 5 Nov 2022 13:01:56 -0300 Subject: [PATCH 3/7] set selected browser on edit --- usr/lib/webapp-manager/webapp-manager.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/usr/lib/webapp-manager/webapp-manager.py b/usr/lib/webapp-manager/webapp-manager.py index 069edb3..4359405 100755 --- a/usr/lib/webapp-manager/webapp-manager.py +++ b/usr/lib/webapp-manager/webapp-manager.py @@ -7,6 +7,7 @@ import shutil import subprocess import warnings +import webbrowser # 2. Related third party imports. import gi @@ -359,6 +360,11 @@ def on_edit_button(self, widget): self.url_entry.set_text(self.selected_webapp.url) self.customparameters_entry.set_text(self.selected_webapp.custom_parameters) + web_browsers = map(lambda i: i[0], self.browser_combo.get_model()) + selected_browser_index = [idx for idx, x in enumerate(web_browsers) if x.name == self.selected_webapp.web_browser][0] + + self.browser_combo.set_active(selected_browser_index) + self.on_browser_changed(self.selected_webapp) model = self.category_combo.get_model() From cf1d70b9aa6edef5b42a66f1a6a73ef3b26d7521 Mon Sep 17 00:00:00 2001 From: Jonathan Oldenburg Date: Sat, 5 Nov 2022 13:02:09 -0300 Subject: [PATCH 4/7] rebuild exec string on edit --- usr/lib/webapp-manager/common.py | 64 +++++--------------------------- 1 file changed, 10 insertions(+), 54 deletions(-) diff --git a/usr/lib/webapp-manager/common.py b/usr/lib/webapp-manager/common.py index f39b788..be8f066 100755 --- a/usr/lib/webapp-manager/common.py +++ b/usr/lib/webapp-manager/common.py @@ -125,7 +125,7 @@ def __init__(self, path, codename): self.custom_parameters = line.replace("X-WebApp-CustomParameters=", "") continue - if is_webapp and self.name is not None and self.icon is not None: + if "X-WebApp-IsolateProfile" in line: self.isolate_profile = line.replace("X-WebApp-IsolateProfile=", "") continue @@ -137,7 +137,7 @@ def __init__(self, path, codename): self.privatewindow = line.replace("X-WebApp-PrivateWindow=", "") continue - if is_webapp and self.name != None and self.icon != None: + if is_webapp and self.name is not None and self.icon is not None: self.is_valid = True # This is the backend. @@ -263,32 +263,6 @@ def create_webapp(self, name, url, icon, category, browser, custom_parameters, i pass def get_exec_string(self, browser, codename, custom_parameters, icon, isolate_profile, navbar, privatewindow, url): - config.set("Desktop Entry", "Name", name) - config.set("Desktop Entry", "Icon", icon) - config.set("Desktop Entry", "Comment", _("Web App")) - config.set("Desktop Entry", "Categories", "GTK;%s;" % category) - - try: - # This will raise an exception on legacy apps which - # have no X-WebApp-URL and X-WebApp-Browser - - exec_line = self.get_exec_string(browser, codename, custom_parameters, icon, isolate_profile, navbar, privatewindow, url, True) - config.set("Desktop Entry", "Exec", exec_line) - config.set("Desktop Entry", "X-WebApp-Browser", browser.name) - config.set("Desktop Entry", "X-WebApp-URL", url) - config.set("Desktop Entry", "X-WebApp-CustomParameters", custom_parameters) - config.set("Desktop Entry", "X-WebApp-IsolateProfile", str(isolate_profile).lower()) - config.set("Desktop Entry", "X-WebApp-Navbar", str(navbar).lower()) - config.set("Desktop Entry", "X-WebApp-PrivateWindow", str(privatewindow).lower()) - except Exception: - print("This WebApp was created with an old version of WebApp Manager. Its URL cannot be edited.") - traceback.print_exc() - - with open(path, 'w') as configfile: - config.write(configfile, space_around_delimiters=False) - - def get_exec_string(self, browser, codename, custom_parameters, icon, - isolate_profile, navbar, privatewindow, url, edit = False): if browser.browser_type in [BROWSER_TYPE_FIREFOX, BROWSER_TYPE_FIREFOX_FLATPAK]: # Firefox based firefox_profiles_dir = FIREFOX_PROFILES_DIR if browser.browser_type == BROWSER_TYPE_FIREFOX else FIREFOX_FLATPAK_PROFILES_DIR @@ -302,16 +276,11 @@ def get_exec_string(self, browser, codename, custom_parameters, icon, if custom_parameters: exec_string += " {}".format(custom_parameters) exec_string += "\"" + url + "\"" + "'\n" - if not edit: # Create a Firefox profile - shutil.copytree('/usr/share/webapp-manager/firefox/profile', firefox_profile_path) - if navbar: + shutil.copytree('/usr/share/webapp-manager/firefox/profile', firefox_profile_path, dirs_exist_ok = True) + if navbar: shutil.copy('/usr/share/webapp-manager/firefox/userChrome-with-navbar.css', os.path.join(firefox_profile_path, "chrome", "userChrome.css")) - shutil.copy('/usr/share/webapp-manager/firefox/userChrome-with-navbar.css', - user_chrome_path) - elif os.path.exists(user_chrome_path): - os.remove(user_chrome_path) elif browser.browser_type == BROWSER_TYPE_LIBREWOLF_FLATPAK: # LibreWolf flatpak firefox_profiles_dir = LIBREWOLF_FLATPAK_PROFILES_DIR @@ -323,16 +292,11 @@ def get_exec_string(self, browser, codename, custom_parameters, icon, if privatewindow: exec_string += "--private-window " exec_string += "\"" + url + "\"" + "'\n" - if not edit: # Create a Firefox profile - shutil.copytree('/usr/share/webapp-manager/firefox/profile', firefox_profile_path) + shutil.copytree('/usr/share/webapp-manager/firefox/profile', firefox_profile_path, dirs_exist_ok = True) if navbar: shutil.copy('/usr/share/webapp-manager/firefox/userChrome-with-navbar.css', os.path.join(firefox_profile_path, "chrome", "userChrome.css")) - shutil.copy('/usr/share/webapp-manager/firefox/userChrome-with-navbar.css', - user_chrome_path) - elif os.path.exists(user_chrome_path): - shutil.rmtree(user_chrome_path) elif browser.browser_type == BROWSER_TYPE_EPIPHANY: # Epiphany based epiphany_profile_path = os.path.join(EPIPHANY_PROFILES_DIR, "org.gnome.Epiphany.WebApp-" + codename) @@ -346,13 +310,6 @@ def get_exec_string(self, browser, codename, custom_parameters, icon, exec_string += " " + "\"" + url + "\"" + "\n" if custom_parameters: exec_string += " {}".format(custom_parameters) - else: - # Chromium based - if isolate_profile: - profile_path = os.path.join(PROFILES_DIR, codename) - exec_string = (browser.exec_path + - if custom_parameters: - exec_string += " {}".format(custom_parameters) else: # Chromium based if isolate_profile: @@ -382,7 +339,8 @@ def get_exec_string(self, browser, codename, custom_parameters, icon, exec_string += "\n" return exec_string - def edit_webapp(self, path, name, browser, url, icon, category, custom_parameters): + def edit_webapp(self, path, name, browser, url, icon, category, custom_parameters, codename, isolate_profile, navbar, privatewindow): + config = configparser.RawConfigParser() config.optionxform = str config.read(path) @@ -394,11 +352,9 @@ def edit_webapp(self, path, name, browser, url, icon, category, custom_parameter try: # This will raise an exception on legacy apps which # have no X-WebApp-URL and X-WebApp-Browser - old_url = config.get("Desktop Entry", "X-WebApp-URL") - exec_line = config.get("Desktop Entry", "Exec") - exec_line = exec_line.replace(old_url, url) - old_custom_parameters = config.get("Desktop Entry", "X-WebApp-CustomParameters") - exec_line = exec_line.replace(old_custom_parameters, custom_parameters) + + exec_line = self.get_exec_string(browser, codename, custom_parameters, icon, isolate_profile, navbar, privatewindow, url) + config.set("Desktop Entry", "Exec", exec_line) config.set("Desktop Entry", "X-WebApp-Browser", browser.name) config.set("Desktop Entry", "X-WebApp-URL", url) From 00da64895c33b5f3d6eb349221b1555970225c1d Mon Sep 17 00:00:00 2001 From: Jonathan Oldenburg Date: Sat, 5 Nov 2022 17:52:50 -0300 Subject: [PATCH 5/7] add properties to section --- usr/lib/webapp-manager/common.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/usr/lib/webapp-manager/common.py b/usr/lib/webapp-manager/common.py index be8f066..87cb436 100755 --- a/usr/lib/webapp-manager/common.py +++ b/usr/lib/webapp-manager/common.py @@ -242,6 +242,8 @@ def create_webapp(self, name, url, icon, category, browser, custom_parameters, i desktop_file.write("X-WebApp-Browser=%s\n" % browser.name) desktop_file.write("X-WebApp-URL=%s\n" % url) desktop_file.write("X-WebApp-CustomParameters=%s\n" % custom_parameters) + desktop_file.write("X-WebApp-Navbar=%s\n" % navbar) + desktop_file.write("X-WebApp-PrivateWindow=%s\n" % privatewindow) if isolate_profile: desktop_file.write("X-WebApp-Isolated=true\n") else: @@ -359,6 +361,10 @@ def edit_webapp(self, path, name, browser, url, icon, category, custom_parameter config.set("Desktop Entry", "X-WebApp-Browser", browser.name) config.set("Desktop Entry", "X-WebApp-URL", url) config.set("Desktop Entry", "X-WebApp-CustomParameters", custom_parameters) + config.set("Desktop Entry", "X-WebApp-IsolateProfile", isolate_profile) + config.set("Desktop Entry", "X-WebApp-Navbar", navbar) + config.set("Desktop Entry", "X-WebApp-PrivateWindow", privatewindow) + except: print("This WebApp was created with an old version of WebApp Manager. Its URL cannot be edited.") From c0863873399cb51530ee2ac0a8dcc975f503cdc4 Mon Sep 17 00:00:00 2001 From: Jonathan Oldenburg Date: Mon, 7 Nov 2022 21:36:41 -0300 Subject: [PATCH 6/7] set and read properly boolean properties --- usr/lib/webapp-manager/common.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/usr/lib/webapp-manager/common.py b/usr/lib/webapp-manager/common.py index 87cb436..930bbaf 100755 --- a/usr/lib/webapp-manager/common.py +++ b/usr/lib/webapp-manager/common.py @@ -125,16 +125,16 @@ def __init__(self, path, codename): self.custom_parameters = line.replace("X-WebApp-CustomParameters=", "") continue - if "X-WebApp-IsolateProfile" in line: - self.isolate_profile = line.replace("X-WebApp-IsolateProfile=", "") + if "X-WebApp-Isolated" in line: + self.isolate_profile = line.replace("X-WebApp-Isolated=", "") == "true" continue if "X-WebApp-Navbar" in line: - self.navbar = line.replace("X-WebApp-Navbar=", "") + self.navbar = line.replace("X-WebApp-Navbar=", "") == "true" continue if "X-WebApp-PrivateWindow" in line: - self.privatewindow = line.replace("X-WebApp-PrivateWindow=", "") + self.privatewindow = line.replace("X-WebApp-PrivateWindow=", "") == "true" continue if is_webapp and self.name is not None and self.icon is not None: @@ -361,9 +361,9 @@ def edit_webapp(self, path, name, browser, url, icon, category, custom_parameter config.set("Desktop Entry", "X-WebApp-Browser", browser.name) config.set("Desktop Entry", "X-WebApp-URL", url) config.set("Desktop Entry", "X-WebApp-CustomParameters", custom_parameters) - config.set("Desktop Entry", "X-WebApp-IsolateProfile", isolate_profile) - config.set("Desktop Entry", "X-WebApp-Navbar", navbar) - config.set("Desktop Entry", "X-WebApp-PrivateWindow", privatewindow) + config.set("Desktop Entry", "X-WebApp-Isolated", "true" if isolate_profile else "false") + config.set("Desktop Entry", "X-WebApp-Navbar", "true" if navbar else "false") + config.set("Desktop Entry", "X-WebApp-PrivateWindow", "true" if privatewindow else "false") except: print("This WebApp was created with an old version of WebApp Manager. Its URL cannot be edited.") From 825091bae35c35e9f148836cb913ce09f13c7977 Mon Sep 17 00:00:00 2001 From: Jonathan Oldenburg Date: Mon, 7 Nov 2022 21:37:01 -0300 Subject: [PATCH 7/7] activate switch components --- usr/lib/webapp-manager/webapp-manager.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/usr/lib/webapp-manager/webapp-manager.py b/usr/lib/webapp-manager/webapp-manager.py index 4359405..b5de685 100755 --- a/usr/lib/webapp-manager/webapp-manager.py +++ b/usr/lib/webapp-manager/webapp-manager.py @@ -359,12 +359,13 @@ def on_edit_button(self, widget): self.icon_chooser.set_icon(self.selected_webapp.icon) self.url_entry.set_text(self.selected_webapp.url) self.customparameters_entry.set_text(self.selected_webapp.custom_parameters) + self.navbar_switch.set_active(self.selected_webapp.navbar) + self.isolated_switch.set_active(self.selected_webapp.isolate_profile) + self.privatewindow_switch.set_active(self.selected_webapp.privatewindow) web_browsers = map(lambda i: i[0], self.browser_combo.get_model()) selected_browser_index = [idx for idx, x in enumerate(web_browsers) if x.name == self.selected_webapp.web_browser][0] - self.browser_combo.set_active(selected_browser_index) - self.on_browser_changed(self.selected_webapp) model = self.category_combo.get_model()