diff --git a/Docker/CreateContainer.cmd b/Docker/CreateContainer.cmd new file mode 100644 index 0000000..6f57268 --- /dev/null +++ b/Docker/CreateContainer.cmd @@ -0,0 +1,133 @@ +@ECHO OFF +:: This file is to create Stash Docker containers, and should be copied and called from the following path: +:: C:\Users\MyUserName\AppData\Local\Docker\wsl\CreateContainer.cmd +:: Example usage: +:: CreateContainer.cmd MyContainerName "stashapp/stash:latest" 9998 +:: Example with shared mount paths: +:: CreateContainer.cmd ContainerName1 "stashapp/stash:latest" 9991 C:\MySharedMountPath C:\Another\Shared\Folder +:: Example adding Stash IMAGE and container: +:: CreateContainer.cmd v0.27.2 "stashapp/stash:v0.27.2" 9997 PULL +:: Example with DLNA: +:: CreateContainer.cmd v272 "stashapp/stash:v0.27.2" 9996 C:\downloads DLNA +:: Example skipping docker-compose: +:: CreateContainer.cmd ContainerName "stashapp/stash:v0.26.2" 9992 C:\Videos SKIP +set NewContainerName=%1 +:: Example image arguments:stashapp/stash:latest, stashapp/stash:v0.27.2, stashapp/stash:v0.26.2 +set Image=%2 +:: Example Port Numbers: 9999, 9990, 9991, 9995, 9998 +set STASH_PORT=%3 +:: The SharedMountPath's variables are optional arguments, and can be empty. +:: Use SharedMountPath's to specify shared paths that are mounted as READ-ONLY. +:: Example SharedMountPath: C:\Videos, E:\MyMedia, Z:\MyVideoCollections, C:\Users\MyUserName\Videos, C:\Users\MyUserName\download +set SharedMountPath=%4 +set SharedMountPath2=%5 +set SharedMountPath3=%6 +set SharedMountPath4=%7 +set SharedMountPath5=%8 +set VariableArg=%9 +set SkipDockerCompose= +set DLNAFunctionality="no" +set PullDockerStashImage= +if [%VariableArg%]==[DLNA] (set DLNAFunctionality=yes) +if [%VariableArg%]==[SKIP] (set SkipDockerCompose=yes) +if [%VariableArg%]==[PULL] (set PullDockerStashImage=yes) +if [%SharedMountPath%]==[DLNA] (set DLNAFunctionality=yes) & (set SharedMountPath=) +if [%SharedMountPath%]==[SKIP] (set SkipDockerCompose=yes) & (set SharedMountPath=) +if [%SharedMountPath%]==[PULL] (set PullDockerStashImage=yes) & (set SharedMountPath=) +if [%SharedMountPath2%]==[DLNA] (set DLNAFunctionality=yes) & (set SharedMountPath2=) +if [%SharedMountPath2%]==[SKIP] (set SkipDockerCompose=yes) & (set SharedMountPath2=) +if [%SharedMountPath2%]==[PULL] (set PullDockerStashImage=yes) & (set SharedMountPath2=) +if [%SharedMountPath3%]==[DLNA] (set DLNAFunctionality=yes) & (set SharedMountPath3=) +if [%SharedMountPath3%]==[SKIP] (set SkipDockerCompose=yes) & (set SharedMountPath3=) +if [%SharedMountPath3%]==[PULL] (set PullDockerStashImage=yes) & (set SharedMountPath3=) +if [%SharedMountPath4%]==[DLNA] (set DLNAFunctionality=yes) & (set SharedMountPath4=) +if [%SharedMountPath4%]==[SKIP] (set SkipDockerCompose=yes) & (set SharedMountPath4=) +if [%SharedMountPath4%]==[PULL] (set PullDockerStashImage=yes) & (set SharedMountPath4=) +if [%SharedMountPath5%]==[DLNA] (set DLNAFunctionality=yes) & (set SharedMountPath5=) +if [%SharedMountPath5%]==[SKIP] (set SkipDockerCompose=yes) & (set SharedMountPath5=) +if [%SharedMountPath5%]==[PULL] (set PullDockerStashImage=yes) & (set SharedMountPath5=) +echo SkipDockerCompose = %SkipDockerCompose% ; DLNAFunctionality = %DLNAFunctionality% +set DockerComposeFile="docker-compose.yml" + +if [%NewContainerName%]==[] goto :MissingArgumentNewContainerName +goto :HaveVariableNewContainerName +:MissingArgumentNewContainerName +set /p NewContainerName="Enter the new container name: " +:HaveVariableNewContainerName + +if [%Image%]==[] goto :MissingArgumentImage +goto :HaveVariableImage +:MissingArgumentImage +set /p Image="Enter the image name: " +:HaveVariableImage + +if [%STASH_PORT%]==[] goto :MissingArgumentSTASH_PORT +goto :HaveVariableSTASH_PORT +:MissingArgumentSTASH_PORT +set /p STASH_PORT="Enter the Stash port number: " +:HaveVariableSTASH_PORT + +if exist %NewContainerName%\ ( + echo %NewContainerName% already exists. +) else ( + echo creating folder %NewContainerName% + mkdir %NewContainerName% +) +cd %NewContainerName% +echo DockerComposeFile=%DockerComposeFile%; NewContainerName=%NewContainerName%; Image=%Image%; STASH_PORT=%STASH_PORT%; DLNAFunctionality=%DLNAFunctionality%; SharedMountPath=%SharedMountPath%; SharedMountPath1=%SharedMountPath1%; SharedMountPath2=%SharedMountPath2% +echo services:> %DockerComposeFile% +echo stash:>> %DockerComposeFile% +echo image: %Image%>> %DockerComposeFile% +echo container_name: %NewContainerName%>> %DockerComposeFile% +echo restart: unless-stopped>> %DockerComposeFile% +if [%DLNAFunctionality%]==[yes] goto :DoDLNA_Functionality +echo ports:>> %DockerComposeFile% +echo - "%STASH_PORT%:9999">> %DockerComposeFile% +goto :SkipDLNA_Functionality +:DoDLNA_Functionality +echo network_mode: host>> %DockerComposeFile% +:SkipDLNA_Functionality +echo logging:>> %DockerComposeFile% +echo driver: "json-file">> %DockerComposeFile% +echo options:>> %DockerComposeFile% +echo max-file: "10">> %DockerComposeFile% +echo max-size: "2m">> %DockerComposeFile% +echo environment:>> %DockerComposeFile% +echo - STASH_STASH=/data/>> %DockerComposeFile% +echo - STASH_GENERATED=/generated/>> %DockerComposeFile% +echo - STASH_METADATA=/metadata/>> %DockerComposeFile% +echo - STASH_CACHE=/cache/>> %DockerComposeFile% +if [%DLNAFunctionality%]==[yes] goto :DoDLNA_Functionality_pt2 +echo - STASH_PORT=9999>> %DockerComposeFile% +goto :SkipDLNA_Functionality_pt2 +:DoDLNA_Functionality_pt2 +echo - STASH_PORT=%STASH_PORT%>> %DockerComposeFile% +:SkipDLNA_Functionality_pt2 +echo volumes:>> %DockerComposeFile% +echo - /etc/localtime:/etc/localtime:ro>> %DockerComposeFile% +echo - ./config:/root/.stash>> %DockerComposeFile% +echo - ./data:/data>> %DockerComposeFile% +echo - ./metadata:/metadata>> %DockerComposeFile% +echo - ./cache:/cache>> %DockerComposeFile% +echo - ./blobs:/blobs>> %DockerComposeFile% +echo - ./generated:/generated>> %DockerComposeFile% +if [%SharedMountPath%]==[] goto :SkipSharedMountPaths +echo - %SharedMountPath%:/external:ro>> %DockerComposeFile% +if [%SharedMountPath2%]==[] goto :SkipSharedMountPaths +echo - %SharedMountPath2%:/external2:ro>> %DockerComposeFile% +if [%SharedMountPath3%]==[] goto :SkipSharedMountPaths +echo - %SharedMountPath3%:/external3:ro>> %DockerComposeFile% +if [%SharedMountPath4%]==[] goto :SkipSharedMountPaths +echo - %SharedMountPath4%:/external4:ro>> %DockerComposeFile% +if [%SharedMountPath5%]==[] goto :SkipSharedMountPaths +echo - %SharedMountPath5%:/external5:ro>> %DockerComposeFile% +:SkipSharedMountPaths + +if [%SkipDockerCompose%] NEQ [] goto :DoNot_DockerCompose +if [%PullDockerStashImage%] NEQ [yes] goto :SkipPullDockerStashImage +docker pull %Image% +:SkipPullDockerStashImage +docker-compose up -d +:DoNot_DockerCompose +cd .. + diff --git a/plugins/DupFileManager/DupFileManager.js b/plugins/DupFileManager/DupFileManager.js index 82790cb..9d05b91 100644 --- a/plugins/DupFileManager/DupFileManager.js +++ b/plugins/DupFileManager/DupFileManager.js @@ -1,16 +1,5 @@ (function () { - // export default withRouter(Header); - // const { withRouter } = window.PluginApi.libraries.ReactRouterDOM; - // class Header extends Component { - // constructor(props) { - // super(props); - // } - // render() { - // const path = this.props.location.pathname.slice(1); - // return ("

{path}

foofoo2
"); - // } - // } - var isChrome = !!window.chrome; + const isChrome = !!window.chrome; const PluginApi = window.PluginApi; const React = PluginApi.React; const { Component } = PluginApi.React; @@ -22,18 +11,17 @@ var myArray = rootPath.split("/"); rootPath = myArray[0] + "//" + myArray[2] console.log("rootPath = " + rootPath); - var AsyncResults = null; function RunPluginDupFileManager(Mode, DataType = "text", Async = false, ActionID = 0) { - AsyncResults = null; const AjaxData = $.ajax({method: "POST", url: "/graphql", contentType: "application/json", dataType: DataType, cache: Async, async: Async, data: JSON.stringify({ query: `mutation RunPluginOperation($plugin_id:ID!,$args:Map!){runPluginOperation(plugin_id:$plugin_id,args:$args)}`, variables: {"plugin_id": "DupFileManager", "args": { "Target" : ActionID, "mode":Mode}}, }), success: function(result){ - AsyncResults = result; - console.log(AsyncResults); - if (DataType == "text") + if (DataType == "text"){ + console.log("result=" + result); return result; + } + console.log("JSON result=" + JSON.stringify(result)); return result; } }); @@ -44,18 +32,24 @@ console.log(AjaxData.responseText); return AjaxData.responseText; } - console.log(AjaxData.responseJSON); - return JSON.parse(AjaxData.responseJSON.data.runPluginOperation.replaceAll("'", "\"")); + JsonStr = AjaxData.responseJSON.data.runPluginOperation.replaceAll("'", "\""); + console.log("JSON runPluginOperation = " + JsonStr); + return JSON.parse(JsonStr); } var LocalDupReportExist = false; var AdvanceMenuOptionUrl = ""; + var apiKey = ""; + var UrlParam = ""; + var IS_DOCKER = ""; function GetLocalDuplicateReportPath(){ var LocalDuplicateReport = RunPluginDupFileManager("getLocalDupReportPath", "json"); var LocalDuplicateReportPath = "file://" + LocalDuplicateReport.Path; - console.log(LocalDuplicateReportPath); - // AdvanceMenuOptionUrl = LocalDuplicateReportPath.replace("report\\DuplicateTagScenes.html", "advance_options.html" + "?GQL=" + rootPath); - AdvanceMenuOptionUrl = LocalDuplicateReportPath.replace("report\\DuplicateTagScenes.html", "advance_options.html"); - console.log(AdvanceMenuOptionUrl); + apiKey = LocalDuplicateReport.apiKey; + IS_DOCKER = LocalDuplicateReport.IS_DOCKER; + UrlParam = "?GQL=" + rootPath + "/graphql&IS_DOCKER=" + IS_DOCKER + "&apiKey=" + apiKey; + console.log("LocalDuplicateReportPath=" + JSON.stringify(LocalDuplicateReportPath) + "; document.cookie=" + document.cookie); + AdvanceMenuOptionUrl = LocalDuplicateReport.AdvMenuUrl + UrlParam; + console.log("AdvanceMenuOptionUrl=" + AdvanceMenuOptionUrl); LocalDupReportExist = LocalDuplicateReport.LocalDupReportExist; return LocalDuplicateReportPath; } @@ -77,16 +71,14 @@ return React.createElement("div", null, React.createElement("div", {style:{"background-color":"yellow", color:"red"}}, ChromeNotice), React.createElement("h5", null, ShowReportChromeHeader), - React.createElement("a", {href: LocalDuplicateReportPath, style:{color:"pink"}, title: ShowReportButtonToolTip}, LocalDuplicateReportPath)); - return React.createElement("a", { href: LocalDuplicateReportPath, title: ShowReportButtonToolTip}, React.createElement(Button, null, ButtonText)); + React.createElement("a", {href: LocalDuplicateReportPath, style:{color:"pink"}, title: ShowReportButtonToolTip, target:"_blank"}, LocalDuplicateReportPath)); + return React.createElement("a", { href: LocalDuplicateReportPath, title: ShowReportButtonToolTip, target:"_blank"}, React.createElement(Button, null, ButtonText)); } function GetAdvanceMenuButton() { - if (isChrome) - return React.createElement("div", null, - React.createElement("h5", null, "The following is the link to the [Advance Duplicate File Menu]"), - React.createElement("a", {href: AdvanceMenuOptionUrl, style:{color:"pink"}}, AdvanceMenuOptionUrl)); - return React.createElement("a", { href: AdvanceMenuOptionUrl, title: "Open link to the [Advance Duplicate File Menu]."}, React.createElement(Button, null, "Show [Advance Duplicate File Menu]")); + return React.createElement("a", { href: "https://stash.axter.com/1.1.2/advance_options.html" + UrlParam, title: "Open link to the [Advance Duplicate File Menu].", target:"_blank"}, React.createElement(Button, null, "Show [Advance Duplicate File Menu]")); + // The following does not work with Chrome, or with an apiKey, or with a non-standard Stash URL. + //return React.createElement("a", { href: AdvanceMenuOptionUrl, title: "Open link to the [Advance Duplicate File Menu].", target:"_blank"}, React.createElement(Button, null, "Show [Advance Duplicate File Menu]")); } function GetCreateReportNoTagButton(ButtonText){return React.createElement(Link, { to: "/DupFileManager_CreateReportWithNoTagging", title: CreateReportNoTagButtonToolTip }, React.createElement(Button, null, ButtonText));} function GetCreateReportButton(ButtonText){return React.createElement(Link, { to: "/DupFileManager_CreateReport", title: CreateReportButtonToolTip }, React.createElement(Button, null, ButtonText));} diff --git a/plugins/DupFileManager/DupFileManager.py b/plugins/DupFileManager/DupFileManager.py index 018ec8f..6910b8b 100644 --- a/plugins/DupFileManager/DupFileManager.py +++ b/plugins/DupFileManager/DupFileManager.py @@ -153,6 +153,11 @@ tagLongDurationLowRes = stash.Setting('tagLongDurationLowRes') bitRateIsImporantComp = stash.Setting('bitRateIsImporantComp') codecIsImporantComp = stash.Setting('codecIsImporantComp') +DupFileManagerFolder = f"{stash.PLUGINS_PATH}{os.sep}community{os.sep}DupFileManager" +if not os.path.isdir(DupFileManagerFolder): + DupFileManagerFolder = f"{stash.PLUGINS_PATH}{os.sep}DupFileManager" +reportHeader = f"{DupFileManagerFolder}{os.sep}DupFileManager_report_header" + excludeFromReportIfSignificantTimeDiff = False htmlReportPaginate = stash.Setting('htmlReportPaginate') htmlIncludeImagePreview = stash.Setting('htmlIncludeImagePreview') @@ -570,8 +575,13 @@ def getPath(Scene, getParent = False): return pathlib.Path(path).resolve().parent return path +htmlReportPrefix = None def getHtmlReportTableRow(qtyResults, tagDuplicates): - htmlReportPrefix = stash.Setting('htmlReportPrefix') + global htmlReportPrefix + if htmlReportPrefix != None: + return htmlReportPrefix + with open(reportHeader, 'r') as file: + htmlReportPrefix = file.read() htmlReportPrefix = htmlReportPrefix.replace('http://127.0.0.1:9999/graphql', stash.url) htmlReportPrefix = htmlReportPrefix.replace('http://localhost:9999/graphql', stash.url) if 'apiKey' in stash.STASH_CONFIGURATION and stash.STASH_CONFIGURATION['apiKey'] != "": @@ -654,8 +664,7 @@ def doesDelCandidateHaveMetadataNotInDupToKeep(DupFile, DupFileToKeep, listName, break return DupToKeepMissingItem, DelCandidateMissingItem - -htmlReportNameFolder = f"{stash.PLUGINS_PATH}{os.sep}DupFileManager{os.sep}report" +htmlReportNameFolder = f"{DupFileManagerFolder}{os.sep}report" htmlReportName = f"{htmlReportNameFolder}{os.sep}{stash.Setting('htmlReportName')}" htmlReportTableRow = stash.Setting('htmlReportTableRow') htmlReportVideoPreview = f"width='{htmlVideoPreviewWidth}' height='{htmlVideoPreviewHeight}' {stash.Setting('htmlReportVideoPreview')} " @@ -1747,7 +1756,14 @@ def mergeTags(inputScene1=None): def getLocalDupReportPath(): htmlReportExist = "true" if os.path.isfile(htmlReportName) else "false" localPath = htmlReportName.replace("\\", "\\\\") - jsonReturn = "{'LocalDupReportExist' : " + f"{htmlReportExist}" + ", 'Path': '" + f"{localPath}" + "'}" + LocalDir = htmlReportNameFolder.replace("\\", "\\\\") + ReportUrl = f"file://{htmlReportName.replace(os.sep, '/')}" + AdvMenuUrl = f"file://{stash.PLUGINS_PATH.replace(os.sep, '/')}/DupFileManager/advance_options.html" + ReportUrlDir = f"file://{htmlReportNameFolder.replace(os.sep, '/')}" + apikey_json = ", 'apiKey':''" + if 'apiKey' in stash.STASH_CONFIGURATION: + apikey_json = f", 'apiKey':'{stash.STASH_CONFIGURATION['apiKey']}'" + jsonReturn = "{" + f"'LocalDupReportExist' : {htmlReportExist}, 'Path': '{localPath}', 'LocalDir': '{LocalDir}', 'ReportUrlDir': '{ReportUrlDir}', 'ReportUrl': '{ReportUrl}', 'AdvMenuUrl': '{AdvMenuUrl}', 'IS_DOCKER': '{stash.IS_DOCKER}' {apikey_json}" + "}" stash.Log(f"Sending json value {jsonReturn}") sys.stdout.write(jsonReturn) diff --git a/plugins/DupFileManager/DupFileManager.yml b/plugins/DupFileManager/DupFileManager.yml index 9ad7d31..5cf53bb 100644 --- a/plugins/DupFileManager/DupFileManager.yml +++ b/plugins/DupFileManager/DupFileManager.yml @@ -1,6 +1,6 @@ name: DupFileManager description: Manages duplicate files. -version: 1.1.1 +version: 1.1.2 url: https://github.com/David-Maisonave/Axter-Stash/tree/main/plugins/DupFileManager ui: javascript: diff --git a/plugins/DupFileManager/DupFileManager_report_config.py b/plugins/DupFileManager/DupFileManager_report_config.py index fc43c8d..08837a7 100644 --- a/plugins/DupFileManager/DupFileManager_report_config.py +++ b/plugins/DupFileManager/DupFileManager_report_config.py @@ -29,409 +29,6 @@ report_config = { "htmlReportBackgroundColor" : "#f0f5f5", # The report text color "htmlReportTextColor" : "black", - # HTML report prefix, before table listing - "htmlReportPrefix" : """ - - -Stash Duplicate Report - - - - - - - - - - - - - -
-
- - - - -
Report InfoReport Options
- - -
Found (QtyPlaceHolder) duplice setsDate Created: (DateCreatedPlaceHolder)
- - - - -
-
- Menu -
-
-
Advance Duplicate File Deletion Menu
-
Reload Page
-
Stash Plugins
-
Stash Tools
- - -
Merge Tags, Performers, and Galleries
-
Clear Dup (_DuplicateMarkForDeletion_) Tags
- -
Delete Dup Tagged Files That do Not Exist
-
Delete Files That do Not Exist in Report
- -
- Delete Flagged Scenes -
-
Delete All Cyan Flagged Scenes
-
Delete All Green Flagged Scenes
-
Delete All Orange Flagged Scenes
-
Delete All Yellow Flagged Scenes
-
Delete All Pink Flagged Scenes
-
Delete All Red Flagged Scenes
-
-
-
- Copy Flagged Scenes -
-
Copy All Cyan Flagged Scenes
-
Copy All Green Flagged Scenes
-
Copy All Orange Flagged Scenes
-
Copy All Yellow Flagged Scenes
-
Copy All Pink Flagged Scenes
-
Copy All Red Flagged Scenes
-
-
-
- Move Flagged Scenes -
-
Move All Cyan Flagged Scenes
-
Move All Green Flagged Scenes
-
Move All Orange Flagged Scenes
-
Move All Yellow Flagged Scenes
-
Move All Pink Flagged Scenes
-
Move All Red Flagged Scenes
-
-
-
- Merge (Tags, Performers, & Galleries) Flagged Scenes -
-
Merge All Cyan Flagged Scenes
-
Merge All Green Flagged Scenes
-
Merge All Orange Flagged Scenes
-
Merge All Yellow Flagged Scenes
-
Merge All Pink Flagged Scenes
-
Merge All Red Flagged Scenes
-
-
-
- Add Exclude TAG to Flagged Scenes -
-
Add Exclude TAG to Cyan Flagged Scenes
-
Add Exclude TAG to Green Flagged Scenes
-
Add Exclude TAG to Orange Flagged Scenes
-
Add Exclude TAG to Yellow Flagged Scenes
-
Add Exclude TAG to Pink Flagged Scenes
-
Add Exclude TAG to Red Flagged Scenes
-
-
- -
Clear All Flags from All Scenes
-
- Clear Flag from All Scenes -
-
Clear Cyan
-
Clear Green
-
Clear Orange
-
Clear Yellow
-
Clear Pink
-
Clear Red
-
-
-
-


-

Stash Duplicate Scenes Report (MatchTypePlaceHolder)

\n""", # HTML report postfiox, after table listing "htmlReportPostfix" : "\n
", # HTML report table diff --git a/plugins/DupFileManager/DupFileManager_report_header b/plugins/DupFileManager/DupFileManager_report_header new file mode 100644 index 0000000..425f06d --- /dev/null +++ b/plugins/DupFileManager/DupFileManager_report_header @@ -0,0 +1,403 @@ + + + +Stash Duplicate Report + + + + + + + + + + + + + +
+
+ + + + +
Report InfoReport Options
+ + +
Found (QtyPlaceHolder) duplice setsDate Created: (DateCreatedPlaceHolder)
+ + + + +
+
+ Menu +
+
+
Advance Duplicate File Deletion Menu
+
Reload Page
+
Stash Plugins
+
Stash Tools
+ + +
Merge Tags, Performers, and Galleries
+
Clear Dup (_DuplicateMarkForDeletion_) Tags
+ +
Delete Dup Tagged Files That do Not Exist
+
Delete Files That do Not Exist in Report
+ +
+ Delete Flagged Scenes +
+
Delete All Cyan Flagged Scenes
+
Delete All Green Flagged Scenes
+
Delete All Orange Flagged Scenes
+
Delete All Yellow Flagged Scenes
+
Delete All Pink Flagged Scenes
+
Delete All Red Flagged Scenes
+
+
+
+ Copy Flagged Scenes +
+
Copy All Cyan Flagged Scenes
+
Copy All Green Flagged Scenes
+
Copy All Orange Flagged Scenes
+
Copy All Yellow Flagged Scenes
+
Copy All Pink Flagged Scenes
+
Copy All Red Flagged Scenes
+
+
+
+ Move Flagged Scenes +
+
Move All Cyan Flagged Scenes
+
Move All Green Flagged Scenes
+
Move All Orange Flagged Scenes
+
Move All Yellow Flagged Scenes
+
Move All Pink Flagged Scenes
+
Move All Red Flagged Scenes
+
+
+
+ Merge (Tags, Performers, & Galleries) Flagged Scenes +
+
Merge All Cyan Flagged Scenes
+
Merge All Green Flagged Scenes
+
Merge All Orange Flagged Scenes
+
Merge All Yellow Flagged Scenes
+
Merge All Pink Flagged Scenes
+
Merge All Red Flagged Scenes
+
+
+
+ Add Exclude TAG to Flagged Scenes +
+
Add Exclude TAG to Cyan Flagged Scenes
+
Add Exclude TAG to Green Flagged Scenes
+
Add Exclude TAG to Orange Flagged Scenes
+
Add Exclude TAG to Yellow Flagged Scenes
+
Add Exclude TAG to Pink Flagged Scenes
+
Add Exclude TAG to Red Flagged Scenes
+
+
+ +
Clear All Flags from All Scenes
+
+ Clear Flag from All Scenes +
+
Clear Cyan
+
Clear Green
+
Clear Orange
+
Clear Yellow
+
Clear Pink
+
Clear Red
+
+
+
+


+

Stash Duplicate Scenes Report (MatchTypePlaceHolder)

diff --git a/plugins/DupFileManager/README.md b/plugins/DupFileManager/README.md index 6858269..f70269b 100644 --- a/plugins/DupFileManager/README.md +++ b/plugins/DupFileManager/README.md @@ -1,4 +1,4 @@ -# DupFileManager: Ver 1.1.1 (By David Maisonave) +# DupFileManager: Ver 1.1.2 (By David Maisonave) DupFileManager is a [Stash](https://github.com/stashapp/stash) plugin which manages duplicate files in the Stash system. It has both **task** and **tools-UI** components. diff --git a/plugins/DupFileManager/advance_options.html b/plugins/DupFileManager/advance_options.html index 0f3e836..ba07b16 100644 --- a/plugins/DupFileManager/advance_options.html +++ b/plugins/DupFileManager/advance_options.html @@ -18,57 +18,72 @@ html.wait, html.wait * { cursor: wait !important; } -
-
+
-
- - +
DupFileManager
Advance Duplicate File Menu
Apply Multiple Options
+
DupFileManager
Advance Duplicate File Menu
Apply Multiple Options
@@ -1956,9 +1995,8 @@ function DeleteDupInPath(){
-
- -
+ + @@ -2026,10 +2064,9 @@ function DeleteDupInPath(){
These options override the UI plugin user settings and the DupFileManager_config.py settings.
These options apply to [Create Duplicate Report] sub-menu options, that have specific match value.
-
- +
  1. Match Duplicate Distance Number Details
  2. @@ -2113,7 +2150,7 @@ function DeleteDupInPath(){
-
  • List
  • +
  • List
    1. DupFileManager supports 4 types of list that are configured in Stash=>Settings->Plugins->DupFileManager.
      1. @@ -2155,9 +2192,8 @@ function DeleteDupInPath(){
    - +
    - diff --git a/plugins/DupFileManager/test.html b/plugins/DupFileManager/test.html deleted file mode 100644 index d20c4be..0000000 --- a/plugins/DupFileManager/test.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - menu demo - - - - - - - - - - - - - \ No newline at end of file diff --git a/plugins/DupFileManager/version_history/README.md b/plugins/DupFileManager/version_history/README.md index 6c7a5a0..744506b 100644 --- a/plugins/DupFileManager/version_history/README.md +++ b/plugins/DupFileManager/version_history/README.md @@ -89,4 +89,16 @@ - A note is displayed and highlighted explaining to the user that they have to copy and pasted the link to the browser's address field. - On browsers like FireFox, a button is displayed instead, and no note is displayed. - Removed *.css and *.map files, which were not being used. +### 1.1.2 +- Moved link to [**Advance Duplicate File Menu**] to https://stash.axter.com/1.1.2/advance_options.html + - This allows the Advance Menu to be accessed by Chrome, Edge and other Chrome based browsers which don't allow accessing local links from a non-local URL. +- Added additional warnings when detecting Chrome based browsers and when moving from non-local link to local link. +- Moved htmlReportPrefix field from the DupFileManager_report_config.py to DupFileManager_report_header. + - This was needed because Python on Docker gives an error when using tripple quoted strings. +- Made advance_options.html HTML5 compliance. +- Added additional details returned by getLocalDupReportPath to include (IS_DOCKER, ReportUrl, AdvMenuUrl, apikey, & LocalDir). + + + +