From be62ae57d7cfa653d38d181ad39972b2f48cc1b5 Mon Sep 17 00:00:00 2001 From: David Maisonave <47364845+David-Maisonave@users.noreply.github.com> Date: Wed, 28 Aug 2024 06:21:21 -0400 Subject: [PATCH] Added option to avoid "Delete Tagged Duplicates" Added option to avoid "Delete Tagged Duplicates" without turnOnSchedulerDeleteDup enabled. --- plugins/FileMonitor/filemonitor.py | 18 +++++++--- plugins/FileMonitor/filemonitor_config.py | 12 +++---- .../FileMonitor/filemonitor_self_unit_test.py | 35 ++++++++++--------- 3 files changed, 38 insertions(+), 27 deletions(-) diff --git a/plugins/FileMonitor/filemonitor.py b/plugins/FileMonitor/filemonitor.py index 29aea88..03575b3 100644 --- a/plugins/FileMonitor/filemonitor.py +++ b/plugins/FileMonitor/filemonitor.py @@ -161,11 +161,11 @@ class StashScheduler: # Stash Scheduler else: weekDays = task['weekday'].lower() if 'monthly' in task: - stash.Log(f"Adding to scheduler task '{task['task']}' monthly on number {task['monthly']} {task['weekday']} at {task['time']}") + stash.Log(f"Adding to scheduler task '{self.taskName(task)}' monthly on number {task['monthly']} {task['weekday']} at {task['time']}") elif task['weekday'] == "every": - stash.Log(f"Adding to scheduler task '{task['task']}' (weekly) every day at {task['time']}") + stash.Log(f"Adding to scheduler task '{self.taskName(task)}' (weekly) every day at {task['time']}") else: - stash.Log(f"Adding to scheduler task '{task['task']}' (weekly) every {task['weekday']} at {task['time']}") + stash.Log(f"Adding to scheduler task '{self.taskName(task)}' (weekly) every {task['weekday']} at {task['time']}") hasValidDay = False if "monday" in weekDays or "every" in weekDays: @@ -196,6 +196,16 @@ class StashScheduler: # Stash Scheduler stash.Error(f"Task '{task['task']}' is missing fields.") self.checkSchedulePending() + def taskName(self, task): + pluginTask = None + if 'taskName' in task: + pluginTask = task['taskName'] + elif 'taskMode' in task: + pluginTask = task['taskMode'] + if pluginTask == None or pluginTask == "": + return task['task'] + return f"{task['task']}->{pluginTask}" + # ToDo: Add asynchronous threading logic to running task. def runTask(self, task): import datetime @@ -319,7 +329,7 @@ class StashScheduler: # Stash Scheduler if invalidDir: stash.Error(f"Could not run task '{task['task']}' because sub directory '{task['validateDir']}' does not exist under path '{stash.PLUGINS_PATH}'") return None - if not turnOnSchedulerDeleteDup and (task['task'] == "Delete Duplicates" or ('taskName' in task and task['taskName'] == "Delete Duplicates") or ('taskMode' in task and task['taskMode'] == "delete_duplicates_task")): + if not turnOnSchedulerDeleteDup and (task['task'] == "Delete Duplicates" or ('taskName' in task and (task['taskName'] == "Delete Duplicates" or task['taskName'] == "Delete Tagged Duplicates")) or ('taskMode' in task and task['taskMode'] == "delete_duplicates_task")): stash.Warn(f"Not running task {task['task']}, because [Delete Duplicate Scheduler] is NOT enabled. See Stash UI option Settings->Plugins->Plugins->FileMonitor->[Delete Duplicate Scheduler]") return None # The pluginId field is only here for backward compatibility, and should not be used in future scheduler configurations diff --git a/plugins/FileMonitor/filemonitor_config.py b/plugins/FileMonitor/filemonitor_config.py index 60824fd..a245647 100644 --- a/plugins/FileMonitor/filemonitor_config.py +++ b/plugins/FileMonitor/filemonitor_config.py @@ -17,9 +17,6 @@ config = { # Task "Create Tags" is a plugin task. Optional fields are taskName and validateDir field. For detail usage, see examples #B1, #B2, #B3, and #B4 in filemonitor_task_examples.py {"task" : "pathParser", "taskName" : "Create Tags", "validateDir" : "pathParser", "weekday" : "every", "time" : "05:30"}, # [Plugin Tasks] - > [Path Parser] -> [Create Tags] (Daily at 5AM) : This task requires plugin [Path Parser] - # The following task runs plugin DupFileManager (tag_duplicates_task) if the plugin is installed. The task runs in the background because of "taskQue" : False - {"task" : "DupFileManager", "taskMode" : "tag_duplicates_task", "validateDir" : "DupFileManager", "taskQue" : False, - "weekday" : "every", "time" : "02:30"}, # [Plugin Tasks] -> DupFileManager -> [Delete Duplicates] (Daily at 2:30AM) {"task" : "Optimise Database", "weekday" : "monday,tuesday,wednesday,thursday,friday", "time" : "07:00"}, # Maintenance -> [Optimise Database] (Every weekday at 7AM) # The following tasks are scheduled weekly @@ -30,6 +27,12 @@ config = { {"task" : "Clean", "weekday" : "saturday", "time" : "04:30"}, # Maintenance -> [Clean] (Every saturday at 4:30AM) {"task" : "Clean Generated Files", "weekday" : "saturday", "time" : "05:00"}, # Maintenance -> [Clean Generated Files] (Every saturday at 5AM) {"task" : "Optimise Database", "weekday" : "saturday", "time" : "05:30"}, # Maintenance -> [Optimise Database] (Every saturday at 5:30AM) + # The following task runs plugin DupFileManager (tag_duplicates_task) if the plugin is installed. The task runs in the background because of "taskQue" : False + {"task" : "DupFileManager", "taskMode" : "tag_duplicates_task", "validateDir" : "DupFileManager", "taskQue" : False, + "weekday" : "sunday", "time" : "02:30"}, # [Plugin Tasks] -> DupFileManager -> [Tag Duplicates] (Sunday at 2:30AM) + # The following task requires plugin DupFileManager and UI option [Delete Duplicate Scheduler] enabled. + {"task" : "DupFileManager", "taskName" : "Delete Tagged Duplicates", "validateDir" : "DupFileManager", + "weekday" : "saturday", "time" : "02:30"}, # [Plugin Tasks] -> DupFileManager -> [Delete Tagged Duplicates] 6 days after tagging at 2:30AM # To perform a task monthly, specify the day of the month as in the weekly schedule format, and add a monthly field. # The monthly field value must be 1, 2, 3, or 4. @@ -40,9 +43,6 @@ config = { # The Backup task is scheduled monthly # Optional field for task "Backup" is maxBackup. For detail usage, see example #A5 in filemonitor_task_examples.py {"task" : "Backup", "weekday" : "sunday", "time" : "01:00", "monthly" : 2}, # Backup -> [Backup] 2nd sunday of the month at 1AM (01:00) - # The following task requires plugin DupFileManager and UI option [Delete Duplicate Scheduler] enabled. - {"task" : "DupFileManager", "taskName" : "Delete Duplicates", "validateDir" : "DupFileManager", - "weekday" : "sunday", "time" : "02:00", "monthly" : 2}, # [Plugin Tasks] -> DupFileManager -> [Delete Duplicates] 2nd sunday of the month at 2AM (02:00) # The [CheckStashIsRunning] task checks if Stash is running. If not running, it will start up stash. # This task only works if FileMonitor is started as a service or in command line mode. diff --git a/plugins/FileMonitor/filemonitor_self_unit_test.py b/plugins/FileMonitor/filemonitor_self_unit_test.py index 83942f4..135a1eb 100644 --- a/plugins/FileMonitor/filemonitor_self_unit_test.py +++ b/plugins/FileMonitor/filemonitor_self_unit_test.py @@ -21,23 +21,24 @@ self_unit_test = { ], "task_scheduler_set_time": [ # Test [Delete Duplicates] with [Delete Duplicate Scheduler] disabled, and then with it enabled. - {"task" : "DupFileManager", "taskName" : "Delete Duplicates", "validateDir" : "DupFileManager", "weekday" : "every", "time" : "04:01"}, # [Plugin Tasks] -> DupFileManager -> [Delete Duplicates] - {"task" : "Generate", "weekday" : "every", "time" : "04:01"}, - {"task" : "Clean", "weekday" : "every", "time" : "04:01"}, - {"task" : "Auto Tag", "weekday" : "every", "time" : "04:01"}, - {"task" : "Optimise Database", "weekday" : "every", "time" : "04:01"}, - {"task" : "pathParser", "taskName" : "Create Tags", "validateDir" : "pathParser", "weekday" : "every", "time" : "04:01"}, # In task queue as -> Running plugin task: Create Tags - {"task" : "DupFileManager", "taskMode" : "tag_duplicates_task", "taskQue":False, "weekday" : "every", "time" : "04:01"}, # Does NOT run in the task queue - {"task" : "DupFileManager", "taskName" : "Tag Duplicates", "validateDir" : "DupFileManager", "weekday" : "every", "time" : "04:01"}, # [Plugin Tasks] -> DupFileManager -> [Tag Duplicates] - {"task" : "Scan","paths": [r"B:\_\SpecialSet", r"C:\foo"], "weekday" : "every", "time" : "04:01"}, - {"task" : "GQL", "input" : "mutation OptimiseDatabase { optimiseDatabase }", "weekday" : "every", "time" : "04:01"}, # In task queue as -> Optimising database... - {"task" : "Clean Generated Files", "weekday" : "every", "time" : "04:01"}, - {"task" : "RenameGeneratedFiles", "weekday" : "every", "time" : "04:01"}, # In task queue as -> Migrating scene hashes... - {"task" : "Backup", "maxBackups" : 0, "weekday" : "every", "time" : "04:01"}, # Does NOT show up in the Task Queue. Must check STASH log file to verify run. - {"task" : "python", "script" : "test_hello_world2.py", "weekday" : "every", "time" : "04:01"}, # Does NOT show up in the Task Queue. Check FileMonitor log file, and look for -> Task 'python' result=??? - {"task" : "python", "script" : "test_hello_world.py", "detach" : False, "weekday" : "every", "time" : "04:01"}, # Does NOT show up in the Task Queue. Check FileMonitor log file, and look for -> Task 'python' result=??? - {"task" : "execute", "command" : "test_hello_world2.cmd", "weekday" : "every", "time" : "04:01"}, # Does NOT show up in the Task Queue. Check FileMonitor log file, and look for -> Task 'execute' result=??? - {"task" : "execute", "command" : "test_hello_world.bat", "args" : "--name David", "weekday" : "every", "time" : "04:01"}, # Does NOT show up in the Task Queue. Check FileMonitor log file, and look for -> Task 'execute' result=??? + {"task" : "DupFileManager", "taskName" : "Delete Duplicates", "validateDir" : "DupFileManager", "weekday" : "every", "time" : "06:17"}, # [Plugin Tasks] -> DupFileManager -> [Delete Duplicates] + {"task" : "Generate", "weekday" : "every", "time" : "06:17"}, + {"task" : "Clean", "weekday" : "every", "time" : "06:17"}, + {"task" : "Auto Tag", "weekday" : "every", "time" : "06:17"}, + {"task" : "Optimise Database", "weekday" : "every", "time" : "06:17"}, + {"task" : "pathParser", "taskName" : "Create Tags", "validateDir" : "pathParser", "weekday" : "every", "time" : "06:17"}, # In task queue as -> Running plugin task: Create Tags + {"task" : "DupFileManager", "taskMode" : "tag_duplicates_task", "taskQue":False, "weekday" : "every", "time" : "06:17"}, # Does NOT run in the task queue + {"task" : "DupFileManager", "taskName" : "Tag Duplicates", "validateDir" : "DupFileManager", "weekday" : "every", "time" : "06:17"}, # [Plugin Tasks] -> DupFileManager -> [Tag Duplicates] + {"task" : "DupFileManager", "taskName" : "Delete Tagged Duplicates", "weekday" : "every", "time" : "06:17"}, # [Plugin Tasks] -> DupFileManager -> [Tag Duplicates] + {"task" : "Scan","paths": [r"B:\_\SpecialSet", r"C:\foo"], "weekday" : "every", "time" : "06:17"}, + {"task" : "GQL", "input" : "mutation OptimiseDatabase { optimiseDatabase }", "weekday" : "every", "time" : "06:17"}, # In task queue as -> Optimising database... + {"task" : "Clean Generated Files", "weekday" : "every", "time" : "06:17"}, + {"task" : "RenameGeneratedFiles", "weekday" : "every", "time" : "06:17"}, # In task queue as -> Migrating scene hashes... + {"task" : "Backup", "maxBackups" : 0, "weekday" : "every", "time" : "06:17"}, # Does NOT show up in the Task Queue. Must check STASH log file to verify run. + {"task" : "python", "script" : "test_hello_world2.py", "weekday" : "every", "time" : "06:17"}, # Does NOT show up in the Task Queue. Check FileMonitor log file, and look for -> Task 'python' result=??? + {"task" : "python", "script" : "test_hello_world.py", "detach" : False, "weekday" : "every", "time" : "06:17"}, # Does NOT show up in the Task Queue. Check FileMonitor log file, and look for -> Task 'python' result=??? + {"task" : "execute", "command" : "test_hello_world2.cmd", "weekday" : "every", "time" : "06:17"}, # Does NOT show up in the Task Queue. Check FileMonitor log file, and look for -> Task 'execute' result=??? + {"task" : "execute", "command" : "test_hello_world.bat", "args" : "--name David", "weekday" : "every", "time" : "06:17"}, # Does NOT show up in the Task Queue. Check FileMonitor log file, and look for -> Task 'execute' result=??? ], # MUST ToDo: Always set selfUnitTest to False before checking in this code!!! "selfUnitTest_repeat" : False , # Enable to turn on self unit test.