Implementing toggle of hidden files

Now display of hidden files can be toggled with "."
This addresses issue #38
This commit is contained in:
Anufriev Roman 2024-03-23 09:27:22 +09:00
parent 05f0cb5f0b
commit bf751728fc
5 changed files with 41 additions and 27 deletions

View File

@ -47,19 +47,17 @@ def run():
# Set the wallpaper and quit:
if args.restore or args.random:
for wallpaper, monitor in zip(cf.wallpaper, cf.monitors):
w = wallpaper
for wallpaper, monitor in zip(cf.wallpapers, cf.monitors):
if args.random:
w = get_random_file(cf.backend, cf.image_folder, cf.include_subfolders)
cf.selected_wallpaper = str(w)
wallpaper = get_random_file(cf.backend, cf.image_folder, cf.include_subfolders, cf.show_hidden)
cf.selected_wallpaper = str(wallpaper)
cf.save()
if w is None:
if wallpaper is None:
continue
change_wallpaper(w, cf, monitor, txt)
change_wallpaper(wallpaper, cf, monitor, txt)
time.sleep(0.1)
sys.exit(0)

View File

@ -257,7 +257,7 @@ class App(Gtk.Window):
def process_images(self):
"""Load images from the selected folder, resize them, and arrange into a grid"""
self.image_paths = get_image_paths(self.cf.backend, self.cf.image_folder, self.cf.include_subfolders, depth=1)
self.image_paths = get_image_paths(self.cf.backend, self.cf.image_folder, self.cf.include_subfolders, self.cf.show_hidden, depth=1)
self.sort_images()
# Show caching label:
@ -436,6 +436,13 @@ class App(Gtk.Window):
self.cf.save()
def toggle_hidden_files(self):
"""Toggle visibility of hidden files"""
self.cf.show_hidden = not self.cf.show_hidden
threading.Thread(target=self.process_images).start()
self.cf.save()
def clear_cache(self):
"""Delete cache folder and reprocess the images"""
try:
@ -457,6 +464,9 @@ class App(Gtk.Window):
elif event.keyval == Gdk.KEY_R:
self.set_random_wallpaper()
elif event.keyval in [Gdk.KEY_period]:
self.toggle_hidden_files()
elif event.keyval in [Gdk.KEY_h, Gdk.KEY_Left]:
self.selected_index = max(self.selected_index - 1, 0)
self.load_image_grid()

View File

@ -13,7 +13,7 @@ def has_image_extension(file_path, backend):
return ext in image_extensions
def get_image_paths(backend, root_folder, include_subfolders=False, depth=None):
def get_image_paths(backend, root_folder, include_subfolders=False, include_hidden=False, depth=None):
"""Get a list of file paths depending of weather we include subfolders and how deep we scan"""
image_paths = []
for root, directories, files in os.walk(root_folder):
@ -24,15 +24,18 @@ def get_image_paths(backend, root_folder, include_subfolders=False, depth=None):
if current_depth > depth:
continue
for filename in files:
if has_image_extension(filename, backend):
image_paths.append(os.path.join(root, filename))
if not has_image_extension(filename, backend):
continue
if filename.startswith('.') and not include_hidden:
continue
image_paths.append(os.path.join(root, filename))
return image_paths
def get_random_file(backend, folder, include_subfolders):
def get_random_file(backend, folder, include_subfolders, include_hidden=False):
"""Pick a random file from the folder"""
try:
image_paths = get_image_paths(backend, folder, include_subfolders, depth=1)
image_paths = get_image_paths(backend, folder, include_subfolders, include_hidden, depth=1)
return random.choice(image_paths)
except:
return None

View File

@ -28,9 +28,10 @@ class Config:
self.swww_transition_duration = 2
self.lang = "en"
self.monitors = [self.selected_monitor]
self.wallpaper = []
self.wallpapers = []
self.post_command = ""
self.include_subfolders = False
self.show_hidden = False
self.about = AboutData()
self.cache_dir = user_cache_path(self.about.applicationName())
self.config_dir = user_config_path(self.about.applicationName())
@ -62,14 +63,15 @@ class Config:
self.swww_transition_duration = config.get("Settings", "swww_transition_duration", fallback=self.swww_transition_duration)
self.lang = config.get("Settings", "language", fallback=self.lang)
self.include_subfolders = config.getboolean("Settings", "subfolders", fallback=self.include_subfolders)
self.show_hidden = config.getboolean("Settings", "show_hidden", fallback=self.show_hidden)
self.monitors_str = config.get("Settings", "monitors", fallback=self.selected_monitor, raw=True)
self.wallpaper_str = config.get("Settings", "wallpaper", fallback="", raw=True)
self.wallpapers_str = config.get("Settings", "wallpaper", fallback="", raw=True)
# Convert strings to lists:
if self.monitors_str is not None:
self.monitors = [str(monitor) for monitor in self.monitors_str.split(",")]
if self.wallpaper_str is not None:
self.wallpaper = [str(paper) for paper in self.wallpaper_str.split(",")]
if self.wallpapers_str is not None:
self.wallpapers = [str(paper) for paper in self.wallpapers_str.split(",")]
def check_validity(self):
"""Check if the config parameters are valid and correct them if needed"""
@ -95,13 +97,13 @@ class Config:
# If only certain monitor was affected, change only its wallpaper:
if self.selected_monitor == "All":
self.monitors = [self.selected_monitor]
self.wallpaper = [self.selected_wallpaper]
self.wallpapers = [self.selected_wallpaper]
elif self.selected_monitor in self.monitors:
index = self.monitors.index(self.selected_monitor)
self.wallpaper[index] = self.selected_wallpaper
self.wallpapers[index] = self.selected_wallpaper
else:
self.monitors.append(self.selected_monitor)
self.wallpaper.append(self.selected_wallpaper)
self.wallpapers.append(self.selected_wallpaper)
# Write configuration to the file:
config = configparser.ConfigParser()
@ -110,13 +112,14 @@ class Config:
config.add_section("Settings")
config.set("Settings", "language", self.lang)
config.set("Settings", "folder", self.image_folder)
config.set("Settings", "wallpaper", ",".join(self.wallpaper))
config.set("Settings", "wallpaper", ",".join(self.wallpapers))
config.set("Settings", "backend", self.backend)
config.set("Settings", "monitors", ",".join(self.monitors))
config.set("Settings", "fill", self.fill_option)
config.set("Settings", "sort", self.sort_option)
config.set("Settings", "color", self.color)
config.set("Settings", "subfolders", str(self.include_subfolders))
config.set("Settings", "show_hidden", str(self.show_hidden))
config.set("Settings", "post_command", self.post_command)
config.set("Settings", "swww_transition_type", str(self.swww_transition_type))
config.set("Settings", "swww_transition_step", str(self.swww_transition_step))

