Skip to content
Merged
36 changes: 28 additions & 8 deletions usr/lib/webapp-manager/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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"))
Expand All @@ -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"))
Expand Down Expand Up @@ -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)
Expand All @@ -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.")

Expand Down
19 changes: 14 additions & 5 deletions usr/lib/webapp-manager/webapp-manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import shutil
import subprocess
import warnings
import webbrowser

# 2. Related third party imports.
import gi
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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:
Expand All @@ -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")
Expand Down Expand Up @@ -538,3 +546,4 @@ def load_webapps(self):
if __name__ == "__main__":
application = MyApplication("org.x.webapp-manager", Gio.ApplicationFlags.FLAGS_NONE)
application.run()