mirror of
https://github.com/stashapp/CommunityScripts.git
synced 2025-12-14 04:56:05 -06:00
491 lines
10 KiB
JavaScript
491 lines
10 KiB
JavaScript
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();
|