Fleshed out session load
This commit is contained in:
		@@ -1,5 +1,5 @@
 | 
				
			|||||||
# Python imports
 | 
					# Python imports
 | 
				
			||||||
import traceback, threading, inspect, os, time
 | 
					import traceback, threading, inspect, os, gc, time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Lib imports
 | 
					# Lib imports
 | 
				
			||||||
import gi
 | 
					import gi
 | 
				
			||||||
@@ -76,30 +76,44 @@ class Controller(UIMixin, KeyboardSignalsMixin, IPCSignalsMixin, ExceptionHookMi
 | 
				
			|||||||
        wid, tid          = self.window_controller.get_active_data()
 | 
					        wid, tid          = self.window_controller.get_active_data()
 | 
				
			||||||
        view              = self.get_fm_window(wid).get_view_by_id(tid)
 | 
					        view              = self.get_fm_window(wid).get_view_by_id(tid)
 | 
				
			||||||
        save_load_dialog  = self.builder.get_object("save_load_dialog")
 | 
					        save_load_dialog  = self.builder.get_object("save_load_dialog")
 | 
				
			||||||
        save_load_dialog.set_current_folder(view.get_current_directory())
 | 
					 | 
				
			||||||
        save_load_dialog.set_current_name("session.json")
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if action == "save_session":
 | 
					        if action == "save_session":
 | 
				
			||||||
            save_load_dialog.set_action(Gtk.FileChooserAction.SAVE)
 | 
					            save_load_dialog.set_action(Gtk.FileChooserAction.SAVE)
 | 
				
			||||||
        elif action == "load_session":
 | 
					        elif action == "load_session":
 | 
				
			||||||
            save_load_dialog.set_action(Gtk.FileChooserAction.OPEN)
 | 
					            save_load_dialog.set_action(Gtk.FileChooserAction.OPEN)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        save_load_dialog.set_current_folder(view.get_current_directory())
 | 
				
			||||||
 | 
					        save_load_dialog.set_current_name("session.json")
 | 
				
			||||||
        response = save_load_dialog.run()
 | 
					        response = save_load_dialog.run()
 | 
				
			||||||
        if response == Gtk.ResponseType.OK:
 | 
					        if response == Gtk.ResponseType.OK:
 | 
				
			||||||
            path = f"{save_load_dialog.get_current_folder()}/{save_load_dialog.get_current_name()}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if action == "save_session":
 | 
					            if action == "save_session":
 | 
				
			||||||
 | 
					                path = f"{save_load_dialog.get_current_folder()}/{save_load_dialog.get_current_name()}"
 | 
				
			||||||
                self.window_controller.save_state(path)
 | 
					                self.window_controller.save_state(path)
 | 
				
			||||||
            elif action == "load_session":
 | 
					            elif action == "load_session":
 | 
				
			||||||
 | 
					                path         = f"{save_load_dialog.get_file().get_path()}"
 | 
				
			||||||
                session_json = self.window_controller.load_state(path)
 | 
					                session_json = self.window_controller.load_state(path)
 | 
				
			||||||
                print(session_json)
 | 
					                self.load_session(session_json)
 | 
				
			||||||
        if (response == Gtk.ResponseType.CANCEL) or (response == Gtk.ResponseType.DELETE_EVENT):
 | 
					        if (response == Gtk.ResponseType.CANCEL) or (response == Gtk.ResponseType.DELETE_EVENT):
 | 
				
			||||||
            pass
 | 
					            pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        save_load_dialog.hide()
 | 
					        save_load_dialog.hide()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def load_session(self, session_json):
 | 
				
			||||||
 | 
					        if debug:
 | 
				
			||||||
 | 
					            print(f"Session Data: {session_json}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.ctrlDown          = False
 | 
				
			||||||
 | 
					        self.shiftDown         = False
 | 
				
			||||||
 | 
					        self.altDown           = False
 | 
				
			||||||
 | 
					        for notebook in self.notebooks:
 | 
				
			||||||
 | 
					            self.clear_children(notebook)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.window_controller.unload_views_and_windows()
 | 
				
			||||||
 | 
					        self.generate_windows(session_json)
 | 
				
			||||||
 | 
					        gc.collect()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def do_action_from_menu_controls(self, widget, eventbutton):
 | 
					    def do_action_from_menu_controls(self, widget, eventbutton):
 | 
				
			||||||
        action        = widget.get_name()
 | 
					        action        = widget.get_name()
 | 
				
			||||||
        self.ctrlDown = True
 | 
					        self.ctrlDown = True
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,9 +16,9 @@ from . import TabMixin, WidgetMixin
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class WindowMixin(TabMixin):
 | 
					class WindowMixin(TabMixin):
 | 
				
			||||||
    """docstring for WindowMixin"""
 | 
					    """docstring for WindowMixin"""
 | 
				
			||||||
    def generate_windows(self, data = None):
 | 
					    def generate_windows(self, session_json = None):
 | 
				
			||||||
        if data:
 | 
					        if session_json:
 | 
				
			||||||
            for j, value in enumerate(data):
 | 
					            for j, value in enumerate(session_json):
 | 
				
			||||||
                i = j + 1
 | 
					                i = j + 1
 | 
				
			||||||
                isHidden = True if value[0]["window"]["isHidden"] == "True" else False
 | 
					                isHidden = True if value[0]["window"]["isHidden"] == "True" else False
 | 
				
			||||||
                object   = self.builder.get_object(f"tggl_notebook_{i}")
 | 
					                object   = self.builder.get_object(f"tggl_notebook_{i}")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -151,32 +151,41 @@ class WindowController:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def unload_views_and_windows(self):
 | 
				
			||||||
 | 
					        for window in self.windows:
 | 
				
			||||||
 | 
					            window.views.clear()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.windows.clear()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def save_state(self, session_file = None):
 | 
					    def save_state(self, session_file = None):
 | 
				
			||||||
        if not session_file:
 | 
					        if not session_file:
 | 
				
			||||||
            session_file = self.session_file
 | 
					            session_file = self.session_file
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        windows = []
 | 
					        if len(self.windows) > 0:
 | 
				
			||||||
        for window in self.windows:
 | 
					            windows = []
 | 
				
			||||||
            views = []
 | 
					            for window in self.windows:
 | 
				
			||||||
            for view in window.views:
 | 
					                views = []
 | 
				
			||||||
                views.append(view.get_current_directory())
 | 
					                for view in window.views:
 | 
				
			||||||
 | 
					                    views.append(view.get_current_directory())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            windows.append(
 | 
					                windows.append(
 | 
				
			||||||
                [
 | 
					                    [
 | 
				
			||||||
                    {
 | 
					                        {
 | 
				
			||||||
                        'window':{
 | 
					                            'window':{
 | 
				
			||||||
                            "ID": window.id,
 | 
					                                "ID": window.id,
 | 
				
			||||||
                            "Name": window.name,
 | 
					                                "Name": window.name,
 | 
				
			||||||
                            "Nickname": window.nickname,
 | 
					                                "Nickname": window.nickname,
 | 
				
			||||||
                            "isHidden": f"{window.isHidden}",
 | 
					                                "isHidden": f"{window.isHidden}",
 | 
				
			||||||
                            'views': views
 | 
					                                'views': views
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    ]
 | 
				
			||||||
                ]
 | 
					                )
 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        with open(session_file, 'w') as outfile:
 | 
					            with open(session_file, 'w') as outfile:
 | 
				
			||||||
            json.dump(windows, outfile, separators=(',', ':'), indent=4)
 | 
					                json.dump(windows, outfile, separators=(',', ':'), indent=4)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            raise Exception("Window dara corrupted! Can not save session!")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def load_state(self, session_file = None):
 | 
					    def load_state(self, session_file = None):
 | 
				
			||||||
        if not session_file:
 | 
					        if not session_file:
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user