dev #62

Merged
sbcrumb merged 56 commits from dev into main 2025-10-26 15:45:15 -04:00
3 changed files with 39 additions and 12 deletions
Showing only changes of commit 2f4d4638ef - Show all commits
+4 -4
View File
@@ -93,11 +93,11 @@ async def get_movies_list(dependencies: dict,
params.append(source_filter) params.append(source_filter)
if search: if search:
where_conditions.append("(imdb_id LIKE %s OR path LIKE %s)") where_conditions.append("(imdb_id ILIKE %s OR path ILIKE %s)")
params.extend([f"%{search}%", f"%{search}%"]) params.extend([f"%{search}%", f"%{search}%"])
if imdb_search: if imdb_search:
where_conditions.append("imdb_id LIKE %s") where_conditions.append("imdb_id ILIKE %s")
params.append(f"%{imdb_search}%") params.append(f"%{imdb_search}%")
where_clause = " AND ".join(where_conditions) if where_conditions else "1=1" where_clause = " AND ".join(where_conditions) if where_conditions else "1=1"
@@ -162,11 +162,11 @@ async def get_tv_series_list(dependencies: dict,
having_conditions = [] having_conditions = []
if search: if search:
where_conditions.append("(s.imdb_id LIKE %s OR s.path LIKE %s)") where_conditions.append("(s.imdb_id ILIKE %s OR s.path ILIKE %s)")
params.extend([f"%{search}%", f"%{search}%"]) params.extend([f"%{search}%", f"%{search}%"])
if imdb_search: if imdb_search:
where_conditions.append("s.imdb_id LIKE %s") where_conditions.append("s.imdb_id ILIKE %s")
params.append(f"%{imdb_search}%") params.append(f"%{imdb_search}%")
if source_filter: if source_filter:
+4 -4
View File
@@ -96,11 +96,11 @@ async def get_movies_list(dependencies: dict,
params.append(source_filter) params.append(source_filter)
if search: if search:
where_conditions.append("(imdb_id LIKE %s OR path LIKE %s)") where_conditions.append("(imdb_id ILIKE %s OR path ILIKE %s)")
params.extend([f"%{search}%", f"%{search}%"]) params.extend([f"%{search}%", f"%{search}%"])
if imdb_search: if imdb_search:
where_conditions.append("imdb_id LIKE %s") where_conditions.append("imdb_id ILIKE %s")
params.append(f"%{imdb_search}%") params.append(f"%{imdb_search}%")
where_clause = " AND ".join(where_conditions) if where_conditions else "1=1" where_clause = " AND ".join(where_conditions) if where_conditions else "1=1"
@@ -165,11 +165,11 @@ async def get_tv_series_list(dependencies: dict,
having_conditions = [] having_conditions = []
if search: if search:
where_conditions.append("(s.imdb_id LIKE %s OR s.path LIKE %s)") where_conditions.append("(s.imdb_id ILIKE %s OR s.path ILIKE %s)")
params.extend([f"%{search}%", f"%{search}%"]) params.extend([f"%{search}%", f"%{search}%"])
if imdb_search: if imdb_search:
where_conditions.append("s.imdb_id LIKE %s") where_conditions.append("s.imdb_id ILIKE %s")
params.append(f"%{imdb_search}%") params.append(f"%{imdb_search}%")
if source_filter: if source_filter:
+31 -4
View File
@@ -667,6 +667,13 @@ async function smartFixMovie(imdbId) {
} }
async function smartFixEpisode(imdbId, season, episode) { async function smartFixEpisode(imdbId, season, episode) {
// Validate parameters
if (!imdbId || season === undefined || season === null || episode === undefined || episode === null) {
console.error('smartFixEpisode: Invalid parameters:', {imdbId, season, episode});
showToast('Invalid episode parameters', 'error');
return;
}
try { try {
const options = await apiCall(`/api/episodes/${imdbId}/${season}/${episode}/date-options`); const options = await apiCall(`/api/episodes/${imdbId}/${season}/${episode}/date-options`);
showSmartFixModal('episode', options); showSmartFixModal('episode', options);
@@ -694,7 +701,10 @@ function showSmartFixModal(mediaType, options) {
if (mediaType === 'movie') { if (mediaType === 'movie') {
title.textContent = `Fix Date for Movie: ${options.imdb_id}`; title.textContent = `Fix Date for Movie: ${options.imdb_id}`;
} else { } else {
title.textContent = `Fix Date for Episode: ${options.imdb_id} S${options.season.toString().padStart(2, '0')}E${options.episode.toString().padStart(2, '0')}`; // Add validation for episode data
const season = options.season || 0;
const episode = options.episode || 0;
title.textContent = `Fix Date for Episode: ${options.imdb_id} S${season.toString().padStart(2, '0')}E${episode.toString().padStart(2, '0')}`;
} }
// Build options HTML // Build options HTML
@@ -910,7 +920,10 @@ function showEnhancedEditModal(mediaType, options, currentDateadded, currentSour
if (mediaType === 'movie') { if (mediaType === 'movie') {
title.textContent = `Edit Movie: ${options.imdb_id}`; title.textContent = `Edit Movie: ${options.imdb_id}`;
} else { } else {
title.textContent = `Edit Episode: ${options.imdb_id} S${options.season.toString().padStart(2, '0')}E${options.episode.toString().padStart(2, '0')}`; // Add validation for episode data
const season = options.season || 0;
const episode = options.episode || 0;
title.textContent = `Edit Episode: ${options.imdb_id} S${season.toString().padStart(2, '0')}E${episode.toString().padStart(2, '0')}`;
} }
// Build enhanced edit form with date options // Build enhanced edit form with date options
@@ -1094,6 +1107,13 @@ async function handleEnhancedEditSubmit(event) {
} }
async function editEpisode(imdbId, season, episode, dateadded, source) { async function editEpisode(imdbId, season, episode, dateadded, source) {
// Validate parameters
if (!imdbId || season === undefined || season === null || episode === undefined || episode === null) {
console.error('editEpisode: Invalid parameters:', {imdbId, season, episode});
showToast('Invalid episode parameters', 'error');
return;
}
try { try {
// Load episode options to populate available dates // Load episode options to populate available dates
const options = await apiCall(`/api/episodes/${imdbId}/${season}/${episode}/date-options`); const options = await apiCall(`/api/episodes/${imdbId}/${season}/${episode}/date-options`);
@@ -1276,6 +1296,13 @@ Analysis:
// Episode deletion functionality // Episode deletion functionality
async function deleteEpisode(imdbId, season, episode) { async function deleteEpisode(imdbId, season, episode) {
// Validate parameters
if (!imdbId || season === undefined || season === null || episode === undefined || episode === null) {
console.error('deleteEpisode: Invalid parameters:', {imdbId, season, episode});
showToast('Invalid episode parameters', 'error');
return;
}
const episodeStr = `S${season.toString().padStart(2, '0')}E${episode.toString().padStart(2, '0')}`; const episodeStr = `S${season.toString().padStart(2, '0')}E${episode.toString().padStart(2, '0')}`;
// Confirmation dialog // Confirmation dialog
@@ -1284,7 +1311,7 @@ async function deleteEpisode(imdbId, season, episode) {
} }
try { try {
const response = await fetch(`/database/episode/${imdbId}/${season}/${episode}`, { const response = await fetch(`/api/episodes/${imdbId}/${season}/${episode}`, {
method: 'DELETE', method: 'DELETE',
headers: { headers: {
'Content-Type': 'application/json' 'Content-Type': 'application/json'
@@ -1327,7 +1354,7 @@ async function deleteMovie(imdbId) {
} }
try { try {
const response = await fetch(`/database/movie/${imdbId}`, { const response = await fetch(`/api/movies/${imdbId}`, {
method: 'DELETE', method: 'DELETE',
headers: { headers: {
'Content-Type': 'application/json' 'Content-Type': 'application/json'