Deal better with missing ZIM files in archives folder

Former-commit-id: cb0f588962861a7eb3cec62a6db76667492d6143 [formerly db122e20d28006e45527cdd204c1b2332838163f]
Former-commit-id: 7966663c22f721603396b74b1531ca5e8a756eb5
This commit is contained in:
Jaifroid 2020-01-26 14:36:35 +00:00
parent a2ca63f24b
commit e2b365ba1e
3 changed files with 50 additions and 41 deletions

View File

@ -60,7 +60,7 @@
<TargetPlatformVersion>10.0.18362.0</TargetPlatformVersion> <TargetPlatformVersion>10.0.18362.0</TargetPlatformVersion>
<TargetPlatformMinVersion>10.0.10240.0</TargetPlatformMinVersion> <TargetPlatformMinVersion>10.0.10240.0</TargetPlatformMinVersion>
<MinimumVisualStudioVersion>$(VersionNumberMajor).$(VersionNumberMinor)</MinimumVisualStudioVersion> <MinimumVisualStudioVersion>$(VersionNumberMajor).$(VersionNumberMinor)</MinimumVisualStudioVersion>
<DefaultLanguage>en-gb</DefaultLanguage> <DefaultLanguage>en-GB</DefaultLanguage>
<PackageCertificateKeyFile>KiwixWebApp_StoreKey.pfx</PackageCertificateKeyFile> <PackageCertificateKeyFile>KiwixWebApp_StoreKey.pfx</PackageCertificateKeyFile>
<AppxAutoIncrementPackageRevision>False</AppxAutoIncrementPackageRevision> <AppxAutoIncrementPackageRevision>False</AppxAutoIncrementPackageRevision>
<AppxSymbolPackageEnabled>False</AppxSymbolPackageEnabled> <AppxSymbolPackageEnabled>False</AppxSymbolPackageEnabled>

View File

