Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions ClipCascade_Desktop/src/cli/tray.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ def create_menu(self, item_: tuple = None):
menu_items = [
"", # Menu Separator
("🗒️ Open Logs", self._open_logs),
("📂 Program Files", self._open_program_location),
("📂 Config Files", self._open_program_location),
"", # Menu Separator
("🏠 Homepage", self._open_homepage),
("❓ Help", self._open_help),
Expand Down Expand Up @@ -272,7 +272,10 @@ def open_location(self, path):
subprocess.run(["xdg-open", path])

def _open_logs(self):
log_file_path = os.path.join(get_program_files_directory(), LOG_FILE_NAME)
if PLATFORM.startswith(LINUX):
log_file_path = os.path.join(get_user_cache_directory(), LOG_FILE_NAME)
else:
log_file_path = os.path.join(get_program_files_directory(), LOG_FILE_NAME)
if os.path.exists(log_file_path):
try:
self.open_location(log_file_path)
Expand All @@ -288,7 +291,10 @@ def _open_logs(self):

def _open_program_location(self):
try:
program_location = get_program_files_directory()
if PLATFORM.startswith(LINUX):
program_location = get_user_config_directory()
else:
program_location = get_program_files_directory()
self.open_location(program_location)
except Exception as e:
CustomDialog(
Expand Down
33 changes: 23 additions & 10 deletions ClipCascade_Desktop/src/core/application.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,19 +38,32 @@ def __init__(
mutex_identifier=MUTEX_NAME,
):
try:
self.log_file_path = os.path.join(
get_program_files_directory(), log_file_path
)
self.data_file_path = os.path.join(
get_program_files_directory(), data_file_path
)
if PLATFORM.startswith(LINUX):
self.log_file_path = os.path.join(
get_user_cache_directory(), log_file_path
)
self.data_file_path = os.path.join(
get_user_config_directory(), data_file_path
)
else:
self.log_file_path = os.path.join(
get_program_files_directory(), log_file_path
)
self.data_file_path = os.path.join(
get_program_files_directory(), data_file_path
)
self.mutex_identifier = mutex_identifier

if PLATFORM == MACOS or PLATFORM.startswith(LINUX):
self.lock_file = None # File(lock) object
self.mutex_identifier = os.path.join(
get_program_files_directory(), self.mutex_identifier
)
self.lock_file = None
if PLATFORM.startswith(LINUX):
self.mutex_identifier = os.path.join(
get_user_cache_directory(), self.mutex_identifier
)
else:
self.mutex_identifier = os.path.join(
get_program_files_directory(), self.mutex_identifier
)

self.config = Config(
file_name=self.data_file_path
Expand Down
42 changes: 42 additions & 0 deletions ClipCascade_Desktop/src/core/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,3 +159,45 @@ def get_downloads_folder():
- Linux: /home/<Username>/Downloads
"""
return os.path.join(get_user_home_directory(), "Downloads")


def _ensure_dir_exists(path):
if not os.path.exists(path):
os.makedirs(path)
return path


def get_xdg_data_home():
return os.environ.get("XDG_DATA_HOME") or os.path.join(
get_user_home_directory(), ".local", "share"
)


def get_xdg_config_home():
return os.environ.get("XDG_CONFIG_HOME") or os.path.join(
get_user_home_directory(), ".config"
)


def get_xdg_cache_home():
return os.environ.get("XDG_CACHE_HOME") or os.path.join(
get_user_home_directory(), ".cache"
)


def get_user_data_directory():
if PLATFORM.startswith(LINUX):
return _ensure_dir_exists(os.path.join(get_xdg_data_home(), "clipcascade"))
return get_program_files_directory()


def get_user_config_directory():
if PLATFORM.startswith(LINUX):
return _ensure_dir_exists(os.path.join(get_xdg_config_home(), "clipcascade"))
return get_program_files_directory()


def get_user_cache_directory():
if PLATFORM.startswith(LINUX):
return _ensure_dir_exists(os.path.join(get_xdg_cache_home(), "clipcascade"))
return get_program_files_directory()
27 changes: 19 additions & 8 deletions ClipCascade_Desktop/src/gui/tray.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ def create_menu(self, item_: tuple = None):
menu_items = [
Menu.SEPARATOR,
item("🗒️ Open Logs", self._open_logs),
item("📂 Program Files", self._open_program_location),
item("📂 Config Files", self._open_program_location),
Menu.SEPARATOR,
item("🏠 Homepage", self._open_homepage),
item("❓ Help", self._open_help),
Expand Down Expand Up @@ -290,7 +290,10 @@ def open_location(self, path):
subprocess.run(["xdg-open", path])

def _open_logs(self, icon, item):
log_file_path = os.path.join(get_program_files_directory(), LOG_FILE_NAME)
if PLATFORM.startswith(LINUX):
log_file_path = os.path.join(get_user_cache_directory(), LOG_FILE_NAME)
else:
log_file_path = os.path.join(get_program_files_directory(), LOG_FILE_NAME)
if os.path.exists(log_file_path):
try:
self.open_location(log_file_path)
Expand All @@ -306,7 +309,10 @@ def _open_logs(self, icon, item):

def _open_program_location(self, icon, item):
try:
program_location = get_program_files_directory()
if PLATFORM.startswith(LINUX):
program_location = get_user_config_directory()
else:
program_location = get_program_files_directory()
self.open_location(program_location)
except Exception as e:
CustomDialog(
Expand Down Expand Up @@ -347,17 +353,22 @@ def _on_download(self, icon, item, files):
logging.debug("No directory selected. Exiting.")
return
except RuntimeError as re:
target_directory = os.path.join(
get_program_files_directory(), "downloads"
)
if PLATFORM.startswith(LINUX):
target_directory = os.path.join(
get_user_data_directory(), "downloads"
)
else:
target_directory = os.path.join(
get_program_files_directory(), "downloads"
)
if not os.path.exists(target_directory):
os.makedirs(target_directory)
logging.error(
f"A runtime error occurred while starting filedialog to select a directory. Error: {re}.\n"
+ f"Setting the default location to the program directory '{target_directory}'."
+ f"Setting the default location to '{target_directory}'."
)
CustomDialog(
f"ClipCascade 📥: Saving files to the program directory '{target_directory}'.",
f"ClipCascade 📥: Saving files to '{target_directory}'.",
msg_type="info",
timeout=5000,
).mainloop()
Expand Down