From 1483f93b17a417582f346489ee85a1c6d4e7c4f8 Mon Sep 17 00:00:00 2001 From: nosamu <71368227+n0samu@users.noreply.github.com> Date: Fri, 3 Nov 2023 21:34:57 -0500 Subject: [PATCH] Version 2.2: Add drag & drop file/folder selection, add debug option --- .gitignore | 2 ++ CommandLine.ls | 3 ++- DirectorCastRipper.dir | Bin 2561007 -> 2566621 bytes Export.ls | 3 +++ Files.ls | 8 ++++++-- Init.ls | 1 - README.md | 3 ++- UI.ls | 13 +++++++++++++ 8 files changed, 28 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 69c9fc7..3d37cde 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ Tools/ Xtras/ Exports/ *.exe +*.ini +*.lnk diff --git a/CommandLine.ls b/CommandLine.ls index 8754890..24e2327 100644 --- a/CommandLine.ls +++ b/CommandLine.ls @@ -84,6 +84,7 @@ on processCommandLineArgs args case optName of "help", "h": printInfo(True) "version", "v": printInfo(False) + "debug": set the debugPlaybackEnabled = True -- File paths can be passed without an option name "files", EMPTY: processSelection(optVal) "folders": set inputFolders = optVal @@ -103,7 +104,7 @@ on processCommandLineArgs args if listP(inputFolders) then repeat with folderPath in inputFolders if fxObj.fx_FolderExists(folderPath) then - processSelection(getDirFiles(folderPath)) + processSelection(getDirFilesInFolder(folderPath)) else errorMsg("The specified input folder does not exist:" && folderPath) end if diff --git a/DirectorCastRipper.dir b/DirectorCastRipper.dir index 409a97a6bb5a6688203c4b641cda78a70f220e2f..b2f87cdc3368865c243c9223ca96b2e646d29150 100644 GIT binary patch delta 16152 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 maH()A!B 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 diff --git a/Export.ls b/Export.ls index 2cc17a0..b581f67 100644 --- a/Export.ls +++ b/Export.ls @@ -55,6 +55,9 @@ on exportFlash flashMember, basePath repeat with i = 1 to 5 set ok = exportSWF(flashMember, basePath & ".swf") if ok then exit repeat + else if the debugPlaybackEnabled then + warnMsg("Failed to export" && getMemberIdString(flashMember) & ". Retrying...") + end if end repeat return not ok end diff --git a/Files.ls b/Files.ls index 7eda0d9..10a3b3c 100644 --- a/Files.ls +++ b/Files.ls @@ -167,10 +167,14 @@ on filterFiles fileList, exts return ret end -on getDirFiles folderPath +on getDirFiles files set dirExts = ["dir", "dxr", "dcr", "cst", "cxt", "cct"] + return filterFiles(files, dirExts) +end + +on getDirFilesInFolder folderPath set folderPath = ensureTrailingSlash(folderPath) - set dirFiles = filterFiles(fxObj.fx_folderToList(folderPath), dirExts) + set dirFiles = getDirFiles(fxObj.fx_folderToList(folderPath)) set dirFilePaths = list() repeat with fName in dirFiles dirFilePaths.append(folderPath & fName) diff --git a/Init.ls b/Init.ls index 29149de..5112367 100644 --- a/Init.ls +++ b/Init.ls @@ -29,7 +29,6 @@ end on prepareMovie global pathSep, fileioObj, fxObj clearGlobals() - -- set the debugPlaybackEnabled = 1 set the idleLoadMode = 0 set the title of the window = line 1 of the movieAboutInfo set pathSep = "\" diff --git a/README.md b/README.md index a187508..4763761 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ The following table lists member types that Director Cast Ripper can export, alo | Field | TXT | ## Other Features -Director Cast Ripper exports information about movies and cast members into CSV spreadsheets. When adding and removing files, it allows multiselection of files using Shift-click or Ctrl-click. All of its functionality is also accessible via the command line; run `DirectorCastRipper.exe --help` for details. Director Cast Ripper can also integrate with [ProjectorRays](https://github.com/ProjectorRays/ProjectorRays); just download the EXE file and place it in Cast Ripper's `Tools` folder. +Director Cast Ripper exports information about movies and cast members into CSV spreadsheets. When adding and removing files, it allows multiselection of files using Shift-click or Ctrl-click. Files can also be added by dragging them into the window. All of its functionality is also accessible via the command line; run `DirectorCastRipper.exe --help` for details. Director Cast Ripper can also integrate with [ProjectorRays](https://github.com/ProjectorRays/ProjectorRays); just download the EXE file and place it in Cast Ripper's `Tools` folder. Although Cast Ripper runs within the Director Player, it disables scripting for all loaded movies, preventing their code from interfering with the export process. But the Director Player still attempts to load any cast files, linked cast members, and Xtras that each movie depends on. Therefore when exporting it is best to keep movies in their original folders and to copy any required Xtras into Cast Ripper's Xtras folder, otherwise error dialogs may pop up during the export process. If you are using Cast Ripper to process many files and don't know what Xtras they may need, Cast Ripper provides an option to auto-dismiss the error dialogs, preventing the export process from stalling. @@ -29,6 +29,7 @@ Director Cast Ripper uses several third-party Xtras which are listed below. - Kent Kersten's [FileXtra4](http://web.archive.org/web/20040803131759/http://www.kblab.net/xtras/FileXtra4/index.html) handles files and folders, while Magic Modules' [Buddy API](http://mods.com.au/) provides file and folder selection dialogs and other useful functions. - Valentin's [Console Xtra](https://valentin.dasdeck.com/xtras/console_xtra/win/) and [CommandLine Xtra](https://valentin.dasdeck.com/xtras/commandline_xtra/win/) provide command line functionality. - Valentin's [Msg Xtra](https://valentin.dasdeck.com/xtras/msg_xtra/win/) provides functionality for the auto-dismiss feature. +- Valentin's [Drop Xtra](https://valentin.dasdeck.com/xtras/drop_xtra/win/) allows drag & drop file and folder selection. - Tomysshadow's [MoaProperties Xtra](https://github.com/tomysshadow/MoaProperties-Xtra/) provides access to movie metadata that is otherwise inaccessible from Lingo. Special thanks to [Tomysshadow](https://github.com/tomysshadow/) for his extensive help and guidance throughout the development process, and to [Valentin](https://valentin.dasdeck.com/) for developing so many great and useful Xtras! diff --git a/UI.ls b/UI.ls index 64a2a94..af8394f 100644 --- a/UI.ls +++ b/UI.ls @@ -1,11 +1,14 @@ global nextBtn, backBtn on initUI + global dropXtra set nextBtn = sprite "NextButton" set backBtn = sprite "BackButton" repeat with btn in [nextBtn, backBtn] if the visible of btn then btn.setStyle("fontSize", 18) end repeat + set dropXtra = xtra("DropXtra").new(#itemsDropped) + dropXtra.dropStart() -- Setting Flash sprite properties does not work until after the first stage update updateStage() initScreen() @@ -228,6 +231,16 @@ on chooseFolder if folderPath <> EMPTY then set the text of sprite "FolderPathBox" to folderPath end +on itemsDropped items + case the frameLabel of + "Choose Files": + addFiles(getDirFiles(items.getaProp(#Files))) + "Options": + set the text of sprite "FolderPathBox" to items.getaProp(#Folders).getAt(1) + end case + updateScreen() +end + on updateProgressBar set fraction = getProgress() set progBarRect = the rect of sprite "ProgressBar"