diff --git a/App.tsx b/App.tsx
index 5b956af..f9c649c 100644
--- a/App.tsx
+++ b/App.tsx
@@ -107,10 +107,8 @@ const ThemedApp = () => {
const onboardingCompleted = await AsyncStorage.getItem('hasCompletedOnboarding');
setHasCompletedOnboarding(onboardingCompleted === 'true');
- // Initialize update service (skip on Android to prevent update checks)
- if (Platform.OS !== 'android') {
- await UpdateService.initialize();
- }
+ // Initialize update service
+ await UpdateService.initialize();
// Initialize memory monitoring service to prevent OutOfMemoryError
memoryMonitorService; // Just accessing it starts the monitoring
@@ -170,16 +168,14 @@ const ThemedApp = () => {
{!isAppReady && }
{shouldShowApp && }
- {Platform.OS === 'ios' && (
-
- )}
+
= ({
return null;
}
- // Completely disable popup on Android
- if (Platform.OS === 'android') {
- return null;
- }
-
// iOS implementation with full features
return (
{
const checkForUpdates = useCallback(async (forceCheck = false) => {
try {
- // Skip update checks on Android to prevent OTA checks
- if (Platform.OS === 'android') {
- return;
- }
// Check if user has dismissed the popup for this version
const dismissedVersion = await AsyncStorage.getItem(UPDATE_POPUP_STORAGE_KEY);
@@ -119,10 +115,6 @@ export const useUpdatePopup = (): UseUpdatePopupReturn => {
// Handle startup update check results
useEffect(() => {
- // Skip startup update check registration on Android
- if (Platform.OS === 'android') {
- return;
- }
const handleStartupUpdateCheck = (updateInfo: UpdateInfo) => {
console.log('UpdatePopup: Received startup update check result', updateInfo);
@@ -130,16 +122,7 @@ export const useUpdatePopup = (): UseUpdatePopupReturn => {
setHasCheckedOnStartup(true);
if (updateInfo.isAvailable) {
- if (Platform.OS === 'android') {
- // Set badge and show a toast
- (async () => {
- try { await AsyncStorage.setItem(UPDATE_BADGE_KEY, 'true'); } catch {}
- })();
- toastService.showInfo('Update Available', 'Update available — go to Settings → App Updates');
- setShowUpdatePopup(false);
- } else {
- setShowUpdatePopup(true);
- }
+ setShowUpdatePopup(true);
}
};
@@ -187,10 +170,6 @@ export const useUpdatePopup = (): UseUpdatePopupReturn => {
return; // Already checked on startup
}
- // Skip auto-check on Android to prevent OTA checks
- if (Platform.OS === 'android') {
- return;
- }
// Add a small delay to ensure the app is fully loaded
const timer = setTimeout(() => {
diff --git a/src/screens/HomeScreen.tsx b/src/screens/HomeScreen.tsx
index 2363171..c868cd7 100644
--- a/src/screens/HomeScreen.tsx
+++ b/src/screens/HomeScreen.tsx
@@ -353,7 +353,7 @@ const HomeScreen = () => {
await AsyncStorage.removeItem('showLoginHintToastOnce');
hideTimer = setTimeout(() => setHintVisible(false), 2000);
// Also show a global toast for consistency across screens
- showInfo('Sign In Available', 'You can sign in anytime from Settings → Account');
+ // showInfo('Sign In Available', 'You can sign in anytime from Settings → Account');
}
} catch {}
})();
diff --git a/src/services/localScraperService.ts b/src/services/localScraperService.ts
index bbd37f9..3de4b8e 100644
--- a/src/services/localScraperService.ts
+++ b/src/services/localScraperService.ts
@@ -864,16 +864,31 @@ class LocalScraperService {
async getStreams(type: string, tmdbId: string, season?: number, episode?: number, callback?: ScraperCallback): Promise {
await this.ensureInitialized();
+ // Get list of installed scrapers at the beginning for callback invocations
+ const installedScrapers = Array.from(this.installedScrapers.values());
+
+ // Helper function to invoke callback for all installed scrapers with empty results
+ const invokeCallbacksForAllScrapers = (reason: string) => {
+ if (callback && installedScrapers.length > 0) {
+ logger.log(`[LocalScraperService] Invoking callbacks for ${installedScrapers.length} scrapers due to: ${reason}`);
+ installedScrapers.forEach(scraper => {
+ callback([], scraper.id, scraper.name, null);
+ });
+ }
+ };
+
// Check if local scrapers are enabled
const userSettings = await this.getUserScraperSettings();
if (!userSettings.enableLocalScrapers) {
logger.log('[LocalScraperService] Local scrapers are disabled');
+ invokeCallbacksForAllScrapers('local scrapers disabled');
return;
}
// If no repository is configured, return early
if (!this.repositoryUrl) {
logger.log('[LocalScraperService] No repository URL configured');
+ invokeCallbacksForAllScrapers('no repository URL configured');
return;
}
@@ -884,6 +899,7 @@ class LocalScraperService {
await this.performRepositoryRefresh();
} catch (error) {
logger.error('[LocalScraperService] Failed to refresh repository for getStreams:', error);
+ invokeCallbacksForAllScrapers('repository refresh failed');
return;
}
}
@@ -899,6 +915,7 @@ class LocalScraperService {
if (enabledScrapers.length === 0) {
logger.log('[LocalScraperService] No enabled scrapers found for type:', type);
+ // No callback needed here since this is after filtering - scrapers weren't added to UI yet
return;
}
diff --git a/src/services/stremioService.ts b/src/services/stremioService.ts
index bf3cf27..6dbd108 100644
--- a/src/services/stremioService.ts
+++ b/src/services/stremioService.ts
@@ -1171,7 +1171,19 @@ class StremioService {
}
});
} else {
- logger.log('🔧 [getStreams] Local scrapers not executed for this ID/type; continuing with Stremio addons');
+ logger.log('🔧 [getStreams] Local scrapers not executed - no TMDB ID available');
+ // Notify UI that local scrapers won't execute by calling their callbacks
+ try {
+ const installedScrapers = await localScraperService.getInstalledScrapers();
+ const enabledScrapers = installedScrapers.filter(s => s.enabled);
+ enabledScrapers.forEach(scraper => {
+ if (callback) {
+ callback([], scraper.id, scraper.name, null);
+ }
+ });
+ } catch (error) {
+ logger.warn('🔧 [getStreams] Failed to notify UI about skipped local scrapers:', error);
+ }
}
}
}