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 Info Report Options
-
-
-Found (QtyPlaceHolder) duplice sets
-Date Created: (DateCreatedPlaceHolder)
-
-
-
-
-
-
-
-
-
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
-
-
-
-Disable Complete Confirmation
-Disable Delete Confirmation
-
-
-
-
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 Info Report Options
+
+
+Found (QtyPlaceHolder) duplice sets
+Date Created: (DateCreatedPlaceHolder)
+
+
+
+
+
+
+
+
+
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
+
+
+
+Disable Complete Confirmation
+Disable Delete Confirmation
+
+
+
+
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 MenuApply Multiple Options
+
+ DupFileManager
Advance Duplicate File MenuApply Multiple Options
@@ -1956,9 +1995,8 @@ function DeleteDupInPath(){
-
-
-
+
-
-
+
Match Duplicate Distance Number Details
@@ -2113,7 +2150,7 @@ function DeleteDupInPath(){
- List
+ List
DupFileManager supports 4 types of list that are configured in Stash=>Settings->Plugins->DupFileManager.
@@ -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).
+
+
+
+