View File

@ -25,7 +25,7 @@ class English:
self.msg_help = "Waypaper's hotkeys:\n\nhjkl - Navigation (←↓↑→)\nf - Change wallpaper folder\n"
self.msg_help += "g - Scroll to top\nG - Scroll to bottom\nR - Set random wallpaper\nr - Recache wallpapers\n"
self.msg_help += "s - Include/exclude images in subfolders\n? - Help\nq - Exit\n\n"
self.msg_help += ". - Include/exclude hidden images\ns - Include/exclude images in subfolders\n? - Help\nq - Exit\n\n"
self.msg_help += self.msg_info
self.err_cache = "Error deleting cache"
@ -74,7 +74,7 @@ class German:
self.msg_help = "Waypapers Tastenkürzel:\n\nhjkl - Navigation (←↓↑→)\nf - Hintergrundbild-Ordner ändern\n"
self.msg_help += "g - Zum Anfang scrollen\nG - Zum Ende scrollen\nR - Zufälliges Hintergrundbild\nr - Hintergrundbilder zwischenspeichern\n"
self.msg_help += "s - Unterordner mit einbeziehen\n? - Hilfe\nq - Beenden\n\n"
self.msg_help += ". - Versteckte Bilder einbeziehen/ausschließen\ns - Unterordner mit einbeziehen\n? - Hilfe\nq - Beenden\n\n"
self.msg_help += self.msg_info
self.err_cache = "Fehler beim Löschen des Zwischenspeichers"
@ -123,7 +123,7 @@ class French:
self.msg_help = "Raccourcis clavier de Waypaper :\n\nhjkl - Navigation (←↓↑→)\nf - Changer de dossier de papier peint\n"
self.msg_help += "g - Faire défiler vers le haut\nG - Faire défiler vers le bas\nR - Définir un papier peint aléatoire\nr - Recréer le cache des papiers peints\n"
self.msg_help += "s - Inclure/exclure les images des sous-dossiers\n? - Aide\nq - Quitter\n\n"
self.msg_help += ". - Inclure/exclure les images cachées\ns - Inclure/exclure les images des sous-dossiers\n? - Aide\nq - Quitter\n\n"
self.msg_help += self.msg_info
self.err_cache = "Erreur lors de la suppression du cache"
@ -172,7 +172,7 @@ class Polish:
self.msg_help = "Skróty klawiszowe Waypaper:\n\nhjkl - Nawigacja (←↓↑→)\nf - Zmień folder z tapetami\n"
self.msg_help += "g - Przewiń do góry\nG - Przewiń na dół\nR - Ustaw losową tapetę\nr - Odśwież katalog z tapetami\n"
self.msg_help += "s - Dołącz/wyłącz obrazy z podkatalogów\n? - Pomoc\nq - Wyjście\n\n"
self.msg_help += ". - Załącz/Wyłącz ukryte obrazy\ns - Dołącz/wyłącz obrazy z podkatalogów\n? - Pomoc\nq - Wyjście\n\n"
self.msg_help += self.msg_info
self.err_cache = "Błąd podczas usuwania pamięci podręcznej"
@ -221,7 +221,7 @@ class Russian:
self.msg_help = "Горячие клавиши Waypaper:\n\nhjkl - Навигация (←↓↑→)\nf - Изменить папку с обоями\n"
self.msg_help += "g - Прокрутка в начало\nG - Прокрутка в конец\nR - Установить случайные обои\nr - Обновить кэш обоев\n"
self.msg_help += "s - Включить/отключить изображения в подпапках\n? - Справка\nq - Выход\n\n"
self.msg_help += ". - Включить/исключить скрытые файлы \ns - Включить/исключить подпапки\n? - Справка\nq - Выход\n\n"
self.msg_help += self.msg_info
self.err_cache = "Ошибка при удалении кэша"
@ -270,7 +270,7 @@ class Chinese:
self.msg_help = "Waypaper 的热键:\n\nhjkl -导航 (←↓↑→)\nf -更改壁纸文件夹\n"
self.msg_help += "g -滚动到顶部\nG -滚动到底部\nR -设置随机壁纸\nr -重新缓存壁纸\n"
self.msg_help += "s -包含/排除子文件夹中的图像\n -帮助\nq -退出\n\n"
self.msg_help += ". - 包括/排除隐藏图像\ns -包含/排除子文件夹中的图像\n -帮助\nq -退出\n\n"
self.msg_help += self.msg_info
self.err_cache = "删除缓存时出错"