var jsonData = [ { name: "OPTIONAL NAME - NOT USED IN SCRIPT", paths: [ "C:\\Users\\UserName\\Desktop\\NOTPORN\\Brazzers", "D:\\SecretStorage\\Porn\\Brazzers", ], studio: "Brazzers", tags: ["Default_Data_For_Path_Tagged"], }, ]; function ok() { return { output: "ok", }; } function main() { var hookContext = input.Args.hookContext; var type = hookContext.type; var ID = hookContext.id; if (!type || !ID) { // just return return ok(); } var itemPath; var name = ""; if (type === "Scene.Create.Post") { itemPath = getScenePath(ID); name = "scene"; } else if (type === "Gallery.Create.Post") { itemPath = getGalleryPath(ID); name = "gallery"; } else if (type === "Image.Create.Post") { itemPath = getImagePath(ID); name = "image"; } var defaultData = getDefaultData(itemPath); // create tags var defaultTags = []; for (var p = 0; p < defaultData.length; p++) { var tags = defaultData[p].tags; if (tags) { for (var t = 0; t < tags.length; t++) { var tag = tags[t]; if (stringNotAlreadyPresent(tag, defaultTags)) defaultTags.push(tag); } } } // create studio var addStudio = false; var defaultStudioId = null; var defaultStudio; for (var p = 0; p < defaultData.length; p++) { var studio = defaultData[p].studio; if (studio) { var studioId = getStudioId(studio); if (studioId) { defaultStudioId = studioId; addStudio = true; defaultStudio = studio; } } } // create performers var defaultPerformers = []; for (var p = 0; p < defaultData.length; p++) { var performers = defaultData[p].performers; if (performers) { for (var t = 0; t < performers.length; t++) { var performer = performers[t]; if (stringNotAlreadyPresent(performer, defaultPerformers)) defaultPerformers.push(performer); } } } // convert tags to tagIds var addTags = false; var defaultTagIds = []; if (defaultTags) { for (var i = defaultTags.length - 1; i >= 0; i--) { var tagId = getTagId(defaultTags[i]); tagId ? defaultTagIds.push(tagId) : defaultTags.pop(); } if (defaultTagIds && defaultTagIds.length != 0) { addTags = true; } } // convert performers to performerIds var addPerformers = false; var defaultPerformerIds = []; if (defaultPerformers) { for (var i = defaultPerformers.length - 1; i >= 0; i--) { var tagId = getPerformerId(defaultPerformers[i]); tagId ? defaultPerformerIds.push(tagId) : defaultPerformers.pop(); } if (defaultPerformerIds && defaultPerformerIds.length != 0) { addPerformers = true; } } // Apply all and log var tags = addTags ? defaultTagIds : null; var studio = addStudio ? defaultStudioId : null; var performers = addPerformers ? defaultPerformerIds : null; if (type === "Scene.Create.Post") { setSceneData(ID, tags, studio, performers); } else if (type === "Gallery.Create.Post") { setGalleryData(ID, tags, studio, performers); } else if (type === "Image.Create.Post") { setImageData(ID, tags, studio, performers); } for (var o = 0; o < defaultTags.length; o++) { log.Info( "[DefaultDataForPath]: Added tag " + defaultTags[o] + " to " + name + " " + ID ); } for (var o = 0; o < defaultPerformers.length; o++) { log.Info( "[DefaultDataForPath]: Added performer " + defaultPerformers[o] + " to " + name + " " + ID ); } addStudio ? log.Info( "[DefaultDataForPath]: Added studio " + defaultStudio + " to " + name + " " + ID ) : ""; } function getScenePath(ID) { var query = "\ query findScene($id: ID) {\ findScene(id: $id) {\ files {\ path\ }\ }\ }"; var variables = { id: ID, }; var result = gql.Do(query, variables); var findScene = result.findScene; if (!findScene) { return null; } var path = findScene.files[0].path; return path; } function getImagePath(ID) { var query = "\ query findImage($id: ID) {\ findImage(id: $id) {\ visual_files {\ ... on ImageFile {\ path\ }\ }\ }\ }"; var variables = { id: ID, }; var result = gql.Do(query, variables); var findImage = result.findImage; if (!findImage) { return null; } var path = findImage["visual_files"][0].path; return path; } function getGalleryPath(ID) { var query = "\ query findGallery($id: ID!) {\ findGallery(id: $id) {\ folder {\ path\ }\ }\ }"; var variables = { id: ID, }; var result = gql.Do(query, variables); var findGallery = result.findGallery; if (!findGallery) { return null; } var path = findGallery.folder.path; return path; } function getTagId(tagName) { var query = "\ query findTagId($filter: FindFilterType!) {\ findTags(filter: $filter) {\ tags {\ id\ }\ }\ }"; var variables = { filter: { q: tagName, }, }; var result = gql.Do(query, variables); if (result.findTags.tags[0]) { return result.findTags.tags[0].id; } else { log.Error("TAG " + tagName + " DOES NOT EXIST IN STASH!"); return null; } } function getPerformerId(performerName) { var query = "\ query findPerformerId($filter: FindFilterType!) {\ findPerformers(filter: $filter) {\ performers {\ id\ }\ }\ }"; var variables = { filter: { q: performerName, }, }; var result = gql.Do(query, variables); if (result.findPerformers.performers[0]) { return result.findPerformers.performers[0].id; } else { log.Error("PERFORMER " + performerName + " DOES NOT EXIST IN STASH!"); return null; } } function getStudioId(studioName) { var query = "\ query findStudioId($filter: FindFilterType!) {\ findStudios(filter: $filter) {\ studios {\ id\ }\ }\ }"; var variables = { filter: { q: studioName, }, }; var result = gql.Do(query, variables); if (result.findStudios.studios[0]) { return result.findStudios.studios[0].id; } else { log.Error("STUDIO " + studioName + " DOES NOT EXIST IN STASH!"); return null; } } function stringNotAlreadyPresent(text, itemArray) { for (var i = 0; i < itemArray.length; i++) { if (itemArray[i] === text) { return false; } } return true; } function addAllData( obj, lowerItemPath, defaultData, pTags, pPerformers, pStudio ) { if (obj) { if (obj.paths) { var paths = obj.paths; if (containsPath(paths, lowerItemPath)) { // inject data from parent if avail if (pTags) { if (!obj.tags) { obj.tags = []; } obj.tags = obj.tags.concat(pTags); } if (pPerformers) { if (!obj.performers) { obj.performers = []; } obj.performers = obj.performers.concat(pPerformers); } if (pStudio) { obj.studio = pStudio; } defaultData.push(obj); } } else { // add defaults to children if (obj.tags) { if (!pTags) { pTags = obj.tags; } else { pTags = pTags.concat(obj.tags); } } if (obj.performers) { if (!pPerformers) { pPerformers = obj.performers; } else { pPerformers = pPerformers.concat(obj.performers); } } if (obj.studio) { pStudio = obj.studio; } } if (obj.children) { for (var o = 0; o < obj.children.length; o++) { defaultData = addAllData( obj.children[o], lowerItemPath, defaultData, pTags, pPerformers, pStudio ); } } } return defaultData; } function getDefaultData(itemPath) { var defaultData = []; var lowerItemPath = itemPath.toLowerCase(); for (var i = 0; i < jsonData.length; i++) { var obj = jsonData[i]; defaultData = addAllData(obj, lowerItemPath, defaultData, null, null, null); } return defaultData; } function containsPath(paths, inputPath) { for (var p = 0; p < paths.length; p++) { var path = paths[p].toLowerCase() + ""; if (stringContains(inputPath, path)) { log.Info("[DefaultDataForPath]: " + inputPath + " MATCH " + path); return true; } } return false; } function stringContains(value, searchFor) { var v = (value || "").toLowerCase(); var v2 = searchFor; if (v2) { v2 = v2.toLowerCase(); } return v.indexOf(v2) > -1; } function containsElem(items, elem) { for (var i = 0; i < items.length; i++) { var item = items[i].toLowerCase(); if (item.equals(elem)) { return true; } } return false; } function setSceneData(sceneID, tagIDs, studioID, performerIds) { var mutation = "\ mutation sceneUpdate($input: SceneUpdateInput!) {\ sceneUpdate(input: $input) {\ id\ }\ }"; var variables = { input: { id: sceneID, tag_ids: tagIDs, studio_id: studioID, performer_ids: performerIds, }, }; gql.Do(mutation, variables); } function setImageData(sceneID, tagIDs, studioID, performerIds) { var mutation = "\ mutation imageUpdate($input: ImageUpdateInput!) {\ imageUpdate(input: $input) {\ id\ }\ }"; var variables = { input: { id: sceneID, tag_ids: tagIDs, studio_id: studioID, performer_ids: performerIds, }, }; gql.Do(mutation, variables); } function setGalleryData(sceneID, tagIDs, studioID, performerIds) { var mutation = "\ mutation galleryUpdate($input: GalleryUpdateInput!) {\ galleryUpdate(input: $input) {\ id\ }\ }"; var variables = { input: { id: sceneID, tag_ids: tagIDs, studio_id: studioID, performer_ids: performerIds, }, }; gql.Do(mutation, variables); } main();