mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-03-28 21:38:46 +00:00
fixed cinemeta preinstalled
This commit is contained in:
parent
84689a9ba7
commit
df89c16246
5 changed files with 72 additions and 47 deletions
|
|
@ -1 +1 @@
|
|||
Subproject commit 22ed3a1c96ed2a8adf5bf9f277acd9d8c53c069c
|
||||
Subproject commit b9c6477161cd16f8c3b2c040252186adb73074f3
|
||||
|
|
@ -620,7 +620,8 @@ const PluginsScreen: React.FC = () => {
|
|||
{hasRepository && repositoryUrl && (
|
||||
<View style={[styles.currentRepoContainer, !settings.enableLocalScrapers && styles.disabledContainer]}>
|
||||
<Text style={[styles.currentRepoLabel, !settings.enableLocalScrapers && styles.disabledText]}>Current Repository:</Text>
|
||||
<Text style={[styles.currentRepoUrl, !settings.enableLocalScrapers && styles.disabledText]}>{repositoryUrl}</Text>
|
||||
<Text style={[styles.currentRepoUrl, !settings.enableLocalScrapers && styles.disabledText]}>{localScraperService.getRepositoryName()}</Text>
|
||||
<Text style={[styles.currentRepoUrl, !settings.enableLocalScrapers && styles.disabledText, { fontSize: 12, opacity: 0.7, marginTop: 4 }]}>{repositoryUrl}</Text>
|
||||
</View>
|
||||
)}
|
||||
|
||||
|
|
@ -788,9 +789,9 @@ const PluginsScreen: React.FC = () => {
|
|||
|
||||
<View style={styles.settingRow}>
|
||||
<View style={styles.settingInfo}>
|
||||
<Text style={[styles.settingTitle, !settings.enableLocalScrapers && styles.disabledText]}>Stream Display Mode</Text>
|
||||
<Text style={[styles.settingTitle, !settings.enableLocalScrapers && styles.disabledText]}>Group Plugin Streams</Text>
|
||||
<Text style={[styles.settingDescription, !settings.enableLocalScrapers && styles.disabledText]}>
|
||||
{settings.streamDisplayMode === 'separate' ? 'Show each provider separately' : 'Group all providers under one name'}
|
||||
When enabled, all plugin streams are grouped under "{localScraperService.getRepositoryName()}". When disabled, each plugin shows as a separate provider.
|
||||
</Text>
|
||||
</View>
|
||||
<Switch
|
||||
|
|
@ -845,9 +846,9 @@ const PluginsScreen: React.FC = () => {
|
|||
|
||||
{/* About */}
|
||||
<View style={[styles.section, styles.lastSection]}>
|
||||
<Text style={styles.sectionTitle}>About Local Scrapers</Text>
|
||||
<Text style={styles.sectionTitle}>About Plugins</Text>
|
||||
<Text style={styles.infoText}>
|
||||
Local scrapers are JavaScript modules that can search for streaming links from various sources.
|
||||
Plugins are JavaScript modules that can search for streaming links from various sources.
|
||||
They run locally on your device and can be installed from trusted repositories.
|
||||
</Text>
|
||||
</View>
|
||||
|
|
|
|||
|
|
@ -924,7 +924,7 @@ export const StreamsScreen = () => {
|
|||
|
||||
// Add single grouped plugins chip if there are any plugins
|
||||
if (pluginProviders.length > 0) {
|
||||
filterChips.push({ id: 'grouped-plugins', name: 'Plugins' });
|
||||
filterChips.push({ id: 'grouped-plugins', name: localScraperService.getRepositoryName() });
|
||||
}
|
||||
|
||||
return filterChips;
|
||||
|
|
@ -1028,7 +1028,7 @@ export const StreamsScreen = () => {
|
|||
}
|
||||
if (pluginStreams.length > 0) {
|
||||
sections.push({
|
||||
title: pluginNames.join(', '),
|
||||
title: localScraperService.getRepositoryName(),
|
||||
addonId: 'grouped-plugins',
|
||||
data: pluginStreams
|
||||
});
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ class LocalScraperService {
|
|||
private installedScrapers: Map<string, ScraperInfo> = new Map();
|
||||
private scraperCode: Map<string, string> = new Map();
|
||||
private repositoryUrl: string = '';
|
||||
private repositoryName: string = '';
|
||||
private initialized: boolean = false;
|
||||
|
||||
private constructor() {
|
||||
|
|
@ -175,6 +176,11 @@ class LocalScraperService {
|
|||
return this.repositoryUrl;
|
||||
}
|
||||
|
||||
// Get repository name
|
||||
getRepositoryName(): string {
|
||||
return this.repositoryName || 'Plugins';
|
||||
}
|
||||
|
||||
// Fetch and install scrapers from repository
|
||||
async refreshRepository(): Promise<void> {
|
||||
await this.ensureInitialized();
|
||||
|
|
@ -206,6 +212,11 @@ class LocalScraperService {
|
|||
});
|
||||
const manifest: ScraperManifest = response.data;
|
||||
|
||||
// Store repository name from manifest
|
||||
if (manifest.name) {
|
||||
this.repositoryName = manifest.name;
|
||||
}
|
||||
|
||||
logger.log('[LocalScraperService] getAvailableScrapers - Raw manifest data:', JSON.stringify(manifest, null, 2));
|
||||
logger.log('[LocalScraperService] getAvailableScrapers - Manifest scrapers count:', manifest.scrapers?.length || 0);
|
||||
|
||||
|
|
@ -354,6 +365,11 @@ class LocalScraperService {
|
|||
});
|
||||
const manifest: ScraperManifest = response.data;
|
||||
|
||||
// Store repository name from manifest
|
||||
if (manifest.name) {
|
||||
this.repositoryName = manifest.name;
|
||||
}
|
||||
|
||||
// Return scrapers from manifest, respecting manifest's enabled field
|
||||
const availableScrapers = manifest.scrapers.map(scraperInfo => {
|
||||
const installedScraper = this.installedScrapers.get(scraperInfo.id);
|
||||
|
|
|
|||
|
|
@ -216,46 +216,54 @@ class StremioService {
|
|||
// Ensure Cinemeta is always installed as a pre-installed addon
|
||||
const cinemetaId = 'com.linvo.cinemeta';
|
||||
if (!this.installedAddons.has(cinemetaId)) {
|
||||
const cinemetaManifest: Manifest = {
|
||||
id: cinemetaId,
|
||||
name: 'Cinemeta',
|
||||
version: '3.0.13',
|
||||
description: 'Provides metadata for movies and series from TheTVDB, TheMovieDB, etc.',
|
||||
url: 'https://v3-cinemeta.strem.io',
|
||||
originalUrl: 'https://v3-cinemeta.strem.io/manifest.json',
|
||||
types: ['movie', 'series'],
|
||||
catalogs: [
|
||||
{
|
||||
type: 'movie',
|
||||
id: 'top',
|
||||
name: 'Top Movies',
|
||||
extraSupported: ['search', 'genre', 'skip']
|
||||
},
|
||||
{
|
||||
type: 'series',
|
||||
id: 'top',
|
||||
name: 'Top Series',
|
||||
extraSupported: ['search', 'genre', 'skip']
|
||||
try {
|
||||
const cinemetaManifest = await this.getManifest('https://v3-cinemeta.strem.io/manifest.json');
|
||||
this.installedAddons.set(cinemetaId, cinemetaManifest);
|
||||
logger.log('✅ Cinemeta pre-installed as default addon with full manifest');
|
||||
} catch (error) {
|
||||
logger.error('Failed to fetch Cinemeta manifest, using fallback:', error);
|
||||
// Fallback to minimal manifest if fetch fails
|
||||
const fallbackManifest: Manifest = {
|
||||
id: cinemetaId,
|
||||
name: 'Cinemeta',
|
||||
version: '3.0.13',
|
||||
description: 'Provides metadata for movies and series from TheTVDB, TheMovieDB, etc.',
|
||||
url: 'https://v3-cinemeta.strem.io',
|
||||
originalUrl: 'https://v3-cinemeta.strem.io/manifest.json',
|
||||
types: ['movie', 'series'],
|
||||
catalogs: [
|
||||
{
|
||||
type: 'movie',
|
||||
id: 'top',
|
||||
name: 'Popular',
|
||||
extraSupported: ['search', 'genre', 'skip']
|
||||
},
|
||||
{
|
||||
type: 'series',
|
||||
id: 'top',
|
||||
name: 'Popular',
|
||||
extraSupported: ['search', 'genre', 'skip']
|
||||
}
|
||||
],
|
||||
resources: [
|
||||
{
|
||||
name: 'catalog',
|
||||
types: ['movie', 'series'],
|
||||
idPrefixes: ['tt']
|
||||
},
|
||||
{
|
||||
name: 'meta',
|
||||
types: ['movie', 'series'],
|
||||
idPrefixes: ['tt']
|
||||
}
|
||||
],
|
||||
behaviorHints: {
|
||||
configurable: false
|
||||
}
|
||||
],
|
||||
resources: [
|
||||
{
|
||||
name: 'catalog',
|
||||
types: ['movie', 'series'],
|
||||
idPrefixes: ['tt']
|
||||
},
|
||||
{
|
||||
name: 'meta',
|
||||
types: ['movie', 'series'],
|
||||
idPrefixes: ['tt']
|
||||
}
|
||||
],
|
||||
behaviorHints: {
|
||||
configurable: false
|
||||
}
|
||||
};
|
||||
this.installedAddons.set(cinemetaId, cinemetaManifest);
|
||||
logger.log('✅ Cinemeta pre-installed as default addon');
|
||||
};
|
||||
this.installedAddons.set(cinemetaId, fallbackManifest);
|
||||
logger.log('✅ Cinemeta pre-installed with fallback manifest');
|
||||
}
|
||||
}
|
||||
|
||||
// Load addon order if exists
|
||||
|
|
|
|||
Loading…
Reference in a new issue