diff --git a/usr/lib/webapp-manager/common.py b/usr/lib/webapp-manager/common.py index 73e41b6..930bbaf 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-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=", "") == "true" + continue + + if "X-WebApp-PrivateWindow" in line: + self.privatewindow = line.replace("X-WebApp-PrivateWindow=", "") == "true" + continue + if is_webapp and self.name is not None and self.icon is not None: self.is_valid = True @@ -227,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: @@ -262,7 +279,7 @@ def get_exec_string(self, browser, codename, custom_parameters, icon, isolate_pr exec_string += " {}".format(custom_parameters) exec_string += "\"" + url + "\"" + "'\n" # 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")) @@ -278,7 +295,7 @@ def get_exec_string(self, browser, codename, custom_parameters, icon, isolate_pr exec_string += "--private-window " exec_string += "\"" + url + "\"" + "'\n" # 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")) @@ -324,7 +341,8 @@ def get_exec_string(self, browser, codename, custom_parameters, icon, isolate_pr 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) @@ -336,15 +354,17 @@ 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-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.") diff --git a/usr/lib/webapp-manager/webapp-manager.py b/usr/lib/webapp-manager/webapp-manager.py index a715f86..b5de685 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 @@ -104,10 +105,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) @@ -329,7 +327,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, @@ -361,6 +359,15 @@ 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() iter = model.get_iter_first() while iter: @@ -369,6 +376,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") @@ -538,3 +546,4 @@ def load_webapps(self): if __name__ == "__main__": application = MyApplication("org.x.webapp-manager", Gio.ApplicationFlags.FLAGS_NONE) application.run() +