2222from gi .repository import Gtk , Gdk , Gio , XApp , GdkPixbuf
2323
2424# 3. Local application/library specific imports.
25- from common import _async , idle , WebAppManager , download_favicon , BROWSER_TYPE_FIREFOX , BROWSER_TYPE_FIREFOX_FLATPAK , BROWSER_TYPE_FIREFOX_SNAP , export_config , import_config , ei_task , check_browser_directories_tar
25+ from common import _async , idle , WebAppManager , download_favicon , BROWSER_TYPE_FIREFOX , BROWSER_TYPE_FIREFOX_FLATPAK , BROWSER_TYPE_FIREFOX_SNAP , export_config , import_config , ei_task , ICONS_DIR
2626
2727setproctitle .setproctitle ("webapp-manager" )
2828
3838CATEGORY_ID , CATEGORY_NAME = range (2 )
3939BROWSER_OBJ , BROWSER_NAME = range (2 )
4040
41+ # Gladefiles
42+ MAIN_WINDOW_GLADEFILE = "/usr/share/webapp-manager/webapp-manager.ui"
43+ SHORTCUTS_GLADEFILE = "/usr/share/webapp-manager/shortcuts.ui"
44+ EI_TOOL_GLADEFILE = "/usr/share/webapp-manager/ei_tool.ui"
4145
4246class MyApplication (Gtk .Application ):
4347 # Main initialization routine
@@ -68,10 +72,9 @@ def __init__(self, application):
6872 self .icon_theme = Gtk .IconTheme .get_default ()
6973
7074 # Set the Glade file
71- gladefile = "/usr/share/webapp-manager/webapp-manager.ui"
7275 self .builder = Gtk .Builder ()
7376 self .builder .set_translation_domain (APP )
74- self .builder .add_from_file (gladefile )
77+ self .builder .add_from_file (MAIN_WINDOW_GLADEFILE )
7578 self .window = self .builder .get_object ("main_window" )
7679 self .window .set_title (_ ("Web Apps" ))
7780 self .window .set_icon_name ("webapp-manager" )
@@ -238,10 +241,9 @@ def data_func_surface(self, column, cell, model, iter_, *args):
238241 cell .set_property ("surface" , surface )
239242
240243 def open_keyboard_shortcuts (self , widget ):
241- gladefile = "/usr/share/webapp-manager/shortcuts.ui"
242244 builder = Gtk .Builder ()
243245 builder .set_translation_domain (APP )
244- builder .add_from_file (gladefile )
246+ builder .add_from_file (SHORTCUTS_GLADEFILE )
245247 window = builder .get_object ("shortcuts-webappmanager" )
246248 window .set_title (_ ("Web Apps" ))
247249 window .show ()
@@ -559,28 +561,23 @@ def load_webapps(self):
559561 # Export and Import feature "ei"
560562 def open_ei_tool (self , action ):
561563 # Open the import / export window
562- gladefile = "/usr/share/webapp-manager/ei_tool.ui"
563564 builder = Gtk .Builder ()
564565 builder .set_translation_domain (APP )
565- builder .add_from_file (gladefile )
566+ builder .add_from_file (EI_TOOL_GLADEFILE )
566567 window = builder .get_object ("window" )
568+
567569 # Translate text and prepare widgets
568570 if action == "export" :
569571 window .set_title (_ ("Export Tool" ))
570572 else :
571573 window .set_title (_ ("Import Tool" ))
572574 builder .get_object ("choose_location_text" ).set_text (_ ("Choose a location" ))
573- builder .get_object ("include_browserdata" ).set_label (_ ("BETA: Include Browser data (Config, Cache, Extensions...)\n It requires the same browser version on the destination computer\n It might take some time." ))
574- builder .get_object ("no_browser_data" ).set_text (_ ("Browser data import not available because \n it is not included in the importet file." ))
575- builder .get_object ("no_browser_data" ).set_visible (False )
576575 builder .get_object ("start_button" ).set_label (_ ("Start" ))
577576 builder .get_object ("start_button" ).connect ("clicked" , lambda button : self .ei_start_process (button , ei_task_info ))
578- builder .get_object ("cancel_button" ).set_visible (False )
579- builder .get_object ("select_location_button" ).connect ("clicked" , lambda widget : self .select_location (ei_task_info ))
577+ builder .get_object ("select_location_button" ).connect ("clicked" , lambda widget : self .ei_select_location (ei_task_info ))
580578
581579 # Prepare ei_task_info which stores all the values for the import / export
582- stop_event = threading .Event ()
583- ei_task_info = ei_task (self .show_ei_result , self .update_ei_progress , builder , self , window , stop_event , action )
580+ ei_task_info = ei_task (self .show_ei_result , self .update_ei_progress , builder , self , window , action )
584581 window .show ()
585582
586583 def ei_start_process (self , button , ei_task_info : ei_task ):
@@ -589,25 +586,24 @@ def ei_start_process(self, button, ei_task_info: ei_task):
589586 path = buffer .get_text (buffer .get_start_iter (), buffer .get_end_iter (), True )
590587 if path != "" :
591588 ei_task_info .path = path
592- ei_task_info .include_browserdata = ei_task_info .builder .get_object ("include_browserdata" ).get_active ()
593589 button .set_sensitive (False )
594590 if ei_task_info .task == "export" :
595- thread = threading .Thread (target = export_config , args = (ei_task_info ,))
591+ export_config (ei_task_info )
592+ #thread = threading.Thread(target=export_config, args=(ei_task_info,))
596593 else :
597- thread = threading .Thread (target = import_config , args = (ei_task_info ,))
598- thread .start ()
599- ei_task_info .builder .get_object ("cancel_button" ).set_visible (True )
600- ei_task_info .builder .get_object ("cancel_button" ).connect ("clicked" , lambda button : self .abort_ei (button , ei_task_info , thread ))
594+ import_config (ei_task_info )
595+ #thread = threading.Thread(target=import_config, args=(ei_task_info,))
596+ #thread.start()
601597
602598
603- def select_location (self , ei_task_info : ei_task ):
599+ def ei_select_location (self , ei_task_info : ei_task ):
604600 # Open the file chooser window
605601 if ei_task_info .task == "export" :
606602 buttons = (Gtk .STOCK_CANCEL , Gtk .ResponseType .CANCEL , Gtk .STOCK_SAVE , Gtk .ResponseType .OK )
607603 dialog = Gtk .FileChooserDialog (_ ("Export Configuration - Please choose a file location" ), self .window , Gtk .FileChooserAction .SAVE , buttons )
608604 else :
609605 buttons = (Gtk .STOCK_CANCEL , Gtk .ResponseType .CANCEL , Gtk .STOCK_OPEN , Gtk .ResponseType .OK )
610- dialog = Gtk .FileChooserDialog (_ ("Import Configuration - Please select the file " ), self .window , Gtk .FileChooserAction .OPEN , buttons )
606+ dialog = Gtk .FileChooserDialog (_ ("Import Configuration - Please select the archive " ), self .window , Gtk .FileChooserAction .OPEN , buttons )
611607
612608 filter = Gtk .FileFilter ()
613609 filter .set_name (".tar.gz" )
@@ -619,41 +615,20 @@ def select_location(self, ei_task_info: ei_task):
619615 if ei_task_info .task == "export" :
620616 path += ".tar.gz"
621617 ei_task_info .builder .get_object ("file_path" ).get_buffer ().set_text (path )
622-
623- # Check if include browser data is available
624- include_browser_available = True
625- if ei_task_info .task == "import" :
626- if not check_browser_directories_tar (path ):
627- include_browser_available = False
628-
629- ei_task_info .builder .get_object ("include_browserdata" ).set_sensitive (include_browser_available )
630- ei_task_info .builder .get_object ("no_browser_data" ).set_visible (not include_browser_available )
631- ei_task_info .builder .get_object ("include_browserdata" ).set_active (include_browser_available )
632618 dialog .destroy ()
633619
634-
635- def abort_ei (self , button , ei_task_info :ei_task , thread ):
636- # Abort the export / import process
637- button .set_sensitive (False )
638- self .update_ei_progress (ei_task_info , 0 )
639- # The backend function will automatically clean up after the stop flag is triggered.
640- ei_task_info .stop_event .set ()
641- thread .join ()
642-
643620 def update_ei_progress (self , ei_task_info :ei_task , progress ):
644- # Update the progress bar or close the tool window by 100%.
621+ # Update the progress bar
645622 try :
646- ei_task_info .builder .get_object ("progress" ).set_fraction (progress )
647- if progress == 1 :
648- ei_task_info .window .destroy ()
623+ ei_task_info .builder .get_object ("progress" ).set_fraction (progress )
649624 except :
650625 # The user closed the progress window
651626 pass
652627
653628
654629 def show_ei_result (self , ei_task_info :ei_task ):
655630 # Displays a success or failure message when the process is complete.
656- ei_task_info .window . destroy ()
631+ ei_task_info .webAppLauncherSelf . load_webapps ()
657632 if ei_task_info .result == "ok" :
658633 message = _ (ei_task_info .task .capitalize () + " completed!" )
659634 else :
@@ -667,16 +642,19 @@ def show_ei_result(self, ei_task_info:ei_task):
667642 result = dialog .run ()
668643 if result == 10 :
669644 # Open Containing Folder
670- print ("open folder" )
671645 os .system ("xdg-open " + os .path .dirname (ei_task_info .path ))
672646 else :
673647 dialog = Gtk .MessageDialog (text = message , message_type = Gtk .MessageType .INFO , buttons = Gtk .ButtonsType .OK )
674648 dialog .run ()
675649
676650 dialog .destroy ()
677- ei_task_info .webAppLauncherSelf .load_webapps ()
651+ try :
652+ ei_task_info .window .destroy ()
653+ except :
654+ # User closed the window manually
655+ pass
656+
678657
679658if __name__ == "__main__" :
680659 application = MyApplication ("org.x.webapp-manager" , Gio .ApplicationFlags .FLAGS_NONE )
681- application .run ()
682-
660+ application .run ()
0 commit comments