From ffd0dfec84773a5d176e8187aaa21aad365a0d47 Mon Sep 17 00:00:00 2001 From: David Maisonave <47364845+David-Maisonave@users.noreply.github.com> Date: Tue, 5 Nov 2024 19:01:13 -0500 Subject: [PATCH] Added advance menu option to UI --- StashPluginHelper/ModulesValidate.py | 8 ++-- plugins/DupFileManager/DupFileManager.js | 48 ++++++++++++++++------- plugins/DupFileManager/ModulesValidate.py | 8 ++-- plugins/FileMonitor/ModulesValidate.py | 8 ++-- plugins/RenameFile/ModulesValidate.py | 8 ++-- plugins/RenameFile/renamefile.py | 18 +++++---- 6 files changed, 59 insertions(+), 39 deletions(-) diff --git a/StashPluginHelper/ModulesValidate.py b/StashPluginHelper/ModulesValidate.py index 2c88ef0..4de2f3a 100644 --- a/StashPluginHelper/ModulesValidate.py +++ b/StashPluginHelper/ModulesValidate.py @@ -62,17 +62,17 @@ def installModule(moduleName): # Note: Linux may first need : sudo apt install python3-pip # if error starts with "Command 'pip' not found" # 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: 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: return -1 if isFreeBSD(): print("Warning: installModule may NOT work on freebsd") - pipArg = "" + pipArg = " --disable-pip-version-check" 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 = results.strip("\n") if results.find("Requirement already satisfied:") > -1: diff --git a/plugins/DupFileManager/DupFileManager.js b/plugins/DupFileManager/DupFileManager.js index 29bee29..fc315f6 100644 --- a/plugins/DupFileManager/DupFileManager.js +++ b/plugins/DupFileManager/DupFileManager.js @@ -27,26 +27,36 @@ return JSON.parse(AjaxData.responseJSON.data.runPluginOperation.replaceAll("'", "\"")); } var LocalDupReportExist = false; + var AdvanceMenuOptionUrl = ""; function GetLocalDuplicateReportPath(){ var LocalDuplicateReport = RunPluginDupFileManager("getLocalDupReportPath", "json"); var LocalDuplicateReportPath = "file://" + LocalDuplicateReport.Path; console.log(LocalDuplicateReportPath); + AdvanceMenuOptionUrl = LocalDuplicateReportPath.replace("DuplicateTagScenes.html", "DupFileManager/advance_options.html"); LocalDupReportExist = LocalDuplicateReport.LocalDupReportExist; return LocalDuplicateReportPath; } + const PluginApi = window.PluginApi; const React = PluginApi.React; const GQL = PluginApi.GQL; const { Button } = PluginApi.libraries.Bootstrap; const { faEthernet } = PluginApi.libraries.FontAwesomeSolid; const { Link, NavLink, } = PluginApi.libraries.ReactRouterDOM; - const ToolsMenuToolTip = "Show DupFileManager advance menu, which list additional tools and utilities."; - 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")); + // ToolTip text 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 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 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 HomePage = () => { var LocalDuplicateReportPath = GetLocalDuplicateReportPath(); @@ -55,19 +65,21 @@ if (LocalDupReportExist) return (React.createElement("center", null, 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(Link, { to: "/plugin/DupFileManager_CreateReportWithNoTagging", title: CreateReportNoTagButtonToolTip }, React.createElement(Button, null, "Create New Report (NO Tagging)")), + GetAdvanceMenuButton(), 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), ToolsMenuOptionButton )); return (React.createElement("center", null, 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(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), ToolsMenuOptionButton )); @@ -77,10 +89,11 @@ if (componentsLoading) return (React.createElement(LoadingIndicator, {message: "Running task to create report. This may take a while. Please standby."})); RunPluginDupFileManager("tag_duplicates_task"); - var LocalDuplicateReportPath = GetLocalDuplicateReportPath(); return (React.createElement("center", null, 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 )); }; @@ -89,10 +102,11 @@ if (componentsLoading) return (React.createElement(LoadingIndicator, {message: "Running task to create report. Please standby."})); RunPluginDupFileManager("createDuplicateReportWithoutTagging"); - var LocalDuplicateReportPath = GetLocalDuplicateReportPath(); return (React.createElement("center", null, 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 )); }; @@ -103,17 +117,21 @@ React.createElement("h3", {class:"submenu"}, "Report Options"), 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(Link, { to: "/plugin/DupFileManager_CreateReport", title: CreateReportButtonToolTip }, React.createElement(Button, null, "Create Report (Tagging)")), + GetCreateReportButton("Create Report (Tagging)"), React.createElement("p", null), DupFileManagerReportMenuButton, 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("hr", {class:"dotted"}), React.createElement("h3", {class:"submenu"}, "Tagged Duplicates Options"), 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("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")), diff --git a/plugins/DupFileManager/ModulesValidate.py b/plugins/DupFileManager/ModulesValidate.py index 2c88ef0..4de2f3a 100644 --- a/plugins/DupFileManager/ModulesValidate.py +++ b/plugins/DupFileManager/ModulesValidate.py @@ -62,17 +62,17 @@ def installModule(moduleName): # Note: Linux may first need : sudo apt install python3-pip # if error starts with "Command 'pip' not found" # 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: 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: return -1 if isFreeBSD(): print("Warning: installModule may NOT work on freebsd") - pipArg = "" + pipArg = " --disable-pip-version-check" 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 = results.strip("\n") if results.find("Requirement already satisfied:") > -1: diff --git a/plugins/FileMonitor/ModulesValidate.py b/plugins/FileMonitor/ModulesValidate.py index 2c88ef0..4de2f3a 100644 --- a/plugins/FileMonitor/ModulesValidate.py +++ b/plugins/FileMonitor/ModulesValidate.py @@ -62,17 +62,17 @@ def installModule(moduleName): # Note: Linux may first need : sudo apt install python3-pip # if error starts with "Command 'pip' not found" # 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: 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: return -1 if isFreeBSD(): print("Warning: installModule may NOT work on freebsd") - pipArg = "" + pipArg = " --disable-pip-version-check" 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 = results.strip("\n") if results.find("Requirement already satisfied:") > -1: diff --git a/plugins/RenameFile/ModulesValidate.py b/plugins/RenameFile/ModulesValidate.py index 2c88ef0..4de2f3a 100644 --- a/plugins/RenameFile/ModulesValidate.py +++ b/plugins/RenameFile/ModulesValidate.py @@ -62,17 +62,17 @@ def installModule(moduleName): # Note: Linux may first need : sudo apt install python3-pip # if error starts with "Command 'pip' not found" # 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: 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: return -1 if isFreeBSD(): print("Warning: installModule may NOT work on freebsd") - pipArg = "" + pipArg = " --disable-pip-version-check" 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 = results.strip("\n") if results.find("Requirement already satisfied:") > -1: diff --git a/plugins/RenameFile/renamefile.py b/plugins/RenameFile/renamefile.py index 6f4af7b..4db9c9d 100644 --- a/plugins/RenameFile/renamefile.py +++ b/plugins/RenameFile/renamefile.py @@ -2,13 +2,15 @@ # 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 # Based on source code from https://github.com/Serechops/Serechops-Stash/tree/main/plugins/Renamer -try: - import ModulesValidate - ModulesValidate.modulesInstalled(["stashapp-tools", "requests"]) -except Exception as e: - import traceback, sys - tb = traceback.format_exc() - print(f"ModulesValidate Exception. Error: {e}\nTraceBack={tb}", file=sys.stderr) + +# To automatically install missing modules, uncomment the following lines of code. +# try: + # import ModulesValidate + # ModulesValidate.modulesInstalled(["stashapp-tools", "requests"]) +# except Exception as e: + # 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 from pathlib import Path @@ -100,7 +102,7 @@ if len(tag_whitelist) > 0: handleExe = stash.pluginConfig['handleExe'] openedfile = None if handleExe != None and handleExe != "" and os.path.isfile(handleExe): - ModulesValidate.modulesInstalled(["psutil"], silent=True) + # ModulesValidate.modulesInstalled(["psutil"], silent=True) from openedFile import openedFile openedfile = openedFile(handleExe, stash)