Implement support for a systray
This commit is contained in:
		
							parent
							
								
									fa13c7f135
								
							
						
					
					
						commit
						138053d8d1
					
				
					 1 changed files with 51 additions and 10 deletions
				
			
		|  | @ -4,11 +4,10 @@ from os import chdir, getenv, system | |||
| import logging | ||||
| import tomllib | ||||
| from datetime import datetime, time | ||||
| from apscheduler.schedulers.blocking import BlockingScheduler | ||||
| from apscheduler.triggers.cron import CronTrigger | ||||
| 
 | ||||
| # setup logging | ||||
| logger = logging.getLogger(__name__) | ||||
| logger = logging.getLogger("wallman") | ||||
| 
 | ||||
| class ConfigError(Exception): | ||||
|     pass | ||||
|  | @ -36,9 +35,24 @@ class _ConfigLib: | |||
|         except KeyError: | ||||
|             self.config_notify = False | ||||
|             logger.warning("'notify' is not set in dictionary general in the config file, defaulting to 'false'.") | ||||
|         try: | ||||
|             self.config_systray = self.config_general["systray"] | ||||
|         except KeyError: | ||||
|             self.config_systray = True | ||||
|             logger.warning("'systray' is not set in the dictionary general in the config file, defaulting to 'true'.") | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|         # Setup logging | ||||
|         self._set_log_level() | ||||
|         if self.config_systray: | ||||
|             self._initialize_systray() | ||||
| 
 | ||||
|     def _initialize_systray(self): | ||||
|         try: | ||||
|             import wallman_systray | ||||
|         except (ImportError, FileNotFoundError): | ||||
|             self.config_systray = False | ||||
| 
 | ||||
|     def _set_log_level(self): | ||||
|         global logging | ||||
|  | @ -212,11 +226,38 @@ class WallpaperLogic(_ConfigLib): | |||
|             self._notify_user() | ||||
|         return has_wallpaper_been_set | ||||
| 
 | ||||
|     def schedule_wallpapers(self): | ||||
|         scheduler = BlockingScheduler() | ||||
|         # Create a scheduled job for every changing time | ||||
|         for changing_time in range(len(self.config_changing_times)): | ||||
|             clean_time = self._clean_times(changing_time) | ||||
|             scheduler.add_job(self.set_wallpaper_by_time, trigger=CronTrigger(hour=clean_time[0], minute=clean_time[1], second=clean_time[2])) | ||||
|         scheduler.start() | ||||
|         logger.info("The scheduler has been started.") | ||||
|     def run_wallpapers(self): | ||||
|         def _schedule_background_wallpapers(): | ||||
|             from apscheduler.schedulers.background import BackgroundScheduler | ||||
|             scheduler = BackgroundScheduler() | ||||
|             # Create a scheduled job for every changing time | ||||
|             for changing_time in range(len(self.config_changing_times)): | ||||
|                 clean_time = self._clean_times(changing_time) | ||||
|                 scheduler.add_job(self.set_wallpaper_by_time, trigger=CronTrigger(hour=clean_time[0], minute=clean_time[1], second=clean_time[2])) | ||||
|             scheduler.start() | ||||
|             logger.info("The background scheduler has been started.") | ||||
|             return scheduler | ||||
| 
 | ||||
|         def _schedule_blocking_wallpapers(): | ||||
|             from apscheduler.schedulers.blocking import BlockingScheduler | ||||
|             scheduler = BlockingScheduler() | ||||
|             # Create a scheduled job for every changing time | ||||
|             for changing_time in range(len(self.config_changing_times)): | ||||
|                 clean_time = self._clean_times(changing_time) | ||||
|                 scheduler.add_job(self.set_wallpaper_by_time, trigger=CronTrigger(hour=clean_time[0], minute=clean_time[1], second=clean_time[2])) | ||||
|             scheduler.start() | ||||
|             logger.info("The blocking scheduler has been started.") | ||||
| 
 | ||||
|         if self.config_systray: | ||||
|             import wallman_systray as systray | ||||
|             from functools import partial | ||||
|             scheduler = _schedule_background_wallpapers() | ||||
|             menu = systray.Menu ( | ||||
|                 systray.item("Re-Set Wallpaper", partial(systray.set_wallpaper_again, callback=self.set_wallpaper_by_time)), | ||||
|                 systray.item("Reroll Wallpapers", partial(systray.reroll_wallpapers, first_callback=self._choose_wallpaper_set, second_callback=self.set_wallpaper_by_time)), | ||||
|                 systray.item("Quit", partial(systray.on_quit, callback=scheduler.shutdown)) | ||||
|             ) | ||||
|             icon =systray.Icon("wallman_icon", systray.icon_image, "My Tray Icon", menu) | ||||
|             icon.run() | ||||
|         else: | ||||
|             _schedule_blocking_wallpapers() | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue