This commit is contained in:
Tommy Mikkelsen 2022-07-31 23:30:59 +02:00
parent 433883bef9
commit 749214bef5
3 changed files with 168 additions and 39 deletions

View file

@ -206,6 +206,9 @@
"ET": {
"Description": "@:Modules.ET.Name allows you to export detail information about the media in your libraries",
"Name": "ExportTools",
"ExportPostersArts": "Posters and Arts",
"ExportPostersArtsTree": "tree",
"ExportPostersArtsFlat": "flat",
"ErrorServer": "No server",
"Settings": {
"ArtPostersOrigen": "Export Art and Posters in original size",

View file

@ -1160,6 +1160,9 @@ const etHelper = new class ETHELPER {
// Get status for exporting arts and posters
const bExportPosters = wtconfig.get(`ET.CustomLevels.${this.Settings.libTypeSec}.Posters.${this.Settings.levelName}`, false);
const bExportArt = wtconfig.get(`ET.CustomLevels.${this.Settings.libTypeSec}.Art.${this.Settings.levelName}`, false);
const bSeasonPosters = wtconfig.get(`ET.CustomLevels.${this.Settings.libTypeSec}.SeasonPosters.${this.Settings.levelName}`, false);
const bShowPosters = wtconfig.get(`ET.CustomLevels.${this.Settings.libTypeSec}.ShowPosters.${this.Settings.levelName}`, false);
const bShowArt = wtconfig.get(`ET.CustomLevels.${this.Settings.libTypeSec}.ShowArt.${this.Settings.levelName}`, false);
// Chunck step
const step = wtconfig.get("PMS.ContainerSize." + this.Settings.libType, 20);
let size = 0; // amount of items fetched each time
@ -1219,6 +1222,18 @@ const etHelper = new class ETHELPER {
{
await this.exportPics( { type: 'arts', data: chunckItems[item] } )
}
if (bSeasonPosters)
{
await this.exportPics( { type: 'seasonposters', data: chunckItems[item] } )
}
if (bShowPosters)
{
await this.exportPics( { type: 'showposters', data: chunckItems[item] } )
}
if (bShowArt)
{
await this.exportPics( { type: 'showart', data: chunckItems[item] } )
}
++this.Settings.count;
if ( this.Settings.count >= this.Settings.endItem) {
break;
@ -1352,13 +1367,141 @@ const etHelper = new class ETHELPER {
async getExportPicsUrlandFileFileName( { type: extype, data: data, res: res} ) { // Get Art/Poster filename
let key = String(JSONPath({path: '$.ratingKey', json: data})[0]);
let title = String(JSONPath({path: '$.title', json: data})[0]);
let title, show, season, seasonNumber, episodeNumber, year;
let fileName = '';
const ExpDir = path.join(
wtconfig.get('General.ExportPath'),
wtutils.AppName,
i18n.t('Modules.ET.Name'),
extype);
let ExpDir;
if ( wtconfig.get('ET.ExportPostersArtsTree', true)){
let filePath;
let mediaType = JSONPath({path: '$.type', json: data})[0];
switch (mediaType) {
case 'episode':
switch (extype) {
case 'posters':
show = sanitize(JSONPath({path: '$.grandparentTitle', json: data})[0]);
title = sanitize(JSONPath({path: '$.title', json: data})[0]);
seasonNumber = await JSONPath({path: '$.parentIndex', json: data})[0];
if ( String(seasonNumber).length < 2){
seasonNumber = '0' + seasonNumber;
}
season = `Season ${seasonNumber}`;
episodeNumber = JSONPath({path: '$.index', json: data})[0];
if ( String(episodeNumber).length < 2){
episodeNumber = '0' + episodeNumber;
}
title = `${show} -S${seasonNumber}E${episodeNumber}- ${title}`;
filePath = path.join(show, season);
break;
case 'seasonposters':
show = sanitize(JSONPath({path: '$.grandparentTitle', json: data})[0]);
title = sanitize(JSONPath({path: '$.title', json: data})[0]);
seasonNumber = await JSONPath({path: '$.parentIndex', json: data})[0];
if ( String(seasonNumber).length < 2){
seasonNumber = '0' + seasonNumber;
}
season = `Season ${seasonNumber}`;
episodeNumber = JSONPath({path: '$.index', json: data})[0];
if ( String(episodeNumber).length < 2){
episodeNumber = '0' + episodeNumber;
}
title = `Season${seasonNumber}`;
filePath = path.join(show, season);
break;
case 'arts':
show = sanitize(JSONPath({path: '$.grandparentTitle', json: data})[0]);
title = sanitize(JSONPath({path: '$.title', json: data})[0]);
seasonNumber = await JSONPath({path: '$.parentIndex', json: data})[0];
if ( String(seasonNumber).length < 2){
seasonNumber = '0' + seasonNumber;
}
season = `Season ${seasonNumber}`;
episodeNumber = JSONPath({path: '$.index', json: data})[0];
if ( String(episodeNumber).length < 2){
episodeNumber = '0' + episodeNumber;
}
title = `${show} -S${seasonNumber}E${episodeNumber}- ${title} -art`;
filePath = path.join(show, season);
break;
case 'showposters':
filePath = sanitize(JSONPath({path: '$.grandparentTitle', json: data})[0]);
title = `show`;
break;
case 'showart':
filePath = sanitize(JSONPath({path: '$.grandparentTitle', json: data})[0]);
title = `show -Art`;
break;
}
break;
case 'movie':
switch (extype) {
case 'posters':
title = sanitize(JSONPath({path: '$.title', json: data})[0]);
year = JSONPath({path: '$.year', json: data})[0];
filePath = `${title} (${year})`;
title = filePath
break;
case 'arts':
title = sanitize(JSONPath({path: '$.title', json: data})[0]);
year = JSONPath({path: '$.year', json: data})[0];
filePath = `${title} (${year})`;
title = `${filePath} -art`;
break;
}
break;
case 'show':
switch (extype) {
case 'posters':
title = sanitize(JSONPath({path: '$.title', json: data})[0]);
filePath = title;
break;
case 'arts':
title = sanitize(JSONPath({path: '$.title', json: data})[0]);
filePath = title;
title = `${title} -art`;
break;
}
break;
}
ExpDir = path.join(
wtconfig.get('General.ExportPath'),
wtutils.AppName,
sanitize(i18n.t('Modules.ET.Name')),
sanitize(i18n.t('Modules.ET.ExportPostersArts')),
sanitize(i18n.t('Modules.ET.ExportPostersArtsTree')),
sanitize(store.getters.getSelectedServer['name']),
sanitize(this.Settings.LibName),
filePath);
} else {
switch (extype) {
case 'seasonposters':
show = JSONPath({path: '$.grandparentTitle', json: data})[0];
season = JSONPath({path: '$.parentTitle', json: data})[0];
title = `${show}_${season}`;
break;
case 'showposters':
show = JSONPath({path: '$.grandparentTitle', json: data})[0];
title = `${show}`;
break;
case 'showart':
show = JSONPath({path: '$.grandparentTitle', json: data})[0];
title = `${show}`;
break;
case 'showart2':
show = JSONPath({path: '$.grandparentArt', json: data})[0];
title = `${show}`;
break;
default:
title = String(JSONPath({path: '$.title', json: data})[0]);
title = `${key}_${title.replace(/[/\\?%*:|"<>]/g, ' ').trim()}`;
break;
}
ExpDir = path.join(
wtconfig.get('General.ExportPath'),
wtutils.AppName,
i18n.t('Modules.ET.Name'),
i18n.t('Modules.ET.ExportPostersArts'),
i18n.t('Modules.ET.ExportPostersArtsFlat'),
extype);
}
// Also create exp dir if it doesn't exists
// Create export dir
var fs = require('fs');
@ -1368,9 +1511,9 @@ const etHelper = new class ETHELPER {
if ( res ){
// Remove whitespace
res = res.replace(/\s/g, "");
fileName = `${key}_${title.replace(/[/\\?%*:|"<>]/g, ' ').trim()}_${res}`;
fileName = `${title}_${res}`;
} else {
fileName = `${key}_${title.replace(/[/\\?%*:|"<>]/g, ' ').trim()}`;
fileName = title;
}
let outFile = path.join(
ExpDir,
@ -1395,6 +1538,18 @@ const etHelper = new class ETHELPER {
picUrl = String(JSONPath({path: '$.art', json: data})[0]);
resolutions = wtconfig.get('ET.Art_Dimensions', '75*75').split(',');
break;
case 'seasonposters':
picUrl = String(JSONPath({path: '$.parentThumb', json: data})[0]);
resolutions = wtconfig.get('ET.Posters_Dimensions', '75*75').split(',');
break;
case 'showposters':
picUrl = String(JSONPath({path: '$.grandparentThumb', json: data})[0]);
resolutions = wtconfig.get('ET.Posters_Dimensions', '75*75').split(',');
break;
case 'showart':
picUrl = String(JSONPath({path: '$.grandparentArt', json: data})[0]);
resolutions = wtconfig.get('ET.Art_Dimensions', '75*75').split(',');
break;
}
if ( ArtPostersOrigen ) { // Export in origen resolution
entry['url'] = `${this.Settings.baseURL}${picUrl}`;
@ -1421,6 +1576,7 @@ const etHelper = new class ETHELPER {
let files = await this.getExportPicsUrlandFile( { type: extype, data: data} );
let title = String(JSONPath({path: '$.title', json: data})[0]);
for (var idx in files){
log.silly(`[ethelper.js] (exportPics) - downloading ${files[idx]['url']} as file ${files[idx]['outFile']} with a title as ${title}`)
await this.forceDownload( { url:files[idx]['url'], target:files[idx]['outFile'], title:title} );
}
}
@ -1830,7 +1986,7 @@ const etHelper = new class ETHELPER {
}
Object.keys(levels).forEach(function(key) {
// Skip picture export fields
if ( !["Export Art", "Export Posters", "Export Show Art", "Export Season Posters", "Export Show Posters"].includes(levels[key]) )
if ( !["Export Art", "Export Show Art", "Export Posters", "Export Season Posters", "Export Show Posters"].includes(levels[key]) )
{
out.push(levels[key])
}

View file

@ -57,35 +57,6 @@ const mutations = {
};
const actions = {
async fetchFeatures( { commit, getters }){
log.debug(`[plextv.js] (fetchFeatures) - Getting features from plex.tv`);
let header = wtutils.PMSHeader;
header['X-Plex-Token'] = getters.getAuthToken;
await axios({
method: 'get',
url: `${wtutils.plexTVApi}v2/features`,
headers: header
})
.then((response) => {
log.debug(`[plextv.js] (fetchFeatures) - Response recieved`);
commit
console.log('Ged 66-3', JSON.stringify(response))
//commit('UPDATE_Features', ptvusers);
log.verbose(`[plextv.js] (fetchFeatures) - Featues added to store`)
})
.catch(function (error) {
if (error.response) {
log.error(`[plextv.js] (fetchFeatures) - ${error.response.data}`);
alert(error.response.data.errors[0].code + " " + error.response.data.errors[0].message);
} else if (error.request) {
log.error(`[plextv.js] (fetchFeatures) - ${error.request}`);
} else {
log.error(`[plextv.js] (fetchFeatures) - ${error.message}`);
}
});
},
async fetchUsers( { commit, getters }){
log.debug('Getting users from plex.tv');
let header = wtutils.PMSHeader;
@ -229,7 +200,6 @@ const actions = {
})
.then(function (response) {
log.debug(`[plextv.js] (loginToPlexWithToken) - Response recieved`);
console.log('Ged 55-3', JSON.stringify(response.data))
commit('UPDATE_AUTHTOKEN', response.data.user.authToken);
commit('UPDATE_AUTHENTICATED', true);
commit('UPDATE_AVATAR', response.data.user.thumb);