Skip to content

Commit

Permalink
[ADD] file list save for webkit dir
Browse files Browse the repository at this point in the history
  • Loading branch information
Rishabhg71 committed Nov 4, 2023
1 parent 40b44ce commit c74e04d
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 11 deletions.
26 changes: 19 additions & 7 deletions www/js/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -1370,10 +1370,15 @@ function displayFileSelect () {
if (!isFireFoxOsNativeFileApiAvailable) {
document.getElementById('archiveList').addEventListener('change', async function (e) {
// handle zim selection from dropdown if multiple files are loaded via webkitdirectory or filesystem api
localStorage.setItem('previousZimFileName', e.target.value);
if (params.isFileSystemApiSupported) {
const files = await abstractFilesystemAccess.getSelectedZimFromCache(e.target.value)
setLocalArchiveFromFileList(files);
} else {
if (webKitFileList === null) {
document.getElementById('folderSelect').click();
return;
}
const files = abstractFilesystemAccess.getSelectedZimFromWebkitList(webKitFileList, e.target.value)
setLocalArchiveFromFileList(files);
}
Expand All @@ -1391,12 +1396,19 @@ function displayFileSelect () {
document.getElementById('folderSelect').addEventListener('change', async function (e) {
e.preventDefault();
const filenames = [];
const previousZimFile = []
const lastFilename = localStorage.getItem('previousZimFileName');
const filenameWithoutExtension = lastFilename.replace(/\.zim\w\w$/i, '');
const regex = new RegExp(`\\${filenameWithoutExtension}.zim\\w\\w$`, 'i');
for (const file of e.target.files) {
filenames.push(file.name);
if (regex.test(file.name) || file.name === lastFilename) previousZimFile.push(file);
}
webKitFileList = e.target.files;
// populateDropDownListOfArchives(filenames);
await abstractFilesystemAccess.updateZimDropdownOptions(filenames, '');
localStorage.setItem('zimFilenames', filenames.join('|'));
// will load the old file if the selected folder contains the same file
if (previousZimFile.length !== 0) setLocalArchiveFromFileList(previousZimFile);
await abstractFilesystemAccess.updateZimDropdownOptions(filenames, previousZimFile.length !== 0 ? lastFilename : '');
})
}
if (params.isFileSystemApiSupported && !isFireFoxOsNativeFileApiAvailable) {
Expand Down Expand Up @@ -1451,13 +1463,13 @@ async function handleFileDrop (packet) {
// call the `setLocalArchiveFromFileList`
let loadZim = true;

if (params.isFileSystemApiSupported) loadZim = await abstractFilesystemAccess.handleFolderOrFileDropViaFileSystemAPI(packet)
// no previous file will be loaded in case of FileSystemApi
if (params.isFileSystemApiSupported) loadZim = await abstractFilesystemAccess.handleFolderOrFileDropViaFileSystemAPI(packet);
else if (params.isWebkitDirApiSupported) {
const ret = await abstractFilesystemAccess.handleFolderOrFileDropViaWebkit(packet)
loadZim = ret.loadZim
webKitFileList = ret.files
const ret = await abstractFilesystemAccess.handleFolderOrFileDropViaWebkit(packet);
loadZim = ret.loadZim;
webKitFileList = ret.files;
}

if (loadZim) setLocalArchiveFromFileList(files);
}

Expand Down
9 changes: 5 additions & 4 deletions www/js/lib/abstractFilesystemAccess.js
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ async function updateZimDropdownOptions (files, selectedFile) {
const select = document.getElementById('archiveList');
let options = '';
let count = 0;
if (files.length !== 0) options += `<option value="">${translateUI.t('configure-select-file-first-option')}</option>`;
if (files.length !== 0) options += `<option value="" disabled>${translateUI.t('configure-select-file-first-option')}</option>`;

files.forEach((fileName) => {
if (fileName.endsWith('.zim') || fileName.endsWith('.zimaa')) {
Expand Down Expand Up @@ -166,7 +166,7 @@ function getSelectedZimFromCache (selectedFilename) {
return new Promise((resolve, _reject) => {
cache.idxDB('zimFiles', async function (fileOrDirHandle) {
// Left it here for debugging purposes as its sometimes asking for permission even when its granted
console.debug('FileHandle and Permission', fileOrDirHandle, fileOrDirHandle.queryPermission())
console.debug('FileHandle and Permission', fileOrDirHandle, await fileOrDirHandle.queryPermission())
if ((await fileOrDirHandle.queryPermission()) !== 'granted') await fileOrDirHandle.requestPermission();

if (fileOrDirHandle.kind === 'directory') {
Expand Down Expand Up @@ -217,7 +217,7 @@ function loadPreviousZimFile () {
// If we call `updateZimDropdownOptions` without any delay it will run before the internationalization is initialized
// It's a bit hacky but it works and I am not sure if there is any other way ATM
setTimeout(() => {
if (window.params.isFileSystemApiSupported) {
if (window.params.isFileSystemApiSupported || window.params.isWebkitDirApiSupported) {
const filenames = localStorage.getItem('zimFilenames');
if (filenames) updateZimDropdownOptions(filenames.split('|'), '');
}
Expand Down Expand Up @@ -268,14 +268,15 @@ async function handleFolderOrFileDropViaWebkit (event) {

var entry = dt.items[0].webkitGetAsEntry();
if (entry.isFile) {
console.log(entry.file);
localStorage.setItem('zimFilenames', [entry.name].join('|'));
await updateZimDropdownOptions([entry.name], entry.name);
return { loadZim: true, files: [entry.file] };
} else if (entry.isDirectory) {
var reader = entry.createReader();
const files = await getFilesFromReader(reader);
const fileNames = [];
files.forEach((file) => fileNames.push(file.name));
localStorage.setItem('zimFilenames', fileNames.join('|'));
await updateZimDropdownOptions(fileNames, '');
return { loadZim: false, files: files };
}
Expand Down

0 comments on commit c74e04d

Please sign in to comment.