@ -681,7 +681,7 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'util', 'utf8', 'images', 'cooki
document.getElementById('libraryArea').style.borderColor = ''; document.getElementById('libraryArea').style.borderColor = '';
document.getElementById('libraryArea').style.borderStyle = ''; document.getElementById('libraryArea').style.borderStyle = '';
var currentArchive = document.getElementById('currentArchive'); var currentArchive = document.getElementById('currentArchive');
if (params.packagedFile && params.storedFile && params.storedFile != params.packagedFile) { if (params.packagedFile && params.storedFile && params.storedFile !== params.packagedFile) {
currentArchive.innerHTML = "Currently loaded archive: <b>" + params.storedFile.replace(/\.zim$/i, "") + "</b>"; currentArchive.innerHTML = "Currently loaded archive: <b>" + params.storedFile.replace(/\.zim$/i, "") + "</b>";
currentArchive.style.display = "block"; currentArchive.style.display = "block";
document.getElementById('downloadLinksText').style.display = "none"; document.getElementById('downloadLinksText').style.display = "none";
@ -691,9 +691,17 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'util', 'utf8', 'images', 'cooki
document.getElementById('downloadLinksText').style.display = "block"; document.getElementById('downloadLinksText').style.display = "block";
currentArchive.style.display = "none"; currentArchive.style.display = "none";
} }
//else { // Populate version info
// document.getElementById('rescanStorage').style.display = "none"; var versionSpans = document.getElementsByClassName('version');
//} for (var i = 0; i < versionSpans.length; i++) {
versionSpans[i].innerHTML = i ? params.version : params.version.replace(/\s+.*$/, "");
}
var fileVersionDivs = document.getElementsByClassName('fileVersion');
for (i = 0; i < fileVersionDivs.length; i++) {
fileVersionDivs[i].innerHTML = i ? params.fileVersion.replace(/\s+.+$/, "") : params.fileVersion;
}
document.getElementById('logUpdate').innerHTML = document.getElementById('update').innerHTML.match(/<ul[^>]*>[\s\S]+/i);
document.getElementById('logFeatures').innerHTML = document.getElementById('features').innerHTML;
// Show the selected content in the page // Show the selected content in the page
$('#about').hide(); $('#about').hide();
$('#configuration').hide(); $('#configuration').hide();
@ -1646,26 +1654,35 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'util', 'utf8', 'images', 'cooki
cookies.setItem("lastSelectedArchive", lastSelectedArchive, Infinity); cookies.setItem("lastSelectedArchive", lastSelectedArchive, Infinity);
} }
// Set the localArchive as the last selected (if none has been selected previously, wait for user input) // Set the localArchive as the last selected (if none has been selected previously, wait for user input)
//if (success || comboArchiveList.options.length == 1) {
if (success) { if (success) {
setLocalArchiveFromArchiveList(); setLocalArchiveFromArchiveList();
} else { } else {
// We can't find lastSelectedArchive in the archive list, so let's ask the user to pick it // We can't find lastSelectedArchive in the archive list
//uiUtil.systemAlert(lastSelectedArchive + ' could not be found in the known list of archives!'); // Let's first check if this is a Store UWP/PWA that has a different archive package from that indicated in init.js
var message = '<p>We could not find the archive <b>' + lastSelectedArchive + '</b>!</p><p>Please select its location...</p>'; if (typeof Windows !== 'undefined' && typeof Windows.Storage !== 'undefined' &&
if (typeof Windows !== 'undefined' && typeof Windows.Storage !== 'undefined') params.storedFile === params.packagedFile && cookies.getItem('lastSelectedArchive') !== params.storedFile) {
message += '<p><i>Note:</i> If you drag-drop an archive into this UWP app, then it will have to be dragged again each time you launch the app. Try double-clicking on the archive instead, or select it using the controls on this page.</p>'; // We didn't pick this file previously, so select first one in list
document.getElementById('alert-content').innerHTML = message; params.fileVersion = archiveDirectories[0];
$('#alertModal').off('hide.bs.modal'); params.packagedFile = params.fileVersion;
$('#alertModal').on('hide.bs.modal', function () { params.storedFile = params.fileVersion;
displayFileSelect(); setLocalArchiveFromArchiveList(params.fileVersion);
}); } else {
$('#alertModal').modal({ // It's genuinely no longer available, so let's ask the user to pick it
backdrop: 'static', var message = '<p>We could not find the archive <b>' + lastSelectedArchive + '</b>!</p><p>Please select its location...</p>';
keyboard: true if (typeof Windows !== 'undefined' && typeof Windows.Storage !== 'undefined')
}); message += '<p><i>Note:</i> If you drag-drop an archive into this UWP app, then it will have to be dragged again each time you launch the app. Try double-clicking on the archive instead, or select it using the controls on this page.</p>';
if (document.getElementById('configuration').style.display == 'none') document.getElementById('alert-content').innerHTML = message;
document.getElementById('btnConfigure').click(); $('#alertModal').off('hide.bs.modal');
$('#alertModal').on('hide.bs.modal', function () {
displayFileSelect();
});
$('#alertModal').modal({
backdrop: 'static',
keyboard: true
});
if (document.getElementById('configuration').style.display == 'none')
document.getElementById('btnConfigure').click();
}
} }
} }
} else { } else {
@ -2013,6 +2030,9 @@ define(['jquery', 'zimArchiveLoader', 'uiUtil', 'util', 'utf8', 'images', 'cooki
function loadPackagedArchive() { function loadPackagedArchive() {
// Reload any ZIM files in local storage (whcih the user can't otherwise select with the filepicker) // Reload any ZIM files in local storage (whcih the user can't otherwise select with the filepicker)
if (params.localStorage) { if (params.localStorage) {
// Reset params.packagedFile to its original value, in case we manipulated it previously
params.packagedFile = params.originalPackagedFile;
params.pickedFile = '';
params.storedFile = params.packagedFile || ''; params.storedFile = params.packagedFile || '';
params.pickedFolder = params.localStorage; params.pickedFolder = params.localStorage;
scanUWPFolderforArchives(params.localStorage); scanUWPFolderforArchives(params.localStorage);

View File

@ -33,7 +33,7 @@ var state = {};
var params = {}; var params = {};
params['version'] = "0.9.9.97 Beta"; //DEV: This value is compared to the cookie "version" in order to show first-time info, and the cookie is updated in app.js params['version'] = "0.9.9.97 Beta"; //DEV: This value is compared to the cookie "version" in order to show first-time info, and the cookie is updated in app.js
params['packagedFile'] = "wikipedia_en_ray_charles.zim"; //For packaged Kiwix JS (e.g. with Wikivoyage file), set this to the filename (for split files, give the first chunk *.zimaa) and place file(s) in default storage params['packagedFile'] = "wikipedia_en_ray_charles.zim"; //For packaged Kiwix JS (e.g. with Wikivoyage file), set this to the filename (for split files, give the first chunk *.zimaa) and place file(s) in default storage
params['archivePath'] = "archive"; //The directory containing the packaged archive(s) (relative to app's root directory) params['archivePath'] = "archives"; //The directory containing the packaged archive(s) (relative to app's root directory)
params['fileVersion'] = "wikipedia_en_ray_charles_maxi_2019-08.zim (14-Aug-2019)"; //Use generic name for actual file, and give version here params['fileVersion'] = "wikipedia_en_ray_charles_maxi_2019-08.zim (14-Aug-2019)"; //Use generic name for actual file, and give version here
params['cachedStartPage'] = false; //If you have cached the start page for quick start, give its URI here params['cachedStartPage'] = false; //If you have cached the start page for quick start, give its URI here
params['kiwixDownloadLink'] = "https://download.kiwix.org/zim/"; //Include final slash params['kiwixDownloadLink'] = "https://download.kiwix.org/zim/"; //Include final slash
@ -66,7 +66,8 @@ params['storedFile'] = getCookie('lastSelectedArchive') || params['packagedFile'
params.storedFile = launchArguments ? launchArguments.files[0].name : params.storedFile; params.storedFile = launchArguments ? launchArguments.files[0].name : params.storedFile;
params['storedFilePath'] = getCookie('lastSelectedArchivePath'); params['storedFilePath'] = getCookie('lastSelectedArchivePath');
params.storedFilePath = params.storedFilePath ? decodeURIComponent(params.storedFilePath) : params.archivePath + '/' + params.packagedFile; params.storedFilePath = params.storedFilePath ? decodeURIComponent(params.storedFilePath) : params.archivePath + '/' + params.packagedFile;
params.storedFilePath = launchArguments ? launchArguments.files[0].path || '' : params.storedFilePath; params.storedFilePath = launchArguments ? launchArguments.files[0].path || '' : params.storedFilePath;
params.originalPackagedFile = params.packagedFile;
params['falFileToken'] = params['falFileToken'] || "zimfile"; //UWP support params['falFileToken'] = params['falFileToken'] || "zimfile"; //UWP support
params['falFolderToken'] = params['falFolderToken'] || "zimfilestore"; //UWP support params['falFolderToken'] = params['falFolderToken'] || "zimfilestore"; //UWP support
params['localStorage'] = params['localStorage'] || ""; params['localStorage'] = params['localStorage'] || "";
@ -125,33 +126,21 @@ document.getElementById('hideToolbarsCheck').indeterminate = params.hideToolbars
document.getElementById('hideToolbarsCheck').readOnly = params.hideToolbars === "top"; document.getElementById('hideToolbarsCheck').readOnly = params.hideToolbars === "top";
document.getElementById('hideToolbarsState').innerHTML = (params.hideToolbars === "top" ? "top" : params.hideToolbars ? "both" : "never"); document.getElementById('hideToolbarsState').innerHTML = (params.hideToolbars === "top" ? "top" : params.hideToolbars ? "both" : "never");
var versionSpans = document.getElementsByClassName('version');
for (var i = 0; i < versionSpans.length; i++) {
versionSpans[i].innerHTML = i ? params.version : params.version.replace(/\s+.*$/, "");
}
var fileVersionDivs = document.getElementsByClassName('fileVersion');
for (i = 0; i < fileVersionDivs.length; i++) {
fileVersionDivs[i].innerHTML = i ? params.fileVersion.replace(/\s+.+$/, "") : params.fileVersion;
}
document.getElementById('logUpdate').innerHTML = document.getElementById('update').innerHTML.match(/<ul[^>]*>[\s\S]+/i);
document.getElementById('logFeatures').innerHTML = document.getElementById('features').innerHTML;
//Set up packaged Electron app //Set up packaged Electron app
if (!params.pickedFile && params.storedFile && typeof window.fs !== 'undefined') { if (!params.pickedFile && params.storedFile && typeof window.fs !== 'undefined') {
params.pickedFile = params.storedFile; params.pickedFile = params.storedFile;
} }
//Set up storage types //Set up storage types
if (params.storedFile && typeof Windows !== 'undefined' && typeof Windows.Storage !== 'undefined') { //UWP if (params.storedFile && typeof Windows !== 'undefined' && typeof Windows.Storage !== 'undefined') { //UWP
//DEV change "archives" below if you wish to store local archives in a different location in the installation package Windows.ApplicationModel.Package.current.installedLocation.getFolderAsync(params.archivePath).done(function (folder) {
Windows.ApplicationModel.Package.current.installedLocation.getFolderAsync("archives").done(function (folder) { params.localStorage = folder;
if (folder) params.localStorage = folder;
}, function (err) { }, function (err) {
console.error("This app doesn't appear to have access to local storage!"); console.error("This app doesn't appear to have access to local storage!");
}); });
var futureAccessList = Windows.Storage.AccessCache.StorageApplicationPermissions.futureAccessList; var futureAccessList = Windows.Storage.AccessCache.StorageApplicationPermissions.futureAccessList;
if (futureAccessList.containsItem(params.falFolderToken)) { if (futureAccessList.containsItem(params.falFolderToken)) {
futureAccessList.getFolderAsync(params.falFolderToken).then(function (folder) { futureAccessList.getFolderAsync(params.falFolderToken).done(function (folder) {
if (folder) params.pickedFolder = folder; params.pickedFolder = folder;
}, function (err) { }, function (err) {
console.error("The previously picked folder is no longer accessible: " + err.message); console.error("The previously picked folder is no longer accessible: " + err.message);
}); });
@ -165,7 +154,7 @@ if (params.storedFile && typeof Windows !== 'undefined' && typeof Windows.Storag
if (!params.pickedFile && futureAccessList.containsItem(params.falFileToken)) { if (!params.pickedFile && futureAccessList.containsItem(params.falFileToken)) {
params.pickedFile = ''; params.pickedFile = '';
futureAccessList.getFileAsync(params.falFileToken).done(function (file) { futureAccessList.getFileAsync(params.falFileToken).done(function (file) {
if (file && file.name === params.storedFile) params.pickedFile = file; if (file.name === params.storedFile) params.pickedFile = file;
}, function (err) { }, function (err) {
console.error("The previously picked file is no longer accessible: " + err.message); console.error("The previously picked file is no longer accessible: " + err.message);
}); });