- Add response.json() calls in nfo-manager.js for all API calls - Add response.json() calls in nfo-config.js for all API calls - Fix createNFO, refreshNFO, viewNFO, getSeriesWithoutNFO functions - Fix load and testTMDBConnection functions - All API responses must be parsed before accessing properties
184 lines
6.8 KiB
JavaScript
184 lines
6.8 KiB
JavaScript
/**
|
|
* AniWorld - NFO Config Module
|
|
*
|
|
* Handles NFO metadata configuration settings.
|
|
*
|
|
* Dependencies: constants.js, api-client.js, ui-utils.js
|
|
*/
|
|
|
|
var AniWorld = window.AniWorld || {};
|
|
|
|
AniWorld.NFOConfig = (function() {
|
|
'use strict';
|
|
|
|
const API = AniWorld.Constants.API;
|
|
|
|
/**
|
|
* Load NFO configuration from server
|
|
*/
|
|
async function load() {
|
|
try {
|
|
const response = await AniWorld.ApiClient.request(API.CONFIG);
|
|
|
|
if (!response) {
|
|
throw new Error('Failed to load configuration');
|
|
}
|
|
|
|
const config = await response.json();
|
|
|
|
if (config && config.nfo) {
|
|
const nfo = config.nfo;
|
|
|
|
// TMDB API Key
|
|
const tmdbKey = document.getElementById('tmdb-api-key');
|
|
if (tmdbKey && nfo.tmdb_api_key) {
|
|
tmdbKey.value = nfo.tmdb_api_key;
|
|
}
|
|
|
|
// Auto-create NFO
|
|
const autoCreate = document.getElementById('nfo-auto-create');
|
|
if (autoCreate) {
|
|
autoCreate.checked = nfo.auto_create || false;
|
|
}
|
|
|
|
// Update on scan
|
|
const updateOnScan = document.getElementById('nfo-update-on-scan');
|
|
if (updateOnScan) {
|
|
updateOnScan.checked = nfo.update_on_scan || false;
|
|
}
|
|
|
|
// Download options
|
|
const downloadPoster = document.getElementById('nfo-download-poster');
|
|
if (downloadPoster) {
|
|
downloadPoster.checked = nfo.download_poster !== false;
|
|
}
|
|
|
|
const downloadLogo = document.getElementById('nfo-download-logo');
|
|
if (downloadLogo) {
|
|
downloadLogo.checked = nfo.download_logo !== false;
|
|
}
|
|
|
|
const downloadFanart = document.getElementById('nfo-download-fanart');
|
|
if (downloadFanart) {
|
|
downloadFanart.checked = nfo.download_fanart !== false;
|
|
}
|
|
|
|
// Image size
|
|
const imageSize = document.getElementById('nfo-image-size');
|
|
if (imageSize && nfo.image_size) {
|
|
imageSize.value = nfo.image_size;
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error('Error loading NFO config:', error);
|
|
AniWorld.UI.showToast('Failed to load NFO configuration', 'error');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Save NFO configuration
|
|
*/
|
|
async function save() {
|
|
try {
|
|
AniWorld.UI.showLoading('Saving NFO configuration...');
|
|
|
|
// Get form values
|
|
const tmdbKey = document.getElementById('tmdb-api-key');
|
|
const autoCreate = document.getElementById('nfo-auto-create');
|
|
const updateOnScan = document.getElementById('nfo-update-on-scan');
|
|
const downloadPoster = document.getElementById('nfo-download-poster');
|
|
const downloadLogo = document.getElementById('nfo-download-logo');
|
|
const downloadFanart = document.getElementById('nfo-download-fanart');
|
|
const imageSize = document.getElementById('nfo-image-size');
|
|
|
|
// Validate TMDB API key is provided if auto-create is enabled
|
|
if (autoCreate && autoCreate.checked && (!tmdbKey || !tmdbKey.value.trim())) {
|
|
AniWorld.UI.hideLoading();
|
|
AniWorld.UI.showToast('TMDB API key is required when auto-create is enabled', 'error');
|
|
return;
|
|
}
|
|
|
|
// Get current config
|
|
const configResponse = await AniWorld.ApiClient.get(AniWorld.Constants.API.CONFIG);
|
|
if (!configResponse) {
|
|
throw new Error('Failed to load current configuration');
|
|
}
|
|
const config = await configResponse.json();
|
|
|
|
// Update NFO settings
|
|
config.nfo = {
|
|
tmdb_api_key: tmdbKey ? tmdbKey.value.trim() || null : null,
|
|
auto_create: autoCreate ? autoCreate.checked : false,
|
|
update_on_scan: updateOnScan ? updateOnScan.checked : false,
|
|
download_poster: downloadPoster ? downloadPoster.checked : true,
|
|
download_logo: downloadLogo ? downloadLogo.checked : true,
|
|
download_fanart: downloadFanart ? downloadFanart.checked : true,
|
|
image_size: imageSize ? imageSize.value : 'original'
|
|
};
|
|
|
|
// Save configuration
|
|
const response = await AniWorld.ApiClient.put(AniWorld.Constants.API.CONFIG, config);
|
|
|
|
if (response) {
|
|
AniWorld.UI.showToast('NFO configuration saved successfully', 'success');
|
|
} else {
|
|
throw new Error('Failed to save configuration');
|
|
}
|
|
} catch (error) {
|
|
console.error('Error saving NFO config:', error);
|
|
AniWorld.UI.showToast('Failed to save NFO configuration: ' + error.message, 'error');
|
|
} finally {
|
|
AniWorld.UI.hideLoading();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test TMDB API connection
|
|
*/
|
|
async function testTMDBConnection() {
|
|
try {
|
|
const tmdbKey = document.getElementById('tmdb-api-key');
|
|
|
|
if (!tmdbKey || !tmdbKey.value.trim()) {
|
|
AniWorld.UI.showToast('Please enter a TMDB API key first', 'warning');
|
|
return;
|
|
}
|
|
|
|
AniWorld.UI.showLoading('Testing TMDB connection...');
|
|
|
|
const response = await AniWorld.ApiClient.request(
|
|
'/api/config/tmdb/validate',
|
|
{
|
|
method: 'POST',
|
|
body: JSON.stringify({ api_key: tmdbKey.value.trim() })
|
|
}
|
|
);
|
|
|
|
if (!response) {
|
|
throw new Error('No response from server');
|
|
}
|
|
|
|
const data = await response.json();
|
|
|
|
if (data && data.valid) {
|
|
AniWorld.UI.showToast('TMDB API key is valid!', 'success');
|
|
} else {
|
|
const message = data && data.message ? data.message : 'Invalid API key';
|
|
AniWorld.UI.showToast('TMDB validation failed: ' + message, 'error');
|
|
}
|
|
} catch (error) {
|
|
console.error('Error testing TMDB connection:', error);
|
|
AniWorld.UI.showToast('Failed to test TMDB connection: ' + error.message, 'error');
|
|
} finally {
|
|
AniWorld.UI.hideLoading();
|
|
}
|
|
}
|
|
|
|
// Public API
|
|
return {
|
|
load: load,
|
|
save: save,
|
|
testTMDBConnection: testTMDBConnection
|
|
};
|
|
})();
|