Added advance menu option to UI

This commit is contained in:
David Maisonave
2024-11-05 19:01:13 -05:00
parent f6a03afd28
commit ffd0dfec84
6 changed files with 59 additions and 39 deletions

View File

@@ -62,17 +62,17 @@ def installModule(moduleName):
# Note: Linux may first need : sudo apt install python3-pip # Note: Linux may first need : sudo apt install python3-pip
# if error starts with "Command 'pip' not found" # if error starts with "Command 'pip' not found"
# or includes "No module named pip" # or includes "No module named pip"
results = os.popen(f"pip --version").read() results = os.popen(f"pip --disable-pip-version-check --version").read()
if results.find("Command 'pip' not found") != -1 or results.find("No module named pip") != -1: if results.find("Command 'pip' not found") != -1 or results.find("No module named pip") != -1:
results = os.popen(f"sudo apt install python3-pip").read() results = os.popen(f"sudo apt install python3-pip").read()
results = os.popen(f"pip --version").read() results = os.popen(f"pip --disable-pip-version-check --version").read()
if results.find("Command 'pip' not found") != -1 or results.find("No module named pip") != -1: if results.find("Command 'pip' not found") != -1 or results.find("No module named pip") != -1:
return -1 return -1
if isFreeBSD(): if isFreeBSD():
print("Warning: installModule may NOT work on freebsd") print("Warning: installModule may NOT work on freebsd")
pipArg = "" pipArg = " --disable-pip-version-check"
if isDocker(): if isDocker():
pipArg = " --break-system-packages" pipArg += " --break-system-packages"
results = os.popen(f"{sys.executable} -m pip install {moduleName}{pipArg}").read() # May need to be f"{sys.executable} -m pip install {moduleName}" results = os.popen(f"{sys.executable} -m pip install {moduleName}{pipArg}").read() # May need to be f"{sys.executable} -m pip install {moduleName}"
results = results.strip("\n") results = results.strip("\n")
if results.find("Requirement already satisfied:") > -1: if results.find("Requirement already satisfied:") > -1:

View File

