2022-02-11 06:58:49 +00:00
|
|
|
# Python imports
|
2023-01-29 06:10:09 +00:00
|
|
|
import threading
|
|
|
|
import json
|
2022-02-11 06:58:49 +00:00
|
|
|
from os import path
|
|
|
|
|
|
|
|
# Lib imports
|
|
|
|
|
|
|
|
# Application imports
|
|
|
|
from .window import Window
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WindowController:
|
|
|
|
def __init__(self):
|
2022-10-28 02:26:58 +00:00
|
|
|
USER_HOME: str = path.expanduser('~')
|
|
|
|
CONFIG_PATH: str = f"{USER_HOME}/.config/solarfm"
|
|
|
|
self._session_file: srr = f"{CONFIG_PATH}/session.json"
|
2022-02-11 06:58:49 +00:00
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
self._event_sleep_time: int = 1
|
|
|
|
self._active_window_id: str = ""
|
|
|
|
self._active_tab_id: str = ""
|
|
|
|
self._windows: list = []
|
2022-02-11 06:58:49 +00:00
|
|
|
|
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def set_wid_and_tid(self, wid: int, tid: int) -> None:
|
2022-02-11 06:58:49 +00:00
|
|
|
self._active_window_id = str(wid)
|
|
|
|
self._active_tab_id = str(tid)
|
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def get_active_wid_and_tid(self) -> list:
|
2022-02-11 06:58:49 +00:00
|
|
|
return self._active_window_id, self._active_tab_id
|
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def create_window(self) -> Window:
|
2022-02-11 06:58:49 +00:00
|
|
|
window = Window()
|
|
|
|
window.set_nickname(f"window_{str(len(self._windows) + 1)}")
|
|
|
|
self._windows.append(window)
|
|
|
|
return window
|
|
|
|
|
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def add_tab_for_window(self, win_id: str) -> None:
|
2022-02-11 06:58:49 +00:00
|
|
|
for window in self._windows:
|
|
|
|
if window.get_id() == win_id:
|
2022-02-25 23:58:11 +00:00
|
|
|
return window.create_tab()
|
2022-02-11 06:58:49 +00:00
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def add_tab_for_window_by_name(self, name: str) -> None:
|
2022-02-11 06:58:49 +00:00
|
|
|
for window in self._windows:
|
|
|
|
if window.get_name() == name:
|
2022-02-25 23:58:11 +00:00
|
|
|
return window.create_tab()
|
2022-02-11 06:58:49 +00:00
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def add_tab_for_window_by_nickname(self, nickname: str) -> None:
|
2022-02-11 06:58:49 +00:00
|
|
|
for window in self._windows:
|
|
|
|
if window.get_nickname() == nickname:
|
2022-02-25 23:58:11 +00:00
|
|
|
return window.create_tab()
|
2022-02-11 06:58:49 +00:00
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def pop_window(self) -> None:
|
2022-02-11 06:58:49 +00:00
|
|
|
self._windows.pop()
|
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def delete_window_by_id(self, win_id: str) -> None:
|
2022-02-11 06:58:49 +00:00
|
|
|
for window in self._windows:
|
|
|
|
if window.get_id() == win_id:
|
|
|
|
self._windows.remove(window)
|
|
|
|
break
|
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def delete_window_by_name(self, name: str) -> str:
|
2022-02-11 06:58:49 +00:00
|
|
|
for window in self._windows:
|
|
|
|
if window.get_name() == name:
|
|
|
|
self._windows.remove(window)
|
|
|
|
break
|
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def delete_window_by_nickname(self, nickname: str) -> str:
|
2022-02-11 06:58:49 +00:00
|
|
|
for window in self._windows:
|
|
|
|
if window.get_nickname() == nickname:
|
|
|
|
self._windows.remove(window)
|
|
|
|
break
|
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def get_window_by_id(self, win_id: str) -> Window:
|
2022-02-11 06:58:49 +00:00
|
|
|
for window in self._windows:
|
|
|
|
if window.get_id() == win_id:
|
|
|
|
return window
|
|
|
|
|
|
|
|
raise(f"No Window by ID {win_id} found!")
|
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def get_window_by_name(self, name: str) -> Window:
|
2022-02-11 06:58:49 +00:00
|
|
|
for window in self._windows:
|
|
|
|
if window.get_name() == name:
|
|
|
|
return window
|
|
|
|
|
|
|
|
raise(f"No Window by Name {name} found!")
|
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def get_window_by_nickname(self, nickname: str) -> Window:
|
2022-02-11 06:58:49 +00:00
|
|
|
for window in self._windows:
|
|
|
|
if window.get_nickname() == nickname:
|
|
|
|
return window
|
|
|
|
|
|
|
|
raise(f"No Window by Nickname {nickname} found!")
|
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def get_window_by_index(self, index: int) -> Window:
|
2022-02-11 06:58:49 +00:00
|
|
|
return self._windows[index]
|
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def get_all_windows(self) -> list:
|
2022-02-11 06:58:49 +00:00
|
|
|
return self._windows
|
|
|
|
|
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def set_window_nickname(self, win_id: str = None, nickname: str = "") -> None:
|
2022-02-11 06:58:49 +00:00
|
|
|
for window in self._windows:
|
|
|
|
if window.get_id() == win_id:
|
|
|
|
window.set_nickname(nickname)
|
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def list_windows(self) -> None:
|
2022-02-11 06:58:49 +00:00
|
|
|
print("\n[ ---- Windows ---- ]\n")
|
|
|
|
for window in self._windows:
|
|
|
|
print(f"\nID: {window.get_id()}")
|
|
|
|
print(f"Name: {window.get_name()}")
|
|
|
|
print(f"Nickname: {window.get_nickname()}")
|
|
|
|
print(f"Is Hidden: {window.is_hidden()}")
|
2022-02-25 23:58:11 +00:00
|
|
|
print(f"Tab Count: {window.get_tabs_count()}")
|
2022-02-11 06:58:49 +00:00
|
|
|
print("\n-------------------------\n")
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def list_files_from_tabs_of_window(self, win_id: str) -> None:
|
2022-02-11 06:58:49 +00:00
|
|
|
for window in self._windows:
|
|
|
|
if window.get_id() == win_id:
|
2022-02-25 23:58:11 +00:00
|
|
|
window.list_files_from_tabs()
|
2022-02-11 06:58:49 +00:00
|
|
|
break
|
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def get_tabs_count(self, win_id: str) -> int:
|
2022-02-11 06:58:49 +00:00
|
|
|
for window in self._windows:
|
|
|
|
if window.get_id() == win_id:
|
2022-02-25 23:58:11 +00:00
|
|
|
return window.get_tabs_count()
|
2022-02-11 06:58:49 +00:00
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def get_tabs_from_window(self, win_id: str) -> list:
|
2022-02-11 06:58:49 +00:00
|
|
|
for window in self._windows:
|
|
|
|
if window.get_id() == win_id:
|
2022-02-25 23:58:11 +00:00
|
|
|
return window.get_all_tabs()
|
2022-02-11 06:58:49 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def unload_tabs_and_windows(self) -> None:
|
2022-02-11 06:58:49 +00:00
|
|
|
for window in self._windows:
|
2022-02-25 23:58:11 +00:00
|
|
|
window.get_all_tabs().clear()
|
2022-02-11 06:58:49 +00:00
|
|
|
|
|
|
|
self._windows.clear()
|
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def save_state(self, session_file: str = None) -> None:
|
2022-02-11 06:58:49 +00:00
|
|
|
if not session_file:
|
|
|
|
session_file = self._session_file
|
|
|
|
|
|
|
|
if len(self._windows) > 0:
|
|
|
|
windows = []
|
|
|
|
for window in self._windows:
|
2022-02-25 23:58:11 +00:00
|
|
|
tabs = []
|
|
|
|
for tab in window.get_all_tabs():
|
|
|
|
tabs.append(tab.get_current_directory())
|
2022-02-11 06:58:49 +00:00
|
|
|
|
|
|
|
windows.append(
|
2022-10-10 01:59:44 +00:00
|
|
|
{
|
|
|
|
'window':{
|
|
|
|
"ID": window.get_id(),
|
|
|
|
"Name": window.get_name(),
|
|
|
|
"Nickname": window.get_nickname(),
|
|
|
|
"isHidden": f"{window.is_hidden()}",
|
|
|
|
'tabs': tabs
|
2022-02-11 06:58:49 +00:00
|
|
|
}
|
2022-10-10 01:59:44 +00:00
|
|
|
}
|
2022-02-11 06:58:49 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
with open(session_file, 'w') as outfile:
|
|
|
|
json.dump(windows, outfile, separators=(',', ':'), indent=4)
|
|
|
|
else:
|
|
|
|
raise Exception("Window data corrupted! Can not save session!")
|
|
|
|
|
2022-10-28 02:26:58 +00:00
|
|
|
def get_state_from_file(self, session_file: str = None) -> dict:
|
2022-02-11 06:58:49 +00:00
|
|
|
if not session_file:
|
|
|
|
session_file = self._session_file
|
|
|
|
|
|
|
|
if path.isfile(session_file):
|
|
|
|
with open(session_file) as infile:
|
|
|
|
return json.load(infile)
|