Release v1.3.0: Multi-source downloads, audio analyzer resilience, mobile improvements
Major Features: - Multi-source download system (Soulseek/Lidarr with fallback) - Configurable enrichment speed control (1-5x) - Mobile touch drag support for seek sliders - iOS PWA media controls (Control Center, Lock Screen) - Artist name alias resolution via Last.fm - Circuit breaker pattern for audio analysis Critical Fixes: - Audio analyzer stability (non-ASCII, BrokenProcessPool, OOM) - Discovery system race conditions and import failures - Radio decade categorization using originalYear - LastFM API response normalization - Mood bucket infinite loop prevention Security: - Bull Board admin authentication - Lidarr webhook signature verification - JWT token expiration and refresh - Encryption key validation on startup Closes #2, #6, #9, #13, #21, #26, #31, #34, #35, #37, #40, #43
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import axios, { AxiosInstance } from "axios";
|
||||
import { logger } from "../utils/logger";
|
||||
import { redisClient } from "../utils/redis";
|
||||
|
||||
interface WikidataResult {
|
||||
@@ -31,7 +32,7 @@ class WikidataService {
|
||||
return JSON.parse(cached);
|
||||
}
|
||||
} catch (err) {
|
||||
console.warn("Redis get error:", err);
|
||||
logger.warn("Redis get error:", err);
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -39,7 +40,7 @@ class WikidataService {
|
||||
const wikidataId = await this.getWikidataIdFromMBID(mbid);
|
||||
|
||||
if (!wikidataId) {
|
||||
console.log(`No Wikidata entry found for ${artistName}`);
|
||||
logger.debug(`No Wikidata entry found for ${artistName}`);
|
||||
return {};
|
||||
}
|
||||
|
||||
@@ -59,12 +60,12 @@ class WikidataService {
|
||||
JSON.stringify(result)
|
||||
);
|
||||
} catch (err) {
|
||||
console.warn("Redis set error:", err);
|
||||
logger.warn("Redis set error:", err);
|
||||
}
|
||||
|
||||
return result;
|
||||
} catch (error) {
|
||||
console.error(`Wikidata fetch failed for ${artistName}:`, error);
|
||||
logger.error(`Wikidata fetch failed for ${artistName}:`, error);
|
||||
return {};
|
||||
}
|
||||
}
|
||||
@@ -116,7 +117,7 @@ class WikidataService {
|
||||
|
||||
return summaryResponse.data.extract;
|
||||
} catch (error) {
|
||||
console.error(
|
||||
logger.error(
|
||||
`Failed to get Wikipedia summary for ${wikidataId}:`,
|
||||
error
|
||||
);
|
||||
@@ -152,7 +153,7 @@ class WikidataService {
|
||||
|
||||
return url;
|
||||
} catch (error) {
|
||||
console.error(
|
||||
logger.error(
|
||||
`Failed to get Wikidata image for ${wikidataId}:`,
|
||||
error
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user