mirror of
https://github.com/stashapp/CommunityScripts.git
synced 2026-06-07 13:42:36 -05:00
provide stats userscript as a reference example
This commit is contained in:
134
plugins/2. stats/stats.js
Normal file
134
plugins/2. stats/stats.js
Normal file
@@ -0,0 +1,134 @@
|
||||
function createStatElement(container, title, heading) {
|
||||
const statEl = document.createElement('div');
|
||||
statEl.classList.add('stats-element');
|
||||
container.appendChild(statEl);
|
||||
|
||||
const statTitle = document.createElement('p');
|
||||
statTitle.classList.add('title');
|
||||
statTitle.innerText = title;
|
||||
statEl.appendChild(statTitle);
|
||||
|
||||
const statHeading = document.createElement('p');
|
||||
statHeading.classList.add('heading');
|
||||
statHeading.innerText = heading;
|
||||
statEl.appendChild(statHeading);
|
||||
}
|
||||
|
||||
async function createSceneStashIDPct(row) {
|
||||
const reqData = {
|
||||
"variables": {
|
||||
"scene_filter": {
|
||||
"stash_id": {
|
||||
"value": "",
|
||||
"modifier": "NOT_NULL"
|
||||
}
|
||||
}
|
||||
},
|
||||
"query": "query FindScenes($filter: FindFilterType, $scene_filter: SceneFilterType, $scene_ids: [Int!]) {\n findScenes(filter: $filter, scene_filter: $scene_filter, scene_ids: $scene_ids) {\n count\n }\n}"
|
||||
};
|
||||
const stashIdCount = (await stash.callGQL(reqData)).data.findScenes.count;
|
||||
|
||||
const reqData2 = {
|
||||
"variables": {
|
||||
"scene_filter": {}
|
||||
},
|
||||
"query": "query FindScenes($filter: FindFilterType, $scene_filter: SceneFilterType, $scene_ids: [Int!]) {\n findScenes(filter: $filter, scene_filter: $scene_filter, scene_ids: $scene_ids) {\n count\n }\n}"
|
||||
};
|
||||
const totalCount = (await stash.callGQL(reqData2)).data.findScenes.count;
|
||||
|
||||
createStatElement(row, (stashIdCount / totalCount * 100).toFixed(2) + '%', 'Scene StashIDs');
|
||||
}
|
||||
|
||||
async function createPerformerStashIDPct(row) {
|
||||
const reqData = {
|
||||
"variables": {
|
||||
"performer_filter": {
|
||||
"stash_id": {
|
||||
"value": "",
|
||||
"modifier": "NOT_NULL"
|
||||
}
|
||||
}
|
||||
},
|
||||
"query": "query FindPerformers($filter: FindFilterType, $performer_filter: PerformerFilterType) {\n findPerformers(filter: $filter, performer_filter: $performer_filter) {\n count\n }\n}"
|
||||
};
|
||||
const stashIdCount = (await stash.callGQL(reqData)).data.findPerformers.count;
|
||||
|
||||
const reqData2 = {
|
||||
"variables": {
|
||||
"performer_filter": {}
|
||||
},
|
||||
"query": "query FindPerformers($filter: FindFilterType, $performer_filter: PerformerFilterType) {\n findPerformers(filter: $filter, performer_filter: $performer_filter) {\n count\n }\n}"
|
||||
};
|
||||
const totalCount = (await stash.callGQL(reqData2)).data.findPerformers.count;
|
||||
|
||||
createStatElement(row, (stashIdCount / totalCount * 100).toFixed(2) + '%', 'Performer StashIDs');
|
||||
}
|
||||
|
||||
async function createStudioStashIDPct(row) {
|
||||
const reqData = {
|
||||
"variables": {
|
||||
"studio_filter": {
|
||||
"stash_id": {
|
||||
"value": "",
|
||||
"modifier": "NOT_NULL"
|
||||
}
|
||||
}
|
||||
},
|
||||
"query": "query FindStudios($filter: FindFilterType, $studio_filter: StudioFilterType) {\n findStudios(filter: $filter, studio_filter: $studio_filter) {\n count\n }\n}"
|
||||
};
|
||||
const stashIdCount = (await stash.callGQL(reqData)).data.findStudios.count;
|
||||
|
||||
const reqData2 = {
|
||||
"variables": {
|
||||
"scene_filter": {}
|
||||
},
|
||||
"query": "query FindStudios($filter: FindFilterType, $studio_filter: StudioFilterType) {\n findStudios(filter: $filter, studio_filter: $studio_filter) {\n count\n }\n}"
|
||||
};
|
||||
const totalCount = (await stash.callGQL(reqData2)).data.findStudios.count;
|
||||
|
||||
createStatElement(row, (stashIdCount / totalCount * 100).toFixed(2) + '%', 'Studio StashIDs');
|
||||
}
|
||||
|
||||
async function createPerformerFavorites(row) {
|
||||
const reqData = {
|
||||
"variables": {
|
||||
"performer_filter": {
|
||||
"filter_favorites": true
|
||||
}
|
||||
},
|
||||
"query": "query FindPerformers($filter: FindFilterType, $performer_filter: PerformerFilterType) {\n findPerformers(filter: $filter, performer_filter: $performer_filter) {\n count\n }\n}"
|
||||
};
|
||||
const perfCount = (await stash.callGQL(reqData)).data.findPerformers.count;
|
||||
|
||||
createStatElement(row, perfCount, 'Favorite Performers');
|
||||
}
|
||||
|
||||
async function createMarkersStat(row) {
|
||||
const reqData = {
|
||||
"variables": {
|
||||
"scene_marker_filter": {}
|
||||
},
|
||||
"query": "query FindSceneMarkers($filter: FindFilterType, $scene_marker_filter: SceneMarkerFilterType) {\n findSceneMarkers(filter: $filter, scene_marker_filter: $scene_marker_filter) {\n count\n }\n}"
|
||||
};
|
||||
const totalCount = (await stash.callGQL(reqData)).data.findSceneMarkers.count;
|
||||
|
||||
createStatElement(row, totalCount, 'Markers');
|
||||
}
|
||||
|
||||
stash.addEventListener('page:stats', function() {
|
||||
waitForElementByXpath("//div[contains(@class, 'container-fluid')]/div[@class='mt-5']", function(xpath, el) {
|
||||
if (!document.getElementById('custom-stats-row')) {
|
||||
const changelog = el.querySelector('div.changelog');
|
||||
const row = document.createElement('div');
|
||||
row.setAttribute('id', 'custom-stats-row');
|
||||
row.classList.add('col', 'col-sm-8', 'm-sm-auto', 'row', 'stats');
|
||||
el.insertBefore(row, changelog);
|
||||
|
||||
createSceneStashIDPct(row);
|
||||
createStudioStashIDPct(row);
|
||||
createPerformerStashIDPct(row);
|
||||
createPerformerFavorites(row);
|
||||
createMarkersStat(row);
|
||||
}
|
||||
});
|
||||
});
|
||||
6
plugins/2. stats/stats.yml
Normal file
6
plugins/2. stats/stats.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
name: Extended Stats
|
||||
description: Adds new stats to the stats page
|
||||
version: 1.0
|
||||
ui:
|
||||
javascript:
|
||||
- stats.js
|
||||
Reference in New Issue
Block a user