@@ -27,26 +27,36 @@
return JSON.parse(AjaxData.responseJSON.data.runPluginOperation.replaceAll("'", "\"")); return JSON.parse(AjaxData.responseJSON.data.runPluginOperation.replaceAll("'", "\""));
} }
var LocalDupReportExist = false; var LocalDupReportExist = false;
var AdvanceMenuOptionUrl = "";
function GetLocalDuplicateReportPath(){ function GetLocalDuplicateReportPath(){
var LocalDuplicateReport = RunPluginDupFileManager("getLocalDupReportPath", "json"); var LocalDuplicateReport = RunPluginDupFileManager("getLocalDupReportPath", "json");
var LocalDuplicateReportPath = "file://" + LocalDuplicateReport.Path; var LocalDuplicateReportPath = "file://" + LocalDuplicateReport.Path;
console.log(LocalDuplicateReportPath); console.log(LocalDuplicateReportPath);
AdvanceMenuOptionUrl = LocalDuplicateReportPath.replace("DuplicateTagScenes.html", "DupFileManager/advance_options.html");
LocalDupReportExist = LocalDuplicateReport.LocalDupReportExist; LocalDupReportExist = LocalDuplicateReport.LocalDupReportExist;
return LocalDuplicateReportPath; return LocalDuplicateReportPath;
} }
const PluginApi = window.PluginApi; const PluginApi = window.PluginApi;
const React = PluginApi.React; const React = PluginApi.React;
const GQL = PluginApi.GQL; const GQL = PluginApi.GQL;
const { Button } = PluginApi.libraries.Bootstrap; const { Button } = PluginApi.libraries.Bootstrap;
const { faEthernet } = PluginApi.libraries.FontAwesomeSolid; const { faEthernet } = PluginApi.libraries.FontAwesomeSolid;
const { Link, NavLink, } = PluginApi.libraries.ReactRouterDOM; const { Link, NavLink, } = PluginApi.libraries.ReactRouterDOM;
const ToolsMenuToolTip = "Show DupFileManager advance menu, which list additional tools and utilities."; // ToolTip text
const ToolsMenuOptionButton = React.createElement(Link, { to: "/plugin/DupFileManager_ToolsAndUtilities", title: ToolsMenuToolTip }, React.createElement(Button, null, "DupFileManager Tools and Utilities"));
const ReportMenuButtonToolTip = "Main report menu for DupFileManager. Create and show duplicate files on an HTML report.";
const DupFileManagerReportMenuButton = React.createElement(Link, { to: "/plugin/DupFileManager", title: ReportMenuButtonToolTip }, React.createElement(Button, null, "DupFileManager Report Menu"));
const CreateReportButtonToolTip = "Tag duplicate files, and create a new duplicate file report listing all duplicate files and using existing DupFileManager plugin options selected."; const CreateReportButtonToolTip = "Tag duplicate files, and create a new duplicate file report listing all duplicate files and using existing DupFileManager plugin options selected.";
const CreateReportNoTagButtonToolTip = "Create a new duplicate file report listing all duplicate files and using existing DupFileManager plugin options selected. Do NOT tag files."; const CreateReportNoTagButtonToolTip = "Create a new duplicate file report listing all duplicate files and using existing DupFileManager plugin options selected. Do NOT tag files.";
const ToolsMenuToolTip = "Show DupFileManager advance menu, which list additional tools and utilities.";
const ShowReportButtonToolTip = "Open link to the duplicate file (HTML) report created in local path."; const ShowReportButtonToolTip = "Open link to the duplicate file (HTML) report created in local path.";
const ReportMenuButtonToolTip = "Main report menu for DupFileManager. Create and show duplicate files on an HTML report.";
// Buttons
const DupFileManagerReportMenuButton = React.createElement(Link, { to: "/plugin/DupFileManager", title: ReportMenuButtonToolTip }, React.createElement(Button, null, "DupFileManager Report Menu"));
const ToolsMenuOptionButton = React.createElement(Link, { to: "/plugin/DupFileManager_ToolsAndUtilities", title: ToolsMenuToolTip }, React.createElement(Button, null, "DupFileManager Tools and Utilities"));
function GetShowReportButton(LocalDuplicateReportPath, ButtonText){return React.createElement("a", { href: LocalDuplicateReportPath, title: ShowReportButtonToolTip}, React.createElement(Button, null, ButtonText));}
function GetAdvanceMenuButton(){return React.createElement("a", { href: AdvanceMenuOptionUrl, title: "Open link to the advance duplicate tagged menu."}, React.createElement(Button, null, "Show Advance Duplicate Tagged Menu"));}
function GetCreateReportNoTagButton(ButtonText){return React.createElement(Link, { to: "/plugin/DupFileManager_CreateReportWithNoTagging", title: CreateReportNoTagButtonToolTip }, React.createElement(Button, null, ButtonText));}
function GetCreateReportButton(ButtonText){return React.createElement(Link, { to: "/plugin/DupFileManager_CreateReport", title: CreateReportButtonToolTip }, React.createElement(Button, null, ButtonText));}
const { LoadingIndicator, } = PluginApi.components; const { LoadingIndicator, } = PluginApi.components;
const HomePage = () => { const HomePage = () => {
var LocalDuplicateReportPath = GetLocalDuplicateReportPath(); var LocalDuplicateReportPath = GetLocalDuplicateReportPath();
@@ -55,19 +65,21 @@
if (LocalDupReportExist) if (LocalDupReportExist)
return (React.createElement("center", null, return (React.createElement("center", null,
MyHeader, MyHeader,
React.createElement("a", { href: LocalDuplicateReportPath, title: ShowReportButtonToolTip}, React.createElement(Button, null, "Show Duplicate-File Report")), GetShowReportButton(LocalDuplicateReportPath, "Show Duplicate-File Report"),
React.createElement("p", null), React.createElement("p", null),
React.createElement(Link, { to: "/plugin/DupFileManager_CreateReportWithNoTagging", title: CreateReportNoTagButtonToolTip }, React.createElement(Button, null, "Create New Report (NO Tagging)")), GetAdvanceMenuButton(),
React.createElement("p", null), React.createElement("p", null),
React.createElement(Link, { to: "/plugin/DupFileManager_CreateReport", title: CreateReportButtonToolTip }, React.createElement(Button, null, "Create New Report with Tagging")), GetCreateReportNoTagButton("Create New Report (NO Tagging)"),
React.createElement("p", null),
GetCreateReportButton("Create New Report with Tagging"),
React.createElement("p", null), React.createElement("p", null),
ToolsMenuOptionButton ToolsMenuOptionButton
)); ));
return (React.createElement("center", null, return (React.createElement("center", null,
MyHeader, MyHeader,
React.createElement(Link, { to: "/plugin/DupFileManager_CreateReportWithNoTagging", title: CreateReportNoTagButtonToolTip }, React.createElement(Button, null, "Create Duplicate-File Report (NO Tagging)")), GetCreateReportNoTagButton("Create Duplicate-File Report (NO Tagging)"),
React.createElement("p", null), React.createElement("p", null),
React.createElement(Link, { to: "/plugin/DupFileManager_CreateReport", title: CreateReportButtonToolTip }, React.createElement(Button, null, "Create Duplicate-File Report with Tagging")), GetCreateReportButton("Create Duplicate-File Report with Tagging"),
React.createElement("p", null), React.createElement("p", null),
ToolsMenuOptionButton ToolsMenuOptionButton
)); ));
@@ -77,10 +89,11 @@
if (componentsLoading) if (componentsLoading)
return (React.createElement(LoadingIndicator, {message: "Running task to create report. This may take a while. Please standby."})); return (React.createElement(LoadingIndicator, {message: "Running task to create report. This may take a while. Please standby."}));
RunPluginDupFileManager("tag_duplicates_task"); RunPluginDupFileManager("tag_duplicates_task");
var LocalDuplicateReportPath = GetLocalDuplicateReportPath();
return (React.createElement("center", null, return (React.createElement("center", null,
React.createElement("h1", null, "Report complete. Click [Show Report] to view report."), React.createElement("h1", null, "Report complete. Click [Show Report] to view report."),
React.createElement("a", { href: LocalDuplicateReportPath, title: ShowReportButtonToolTip}, React.createElement(Button, null, "Show Report")), GetShowReportButton(GetLocalDuplicateReportPath(), "Show Report"),
React.createElement("p", null),
GetAdvanceMenuButton(),
React.createElement("p", null), DupFileManagerReportMenuButton, React.createElement("p", null), ToolsMenuOptionButton React.createElement("p", null), DupFileManagerReportMenuButton, React.createElement("p", null), ToolsMenuOptionButton
)); ));
}; };
@@ -89,10 +102,11 @@
if (componentsLoading) if (componentsLoading)
return (React.createElement(LoadingIndicator, {message: "Running task to create report. Please standby."})); return (React.createElement(LoadingIndicator, {message: "Running task to create report. Please standby."}));
RunPluginDupFileManager("createDuplicateReportWithoutTagging"); RunPluginDupFileManager("createDuplicateReportWithoutTagging");
var LocalDuplicateReportPath = GetLocalDuplicateReportPath();
return (React.createElement("center", null, return (React.createElement("center", null,
React.createElement("h1", null, "Created HTML report without tagging. Click [Show Report] to view report."), React.createElement("h1", null, "Created HTML report without tagging. Click [Show Report] to view report."),
React.createElement("a", { href: LocalDuplicateReportPath, title: ShowReportButtonToolTip}, React.createElement(Button, null, "Show Report")), GetShowReportButton(GetLocalDuplicateReportPath(), "Show Report"),
React.createElement("p", null),
GetAdvanceMenuButton(),
React.createElement("p", null), DupFileManagerReportMenuButton, React.createElement("p", null), ToolsMenuOptionButton React.createElement("p", null), DupFileManagerReportMenuButton, React.createElement("p", null), ToolsMenuOptionButton
)); ));
}; };
@@ -103,17 +117,21 @@
React.createElement("h3", {class:"submenu"}, "Report Options"), React.createElement("h3", {class:"submenu"}, "Report Options"),
React.createElement("p", null), React.createElement("p", null),
React.createElement(Link, { to: "/plugin/DupFileManager_CreateReportWithNoTagging", title: CreateReportNoTagButtonToolTip }, React.createElement(Button, null, "Create Report (NO Tagging)")), GetCreateReportNoTagButton("Create Report (NO Tagging)"),
React.createElement("p", null), React.createElement("p", null),
React.createElement(Link, { to: "/plugin/DupFileManager_CreateReport", title: CreateReportButtonToolTip }, React.createElement(Button, null, "Create Report (Tagging)")), GetCreateReportButton("Create Report (Tagging)"),
React.createElement("p", null), React.createElement("p", null),
DupFileManagerReportMenuButton, DupFileManagerReportMenuButton,
React.createElement("p", null), React.createElement("p", null),
GetShowReportButton(GetLocalDuplicateReportPath(), "Show Duplicate-File Report"),
React.createElement("p", null),
React.createElement(Link, { to: "/plugin/DupFileManager_deleteLocalDupReportHtmlFiles", title: "Delete local HTML duplicate file report." }, React.createElement(Button, null, "Delete Duplicate-File Report HTML Files")), React.createElement(Link, { to: "/plugin/DupFileManager_deleteLocalDupReportHtmlFiles", title: "Delete local HTML duplicate file report." }, React.createElement(Button, null, "Delete Duplicate-File Report HTML Files")),
React.createElement("hr", {class:"dotted"}), React.createElement("hr", {class:"dotted"}),
React.createElement("h3", {class:"submenu"}, "Tagged Duplicates Options"), React.createElement("h3", {class:"submenu"}, "Tagged Duplicates Options"),
React.createElement("p", null), React.createElement("p", null),
GetAdvanceMenuButton(),
React.createElement("p", null),
React.createElement(Link, { to: "/plugin/DupFileManager_deleteTaggedDuplicatesTask", title: "Delete scenes previously given duplicate tag (_DuplicateMarkForDeletion)." }, React.createElement(Button, null, "Delete Tagged Duplicates")), React.createElement(Link, { to: "/plugin/DupFileManager_deleteTaggedDuplicatesTask", title: "Delete scenes previously given duplicate tag (_DuplicateMarkForDeletion)." }, React.createElement(Button, null, "Delete Tagged Duplicates")),
React.createElement("p", null), React.createElement("p", null),
React.createElement(Link, { to: "/plugin/DupFileManager_deleteBlackListTaggedDuplicatesTask", title: "Delete scenes only in blacklist which where previously given duplicate tag (_DuplicateMarkForDeletion)." }, React.createElement(Button, null, "Delete Tagged Duplicates in Blacklist Only")), React.createElement(Link, { to: "/plugin/DupFileManager_deleteBlackListTaggedDuplicatesTask", title: "Delete scenes only in blacklist which where previously given duplicate tag (_DuplicateMarkForDeletion)." }, React.createElement(Button, null, "Delete Tagged Duplicates in Blacklist Only")),

