|
@@ -88,14 +88,18 @@ const cleanupCompletedMaps = async () => {
|
|
|
const pack = await getPack(map.id);
|
|
const pack = await getPack(map.id);
|
|
|
|
|
|
|
|
if (pack) {
|
|
if (pack) {
|
|
|
- const status = await pack.status();
|
|
|
|
|
-
|
|
|
|
|
- if (
|
|
|
|
|
- status &&
|
|
|
|
|
- (status.percentage === 100 ||
|
|
|
|
|
- status.completedResourceCount === status.requiredResourceCount)
|
|
|
|
|
- ) {
|
|
|
|
|
- markPackAsCompleted(map.id);
|
|
|
|
|
|
|
+ try {
|
|
|
|
|
+ const status = await pack.status();
|
|
|
|
|
+
|
|
|
|
|
+ if (
|
|
|
|
|
+ status &&
|
|
|
|
|
+ (status.percentage === 100 ||
|
|
|
|
|
+ status.completedResourceCount === status.requiredResourceCount)
|
|
|
|
|
+ ) {
|
|
|
|
|
+ markPackAsCompleted(map.id);
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (statusError) {
|
|
|
|
|
+ console.warn(`Pack ${map.id} is invalid, skipping cleanup.`);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -242,25 +246,39 @@ const resumePackDownload = async (name: string, progressCallback?: any, errorCal
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (pack) {
|
|
if (pack) {
|
|
|
- const status = await pack.status();
|
|
|
|
|
- if (
|
|
|
|
|
- status &&
|
|
|
|
|
- (status.percentage === 100 ||
|
|
|
|
|
- status.completedResourceCount === status.requiredResourceCount)
|
|
|
|
|
- ) {
|
|
|
|
|
- markPackAsCompleted(name);
|
|
|
|
|
- return;
|
|
|
|
|
|
|
+ try {
|
|
|
|
|
+ const status = await pack.status();
|
|
|
|
|
+ if (
|
|
|
|
|
+ status &&
|
|
|
|
|
+ (status.percentage === 100 ||
|
|
|
|
|
+ status.completedResourceCount === status.requiredResourceCount)
|
|
|
|
|
+ ) {
|
|
|
|
|
+ markPackAsCompleted(name);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (statusError) {
|
|
|
|
|
+ console.warn(`Pack ${name} status() failed, will re-create.`);
|
|
|
|
|
+ pack = null;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- subscribeToPackProgress(name, progressCallbacks[name], errorCallback);
|
|
|
|
|
|
|
+ if (pack) {
|
|
|
|
|
+ subscribeToPackProgress(name, progressCallbacks[name], errorCallback);
|
|
|
|
|
|
|
|
- await pack.resume();
|
|
|
|
|
|
|
+ try {
|
|
|
|
|
+ await pack.resume();
|
|
|
|
|
+ } catch (resumeError) {
|
|
|
|
|
+ console.warn(`Pack ${name} resume() failed, will re-create.`);
|
|
|
|
|
+ pack = null;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- updateMapMetadata(name, {
|
|
|
|
|
- status: 'downloading',
|
|
|
|
|
- isPaused: false
|
|
|
|
|
- });
|
|
|
|
|
- return;
|
|
|
|
|
|
|
+ if (pack) {
|
|
|
|
|
+ updateMapMetadata(name, {
|
|
|
|
|
+ status: 'downloading',
|
|
|
|
|
+ isPaused: false
|
|
|
|
|
+ });
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const mapsString = storage.getString(OFFLINE_MAPS_KEY);
|
|
const mapsString = storage.getString(OFFLINE_MAPS_KEY);
|
|
@@ -329,7 +347,7 @@ const resumeAllPendingDownloads = async () => {
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-const updateMapMetadata = (id, updates) => {
|
|
|
|
|
|
|
+export const updateMapMetadata = (id, updates) => {
|
|
|
try {
|
|
try {
|
|
|
const mapsString = storage.getString(OFFLINE_MAPS_KEY);
|
|
const mapsString = storage.getString(OFFLINE_MAPS_KEY);
|
|
|
const maps = mapsString ? JSON.parse(mapsString) : [];
|
|
const maps = mapsString ? JSON.parse(mapsString) : [];
|