Skip to content

Commit 247f167

Browse files
Edit webapp browser settings (#202)
* edit webapp browser settings eg. isolate profile, navbar and private window * set correctly webapp properties * set selected browser on edit * rebuild exec string on edit * add properties to section * set and read properly boolean properties * activate switch components
1 parent 025fad3 commit 247f167

File tree

2 files changed

+42
-13
lines changed

2 files changed

+42
-13
lines changed

usr/lib/webapp-manager/common.py

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ def __init__(self, path, codename):
8383
self.category = None
8484
self.url = ""
8585
self.custom_parameters = ""
86+
self.isolate_profile = False
87+
self.navbar = False
88+
self.privatewindow = False
8689

8790
is_webapp = False
8891
with open(path) as desktop_file:
@@ -122,6 +125,18 @@ def __init__(self, path, codename):
122125
self.custom_parameters = line.replace("X-WebApp-CustomParameters=", "")
123126
continue
124127

128+
if "X-WebApp-Isolated" in line:
129+
self.isolate_profile = line.replace("X-WebApp-Isolated=", "") == "true"
130+
continue
131+
132+
if "X-WebApp-Navbar" in line:
133+
self.navbar = line.replace("X-WebApp-Navbar=", "") == "true"
134+
continue
135+
136+
if "X-WebApp-PrivateWindow" in line:
137+
self.privatewindow = line.replace("X-WebApp-PrivateWindow=", "") == "true"
138+
continue
139+
125140
if is_webapp and self.name is not None and self.icon is not None:
126141
self.is_valid = True
127142

@@ -227,6 +242,8 @@ def create_webapp(self, name, url, icon, category, browser, custom_parameters, i
227242
desktop_file.write("X-WebApp-Browser=%s\n" % browser.name)
228243
desktop_file.write("X-WebApp-URL=%s\n" % url)
229244
desktop_file.write("X-WebApp-CustomParameters=%s\n" % custom_parameters)
245+
desktop_file.write("X-WebApp-Navbar=%s\n" % navbar)
246+
desktop_file.write("X-WebApp-PrivateWindow=%s\n" % privatewindow)
230247
if isolate_profile:
231248
desktop_file.write("X-WebApp-Isolated=true\n")
232249
else:
@@ -262,7 +279,7 @@ def get_exec_string(self, browser, codename, custom_parameters, icon, isolate_pr
262279
exec_string += " {}".format(custom_parameters)
263280
exec_string += "\"" + url + "\"" + "'\n"
264281
# Create a Firefox profile
265-
shutil.copytree('/usr/share/webapp-manager/firefox/profile', firefox_profile_path)
282+
shutil.copytree('/usr/share/webapp-manager/firefox/profile', firefox_profile_path, dirs_exist_ok = True)
266283
if navbar:
267284
shutil.copy('/usr/share/webapp-manager/firefox/userChrome-with-navbar.css',
268285
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
278295
exec_string += "--private-window "
279296
exec_string += "\"" + url + "\"" + "'\n"
280297
# Create a Firefox profile
281-
shutil.copytree('/usr/share/webapp-manager/firefox/profile', firefox_profile_path)
298+
shutil.copytree('/usr/share/webapp-manager/firefox/profile', firefox_profile_path, dirs_exist_ok = True)
282299
if navbar:
283300
shutil.copy('/usr/share/webapp-manager/firefox/userChrome-with-navbar.css',
284301
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
324341
exec_string += "\n"
325342
return exec_string
326343

327-
def edit_webapp(self, path, name, browser, url, icon, category, custom_parameters):
344+
def edit_webapp(self, path, name, browser, url, icon, category, custom_parameters, codename, isolate_profile, navbar, privatewindow):
345+
328346
config = configparser.RawConfigParser()
329347
config.optionxform = str
330348
config.read(path)
@@ -336,15 +354,17 @@ def edit_webapp(self, path, name, browser, url, icon, category, custom_parameter
336354
try:
337355
# This will raise an exception on legacy apps which
338356
# have no X-WebApp-URL and X-WebApp-Browser
339-
old_url = config.get("Desktop Entry", "X-WebApp-URL")
340-
exec_line = config.get("Desktop Entry", "Exec")
341-
exec_line = exec_line.replace(old_url, url)
342-
old_custom_parameters = config.get("Desktop Entry", "X-WebApp-CustomParameters")
343-
exec_line = exec_line.replace(old_custom_parameters, custom_parameters)
357+
358+
exec_line = self.get_exec_string(browser, codename, custom_parameters, icon, isolate_profile, navbar, privatewindow, url)
359+
344360
config.set("Desktop Entry", "Exec", exec_line)
345361
config.set("Desktop Entry", "X-WebApp-Browser", browser.name)
346362
config.set("Desktop Entry", "X-WebApp-URL", url)
347363
config.set("Desktop Entry", "X-WebApp-CustomParameters", custom_parameters)
364+
config.set("Desktop Entry", "X-WebApp-Isolated", "true" if isolate_profile else "false")
365+
config.set("Desktop Entry", "X-WebApp-Navbar", "true" if navbar else "false")
366+
config.set("Desktop Entry", "X-WebApp-PrivateWindow", "true" if privatewindow else "false")
367+
348368
except:
349369
print("This WebApp was created with an old version of WebApp Manager. Its URL cannot be edited.")
350370

usr/lib/webapp-manager/webapp-manager.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import shutil
88
import subprocess
99
import warnings
10+
import webbrowser
1011

1112
# 2. Related third party imports.
1213
import gi
@@ -104,10 +105,7 @@ def __init__(self, application):
104105
self.browser_label = self.builder.get_object("browser_label")
105106

106107
# Widgets which are in the add page but not the edit page
107-
self.add_specific_widgets = [self.browser_label, self.browser_combo,
108-
self.isolated_label, self.isolated_switch,
109-
self.navbar_label, self.navbar_switch,
110-
self.privatewindow_label, self.privatewindow_switch]
108+
self.add_specific_widgets = [self.browser_label, self.browser_combo]
111109

112110
# Widget signals
113111
self.add_button.connect("clicked", self.on_add_button)
@@ -329,7 +327,7 @@ def on_ok_button(self, widget):
329327
shutil.copyfile(icon, new_path)
330328
icon = new_path
331329
if self.edit_mode:
332-
self.manager.edit_webapp(self.selected_webapp.path, name, browser, url, icon, category, custom_parameters)
330+
self.manager.edit_webapp(self.selected_webapp.path, name, browser, url, icon, category, custom_parameters, self.selected_webapp.codename, isolate_profile, navbar, privatewindow)
333331
self.load_webapps()
334332
else:
335333
self.manager.create_webapp(name, url, icon, category, browser, custom_parameters, isolate_profile, navbar,
@@ -361,6 +359,15 @@ def on_edit_button(self, widget):
361359
self.icon_chooser.set_icon(self.selected_webapp.icon)
362360
self.url_entry.set_text(self.selected_webapp.url)
363361
self.customparameters_entry.set_text(self.selected_webapp.custom_parameters)
362+
self.navbar_switch.set_active(self.selected_webapp.navbar)
363+
self.isolated_switch.set_active(self.selected_webapp.isolate_profile)
364+
self.privatewindow_switch.set_active(self.selected_webapp.privatewindow)
365+
366+
web_browsers = map(lambda i: i[0], self.browser_combo.get_model())
367+
selected_browser_index = [idx for idx, x in enumerate(web_browsers) if x.name == self.selected_webapp.web_browser][0]
368+
self.browser_combo.set_active(selected_browser_index)
369+
self.on_browser_changed(self.selected_webapp)
370+
364371
model = self.category_combo.get_model()
365372
iter = model.get_iter_first()
366373
while iter:
@@ -369,6 +376,7 @@ def on_edit_button(self, widget):
369376
self.category_combo.set_active_iter(iter)
370377
break
371378
iter = model.iter_next(iter)
379+
self.show_hide_browser_widgets()
372380
for widget in self.add_specific_widgets:
373381
widget.hide()
374382
self.stack.set_visible_child_name("add_page")
@@ -538,3 +546,4 @@ def load_webapps(self):
538546
if __name__ == "__main__":
539547
application = MyApplication("org.x.webapp-manager", Gio.ApplicationFlags.FLAGS_NONE)
540548
application.run()
549+

0 commit comments

Comments
 (0)