View File

@@ -62,17 +62,17 @@ def installModule(moduleName):
# Note: Linux may first need : sudo apt install python3-pip # Note: Linux may first need : sudo apt install python3-pip
# if error starts with "Command 'pip' not found" # if error starts with "Command 'pip' not found"
# or includes "No module named pip" # or includes "No module named pip"
results = os.popen(f"pip --version").read() results = os.popen(f"pip --disable-pip-version-check --version").read()
if results.find("Command 'pip' not found") != -1 or results.find("No module named pip") != -1: if results.find("Command 'pip' not found") != -1 or results.find("No module named pip") != -1:
results = os.popen(f"sudo apt install python3-pip").read() results = os.popen(f"sudo apt install python3-pip").read()
results = os.popen(f"pip --version").read() results = os.popen(f"pip --disable-pip-version-check --version").read()
if results.find("Command 'pip' not found") != -1 or results.find("No module named pip") != -1: if results.find("Command 'pip' not found") != -1 or results.find("No module named pip") != -1:
return -1 return -1
if isFreeBSD(): if isFreeBSD():
print("Warning: installModule may NOT work on freebsd") print("Warning: installModule may NOT work on freebsd")
pipArg = "" pipArg = " --disable-pip-version-check"
if isDocker(): if isDocker():
pipArg = " --break-system-packages" pipArg += " --break-system-packages"
results = os.popen(f"{sys.executable} -m pip install {moduleName}{pipArg}").read() # May need to be f"{sys.executable} -m pip install {moduleName}" results = os.popen(f"{sys.executable} -m pip install {moduleName}{pipArg}").read() # May need to be f"{sys.executable} -m pip install {moduleName}"
results = results.strip("\n") results = results.strip("\n")
if results.find("Requirement already satisfied:") > -1: if results.find("Requirement already satisfied:") > -1:

