forked from Github/Axter-Stash
Added special menu to advance menu.
This commit is contained in:
@@ -118,7 +118,7 @@ alternateTrashCanPath = stash.Setting('dup_path')
|
|||||||
whitelistDelDupInSameFolder = stash.Setting('whitelistDelDupInSameFolder')
|
whitelistDelDupInSameFolder = stash.Setting('whitelistDelDupInSameFolder')
|
||||||
graylistTagging = stash.Setting('graylistTagging')
|
graylistTagging = stash.Setting('graylistTagging')
|
||||||
maxDupToProcess = int(stash.Setting('zyMaxDupToProcess'))
|
maxDupToProcess = int(stash.Setting('zyMaxDupToProcess'))
|
||||||
significantTimeDiff = stash.Setting('significantTimeDiff')
|
significantTimeDiff = float(stash.Setting('significantTimeDiff'))
|
||||||
toRecycleBeforeSwap = stash.Setting('toRecycleBeforeSwap')
|
toRecycleBeforeSwap = stash.Setting('toRecycleBeforeSwap')
|
||||||
cleanAfterDel = stash.Setting('cleanAfterDel')
|
cleanAfterDel = stash.Setting('cleanAfterDel')
|
||||||
|
|
||||||
@@ -149,9 +149,25 @@ tagLongDurationLowRes = stash.Setting('tagLongDurationLowRes')
|
|||||||
bitRateIsImporantComp = stash.Setting('bitRateIsImporantComp')
|
bitRateIsImporantComp = stash.Setting('bitRateIsImporantComp')
|
||||||
codecIsImporantComp = stash.Setting('codecIsImporantComp')
|
codecIsImporantComp = stash.Setting('codecIsImporantComp')
|
||||||
|
|
||||||
|
excludeFromReportIfSignificantTimeDiff = False
|
||||||
|
|
||||||
matchDupDistance = int(stash.Setting('matchDupDistance'))
|
matchDupDistance = int(stash.Setting('matchDupDistance'))
|
||||||
matchPhaseDistance = PhashDistance.EXACT
|
matchPhaseDistance = PhashDistance.EXACT
|
||||||
matchPhaseDistanceText = "Exact Match"
|
matchPhaseDistanceText = "Exact Match"
|
||||||
|
if stash.PLUGIN_TASK_NAME == "tag_duplicates_task" and 'Target' in stash.JSON_INPUT['args']:
|
||||||
|
if stash.JSON_INPUT['args']['Target'].startswith("0"):
|
||||||
|
matchDupDistance = 0
|
||||||
|
elif stash.JSON_INPUT['args']['Target'].startswith("1"):
|
||||||
|
matchDupDistance = 1
|
||||||
|
elif stash.JSON_INPUT['args']['Target'].startswith("2"):
|
||||||
|
matchDupDistance = 2
|
||||||
|
elif stash.JSON_INPUT['args']['Target'].startswith("3"):
|
||||||
|
matchDupDistance = 3
|
||||||
|
|
||||||
|
if stash.JSON_INPUT['args']['Target'].find(":") == 1:
|
||||||
|
significantTimeDiff = float(stash.JSON_INPUT['args']['Target'][2:])
|
||||||
|
excludeFromReportIfSignificantTimeDiff = True
|
||||||
|
|
||||||
if matchDupDistance == 1:
|
if matchDupDistance == 1:
|
||||||
matchPhaseDistance = PhashDistance.HIGH
|
matchPhaseDistance = PhashDistance.HIGH
|
||||||
matchPhaseDistanceText = "High Match"
|
matchPhaseDistanceText = "High Match"
|
||||||
@@ -164,9 +180,9 @@ elif matchDupDistance == 3:
|
|||||||
|
|
||||||
# significantTimeDiff can not be higher than 1 and shouldn't be lower than .5
|
# significantTimeDiff can not be higher than 1 and shouldn't be lower than .5
|
||||||
if significantTimeDiff > 1:
|
if significantTimeDiff > 1:
|
||||||
significantTimeDiff = 1
|
significantTimeDiff = float(1.00)
|
||||||
if significantTimeDiff < .5:
|
if significantTimeDiff < .25:
|
||||||
significantTimeDiff = .5
|
significantTimeDiff = float(0.25)
|
||||||
|
|
||||||
|
|
||||||
duplicateMarkForDeletion = stash.Setting('DupFileTag')
|
duplicateMarkForDeletion = stash.Setting('DupFileTag')
|
||||||
@@ -718,6 +734,9 @@ def mangeDupFiles(merge=False, deleteDup=False, tagDuplicates=False, deleteBlack
|
|||||||
sendToTrash(DupFileName)
|
sendToTrash(DupFileName)
|
||||||
stash.destroyScene(DupFile['id'], delete_file=True)
|
stash.destroyScene(DupFile['id'], delete_file=True)
|
||||||
elif tagDuplicates or fileHtmlReport != None:
|
elif tagDuplicates or fileHtmlReport != None:
|
||||||
|
if excludeFromReportIfSignificantTimeDiff and significantTimeDiffCheck(DupFile, DupFileToKeep, True):
|
||||||
|
stash.Log(f"Skipping duplicate {DupFile['files'][0]['path']} (ID={DupFile['id']}), because of time difference greater than {significantTimeDiff} for file {DupFileToKeep['files'][0]['path']}.")
|
||||||
|
continue
|
||||||
QtyTagForDel+=1
|
QtyTagForDel+=1
|
||||||
QtyTagForDelPaginate+=1
|
QtyTagForDelPaginate+=1
|
||||||
didAddTag = False
|
didAddTag = False
|
||||||
|
|||||||
@@ -68,7 +68,11 @@ $(document).ready(function(){
|
|||||||
|
|
||||||
if (this.id === "tag_duplicates_task")
|
if (this.id === "tag_duplicates_task")
|
||||||
{
|
{
|
||||||
RunPluginDupFileManager(this.id, 0, true);
|
RunPluginDupFileManager(this.id, this.value, true);
|
||||||
|
}
|
||||||
|
else if (this.id.startsWith("tag_duplicates_task"))
|
||||||
|
{
|
||||||
|
RunPluginDupFileManager("tag_duplicates_task", this.value + ":" + $("#significantTimeDiff").val(), true);
|
||||||
}
|
}
|
||||||
else if (this.id === "viewreport")
|
else if (this.id === "viewreport")
|
||||||
{
|
{
|
||||||
@@ -139,7 +143,7 @@ function DeleteDupInPath(){
|
|||||||
<center><table style="color:darkgreen;background-color:powderblue;">
|
<center><table style="color:darkgreen;background-color:powderblue;">
|
||||||
<tr><th>DupFileManager Advance <b style="color:red;">_DuplicateMarkForDeletion</b> Tagged Files Menu</th></tr>
|
<tr><th>DupFileManager Advance <b style="color:red;">_DuplicateMarkForDeletion</b> Tagged Files Menu</th></tr>
|
||||||
<tr><td><center>
|
<tr><td><center>
|
||||||
<button type="button" id="tag_duplicates_task" title="Create new report which tags duplicates with tag name _DuplicateMarkForDeletion.">Create Duplicate Report with Tagging</button>
|
<button type="button" id="tag_duplicates_task" value="-1" title="Create new report which tags duplicates with tag name _DuplicateMarkForDeletion using user settings for [Match Duplicate Distance].">Create Duplicate Report with Tagging</button>
|
||||||
<button type="button" id="viewreport" title="View duplicate file report.">View Dup Report</button>
|
<button type="button" id="viewreport" title="View duplicate file report.">View Dup Report</button>
|
||||||
</center></td></tr>
|
</center></td></tr>
|
||||||
<tr><td><form id="pathToDeleteForm" action="javascript:DeleteDupInPath();" target="_self">
|
<tr><td><form id="pathToDeleteForm" action="javascript:DeleteDupInPath();" target="_self">
|
||||||
@@ -150,8 +154,8 @@ function DeleteDupInPath(){
|
|||||||
</form>
|
</form>
|
||||||
</td></tr>
|
</td></tr>
|
||||||
<tr><td><form id="sizeToDeleteForm" action="javascript:DeleteDupInPath();" target="_self">
|
<tr><td><form id="sizeToDeleteForm" action="javascript:DeleteDupInPath();" target="_self">
|
||||||
<label for="sizeToDelete" title="File size in kilobytes (1024 bytes).">File Size (KB):</label>
|
<label for="sizeToDelete" title="File size in bytes.">File Size (bytes):</label>
|
||||||
<input type="number" id="sizeToDelete" name="sizeToDelete" title="File size in kilobytes (1024 bytes)." value="123456">
|
<input type="number" id="sizeToDelete" name="sizeToDelete" title="File size in bytes." value="123456">
|
||||||
<label for="sizeToDeleteLess">All:</label>
|
<label for="sizeToDeleteLess">All:</label>
|
||||||
<button type="button" id="sizeToDeleteLess" title="Delete tagged duplicates with file size less than"><</button>
|
<button type="button" id="sizeToDeleteLess" title="Delete tagged duplicates with file size less than"><</button>
|
||||||
<button type="button" id="sizeToDeleteGreater" title="Delete tagged duplicates with file size greater than">></button>
|
<button type="button" id="sizeToDeleteGreater" title="Delete tagged duplicates with file size greater than">></button>
|
||||||
@@ -1659,8 +1663,65 @@ function DeleteDupInPath(){
|
|||||||
<button type="button" id="resolutionToDeleteBlacklistGreater" title="Delete blacklist tagged duplicates with resolution greater than">></button>
|
<button type="button" id="resolutionToDeleteBlacklistGreater" title="Delete blacklist tagged duplicates with resolution greater than">></button>
|
||||||
</form>
|
</form>
|
||||||
</td></tr>
|
</td></tr>
|
||||||
</td></tr></table></center>
|
</table></center>
|
||||||
<div id="div1"></div>
|
<div id="div1"></div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<center><table style="color:darkgreen;background-color:powderblue;">
|
||||||
|
<tr><th>Create report with different <b style="color:red;">[Match Duplicate Distance]</b> options
|
||||||
|
<br><div style="font-size: 12px;">Overrides user [Match Duplicate Distance] and [significantTimeDiff] settings</div>
|
||||||
|
<form id="significantTimeDiffForm" action="javascript:DeleteDupInPath();" target="_self">
|
||||||
|
<label for="significantTimeDiff" title="Significant time difference setting, where 1 equals 100% and (.9) equals 90%.">Time Difference%:</label>
|
||||||
|
<input type="number" min="0.25" max="1.00" step="0.01" id="significantTimeDiff" name="significantTimeDiff" title="Significant time difference setting, where 1 equals 100% and (.9) equals 90%." value="0.90">
|
||||||
|
</form>
|
||||||
|
</th></tr>
|
||||||
|
<tr><td><center>
|
||||||
|
<button type="button" id="tag_duplicates_task0" value="0" title="Create report which tags duplicates with tag name _DuplicateMarkForDeletion_0 and using [Match Duplicate Distance]=0 (Exact Match).">Create Duplicate Tagging Report [Exact Match]</button>
|
||||||
|
</center></td></tr>
|
||||||
|
<tr><td><center>
|
||||||
|
<button type="button" id="tag_duplicates_task1" value="1" title="Create report which tags duplicates with tag name _DuplicateMarkForDeletion_1 and using [Match Duplicate Distance]=1 (High Match).">Create Duplicate Tagging Report [High Match]</button>
|
||||||
|
</center></td></tr>
|
||||||
|
<tr><td><center>
|
||||||
|
<button type="button" id="tag_duplicates_task2" value="2" title="Create report which tags duplicates with tag name _DuplicateMarkForDeletion_2 and using [Match Duplicate Distance]=2 (Medium Match).">Create Duplicate Tagging Report [Medium Match]</button>
|
||||||
|
</center></td></tr>
|
||||||
|
<tr><td><center>
|
||||||
|
<button type="button" id="tag_duplicates_task3" value="3" title="Create report which tags duplicates with tag name _DuplicateMarkForDeletion_3 and using [Match Duplicate Distance]=3 (Low Match).">Create Duplicate Tagging Report [Low Match]</button>
|
||||||
|
</center></td></tr>
|
||||||
|
<tr><td style="font-size: 12px;">
|
||||||
|
<b>Details:</b>
|
||||||
|
<ol type="I" style="padding-left: 16px;">
|
||||||
|
<li>Match Duplicate Distance Number Details</li>
|
||||||
|
<ol type="1" start="0" style="padding-left: 16px;">
|
||||||
|
<li><b style="color:red;">Exact Match</b></li>
|
||||||
|
<ol type="a" style="padding-left: 16px;">
|
||||||
|
<li>Safest and most reliable option</li>
|
||||||
|
<li>Uses tag name _DuplicateMarkForDeletion<b>_0</b></li>
|
||||||
|
<li>Has the fewest results</li>
|
||||||
|
</ol>
|
||||||
|
<li><b style="color:red;">High Match</b></li>
|
||||||
|
<ol type="a" style="padding-left: 16px;">
|
||||||
|
<li>Recommended Setting</li>
|
||||||
|
<li>Safe and usually reliable</li>
|
||||||
|
<li>Uses tag name _DuplicateMarkForDeletion<b>_1</b></li>
|
||||||
|
<li>Scenes tagged by Exact Match will have both tags (_DuplicateMarkForDeletion_0 and _DuplicateMarkForDeletion_1)</li>
|
||||||
|
</ol>
|
||||||
|
<li><b style="color:red;">Medium Match</b></li>
|
||||||
|
<ol type="a" style="padding-left: 16px;">
|
||||||
|
<li>Not so safe. Some false matches</li>
|
||||||
|
<li>Uses tag name _DuplicateMarkForDeletion<b>_2</b></li>
|
||||||
|
<li>Scenes tagged by 0 and 1 will have three tags.</li>
|
||||||
|
</ol>
|
||||||
|
<li><b style="color:red;">Low Match</b></li>
|
||||||
|
<ol type="a" style="padding-left: 16px;">
|
||||||
|
<li>Unsafe, and many false matches</li>
|
||||||
|
<li>Uses tag name _DuplicateMarkForDeletion<b>_3</b></li>
|
||||||
|
<li>Scenes tagged by 0, 1, and 2 will have four tags.</li>
|
||||||
|
<li>Has the most results, but with many false matches</li>
|
||||||
|
</ol>
|
||||||
|
</ol>
|
||||||
|
</ol>
|
||||||
|
</td></tr>
|
||||||
|
</table></center>
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ config = {
|
|||||||
|
|
||||||
# The following tasks are scheduled weekly
|
# The following tasks are scheduled weekly
|
||||||
# Optional field for task "Scan", "Auto Tag", and "Clean" is 'paths'. For detail usage, see examples #A3: in filemonitor_task_examples.py
|
# Optional field for task "Scan", "Auto Tag", and "Clean" is 'paths'. For detail usage, see examples #A3: in filemonitor_task_examples.py
|
||||||
|
{"task" : "Backup", "weekday" : "saturday", "time" : "01:00"}, # Backup -> [Backup] (Weekly) (Every saturday at 1AM)
|
||||||
{"task" : "Scan", "weekday" : "saturday", "time" : "02:30"}, # Library -> [Scan] (Weekly) (Every saturday at 2:30AM)
|
{"task" : "Scan", "weekday" : "saturday", "time" : "02:30"}, # Library -> [Scan] (Weekly) (Every saturday at 2:30AM)
|
||||||
{"task" : "Auto Tag", "weekday" : "saturday", "time" : "03:00"}, # Auto Tag -> [Auto Tag] (Weekly) (Every saturday at 3AM)
|
{"task" : "Auto Tag", "weekday" : "saturday", "time" : "03:00"}, # Auto Tag -> [Auto Tag] (Weekly) (Every saturday at 3AM)
|
||||||
{"task" : "Generate", "weekday" : "saturday", "time" : "03:30"}, # Generated Content-> [Generate] (Every saturday at 3:30AM)
|
{"task" : "Generate", "weekday" : "saturday", "time" : "03:30"}, # Generated Content-> [Generate] (Every saturday at 3:30AM)
|
||||||
@@ -43,7 +44,7 @@ config = {
|
|||||||
# 4 = 4th specified weekday of the month.
|
# 4 = 4th specified weekday of the month.
|
||||||
# The Backup task is scheduled monthly
|
# The Backup task is scheduled monthly
|
||||||
# Optional field for task "Backup" is maxBackup. For detail usage, see example #A5 in filemonitor_task_examples.py
|
# 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)
|
# {"task" : "Backup", "weekday" : "saturday", "time" : "01:00", "monthly" : 2}, # Backup -> [Backup] 2nd sunday of the month at 1AM (01:00)
|
||||||
|
|
||||||
# The [CheckStashIsRunning] task checks if Stash is running. If not running, it will start up stash.
|
# 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.
|
# This task only works if FileMonitor is started as a service or in command line mode.
|
||||||
|
|||||||
Reference in New Issue
Block a user