I'm VERY new to JXA, so I'm sure there's a lot I don't know yet. I'm a Javascript developer, but have only been researching this for a day. Here's what I'm trying to do:
I have a ton of folders on my MacBookPro with video courses in them, in mp4 format. In order for Plex to see them as TV shows (which seems to be the best way to browse these), they need to be renamed and moved into a "Season 1" folder. I've tried several script examples to accomplish this, but I continue to get errors that I cannot understand. Here's the most recent iteration of my script (doesn't address renaming the files at all):
var currentApp = Application.currentApplication();
currentApp.includeStandardAdditions = true;
var finder = Application("Finder");
var systemEvents = Application("System Events");
var folderName = "Season 1";
var extensionsToProcess = ["mp4","mkv","mpg","mov"] // For example: {"jpg", "jpeg"}, NOT: {".jpg", ".jpeg"}
// Ask a folder to process
var sourcePath = currentApp.chooseFolder ({
withPrompt: "Choose the source folder"
}).toString();
var sourceFolder = systemEvents.aliases.byName(sourcePath);
// Create the destination folder
var container = sourceFolder.container();
var containerPath = container.path();
var destinationFolder = finder.make({
new: "folder", at: containerPath,
withProperties: { name: folderName }
});
// Create an array of items to be processed
var items = systemEvents.aliases.byName(sourcePath).diskItems;
var selectedItems = [];
for (var i = 0; i < items.length; i++) {
var item = items[i];
if (item.class() != "folder" && item.visible()) {
selectedItems.push(item.name());
}
}
// Process every item
var createdFolders = [];
selectedItems.forEach(function(itemName) {
var item = systemEvents.aliases.byName(sourcePath + "/" + itemName);
var extension = item.nameExtension();
var name = item.name().match(/(.*) - (.*)/);
if (extensionsToProcess.includes(extension)) {
try {
var folderName = sourceFolder;
if (!createdFolders.includes(folderName)) {
var newFolder = finder.make({
new: "folder", at: destinationFolder, withProperties: { name: folderName }
});
createdFolders.push(folderName);
}
item = finder.move(item.path(), { to: destinationFolder.folders[folderName] });
item.name = name[2];
} catch (error) {
console.log("Error (item: " + item.name() + "): " + error);
}
}
});
I'm currently getting an error on the line where I try to create a new folder (destinationFolder) that says the folder already exists, which it doesn't, so I'm obviously a bit lost here. Any help would be greatly appreciated!