View File

@@ -62,17 +62,17 @@ def installModule(moduleName):
# Note: Linux may first need : sudo apt install python3-pip # Note: Linux may first need : sudo apt install python3-pip
# if error starts with "Command 'pip' not found" # if error starts with "Command 'pip' not found"
# or includes "No module named pip" # or includes "No module named pip"
results = os.popen(f"pip --version").read() results = os.popen(f"pip --disable-pip-version-check --version").read()
if results.find("Command 'pip' not found") != -1 or results.find("No module named pip") != -1: if results.find("Command 'pip' not found") != -1 or results.find("No module named pip") != -1:
results = os.popen(f"sudo apt install python3-pip").read() results = os.popen(f"sudo apt install python3-pip").read()
results = os.popen(f"pip --version").read() results = os.popen(f"pip --disable-pip-version-check --version").read()
if results.find("Command 'pip' not found") != -1 or results.find("No module named pip") != -1: if results.find("Command 'pip' not found") != -1 or results.find("No module named pip") != -1:
return -1 return -1
if isFreeBSD(): if isFreeBSD():
print("Warning: installModule may NOT work on freebsd") print("Warning: installModule may NOT work on freebsd")
pipArg = "" pipArg = " --disable-pip-version-check"
if isDocker(): if isDocker():
pipArg = " --break-system-packages" pipArg += " --break-system-packages"
results = os.popen(f"{sys.executable} -m pip install {moduleName}{pipArg}").read() # May need to be f"{sys.executable} -m pip install {moduleName}" results = os.popen(f"{sys.executable} -m pip install {moduleName}{pipArg}").read() # May need to be f"{sys.executable} -m pip install {moduleName}"
results = results.strip("\n") results = results.strip("\n")
if results.find("Requirement already satisfied:") > -1: if results.find("Requirement already satisfied:") > -1:

View File

@@ -62,17 +62,17 @@ def installModule(moduleName):
# Note: Linux may first need : sudo apt install python3-pip # Note: Linux may first need : sudo apt install python3-pip
# if error starts with "Command 'pip' not found" # if error starts with "Command 'pip' not found"
# or includes "No module named pip" # or includes "No module named pip"
results = os.popen(f"pip --version").read() results = os.popen(f"pip --disable-pip-version-check --version").read()
if results.find("Command 'pip' not found") != -1 or results.find("No module named pip") != -1: if results.find("Command 'pip' not found") != -1 or results.find("No module named pip") != -1:
results = os.popen(f"sudo apt install python3-pip").read() results = os.popen(f"sudo apt install python3-pip").read()
results = os.popen(f"pip --version").read() results = os.popen(f"pip --disable-pip-version-check --version").read()
if results.find("Command 'pip' not found") != -1 or results.find("No module named pip") != -1: if results.find("Command 'pip' not found") != -1 or results.find("No module named pip") != -1:
return -1 return -1
if isFreeBSD(): if isFreeBSD():
print("Warning: installModule may NOT work on freebsd") print("Warning: installModule may NOT work on freebsd")
pipArg = "" pipArg = " --disable-pip-version-check"
if isDocker(): if isDocker():
pipArg = " --break-system-packages" pipArg += " --break-system-packages"
results = os.popen(f"{sys.executable} -m pip install {moduleName}{pipArg}").read() # May need to be f"{sys.executable} -m pip install {moduleName}" results = os.popen(f"{sys.executable} -m pip install {moduleName}{pipArg}").read() # May need to be f"{sys.executable} -m pip install {moduleName}"
results = results.strip("\n") results = results.strip("\n")
if results.find("Requirement already satisfied:") > -1: if results.find("Requirement already satisfied:") > -1:

View File

@@ -2,13 +2,15 @@
# By David Maisonave (aka Axter) Jul-2024 (https://www.axter.com/) # By David Maisonave (aka Axter) Jul-2024 (https://www.axter.com/)
# Get the latest developers version from following link: https://github.com/David-Maisonave/Axter-Stash/tree/main/plugins/RenameFile # Get the latest developers version from following link: https://github.com/David-Maisonave/Axter-Stash/tree/main/plugins/RenameFile
# Based on source code from https://github.com/Serechops/Serechops-Stash/tree/main/plugins/Renamer # Based on source code from https://github.com/Serechops/Serechops-Stash/tree/main/plugins/Renamer
try:
import ModulesValidate # To automatically install missing modules, uncomment the following lines of code.
ModulesValidate.modulesInstalled(["stashapp-tools", "requests"]) # try:
except Exception as e: # import ModulesValidate
import traceback, sys # ModulesValidate.modulesInstalled(["stashapp-tools", "requests"])
tb = traceback.format_exc() # except Exception as e:
print(f"ModulesValidate Exception. Error: {e}\nTraceBack={tb}", file=sys.stderr) # import traceback, sys
# tb = traceback.format_exc()
# print(f"ModulesValidate Exception. Error: {e}\nTraceBack={tb}", file=sys.stderr)
import os, sys, shutil, json, hashlib, pathlib, logging, time, traceback import os, sys, shutil, json, hashlib, pathlib, logging, time, traceback
from pathlib import Path from pathlib import Path
@@ -100,7 +102,7 @@ if len(tag_whitelist) > 0:
handleExe = stash.pluginConfig['handleExe'] handleExe = stash.pluginConfig['handleExe']
openedfile = None openedfile = None
if handleExe != None and handleExe != "" and os.path.isfile(handleExe): if handleExe != None and handleExe != "" and os.path.isfile(handleExe):
ModulesValidate.modulesInstalled(["psutil"], silent=True) # ModulesValidate.modulesInstalled(["psutil"], silent=True)
from openedFile import openedFile from openedFile import openedFile
openedfile = openedFile(handleExe, stash) openedfile = openedFile(handleExe, stash)