Bläddra i källkod

Префикс "file://" заменен на "disk://", т.к. порождается конфликт с браузерным протоколом file://

Book Pauk 4 år sedan
förälder
incheckning
c59f48822c

+ 1 - 2
client/api/reader.js

@@ -181,9 +181,8 @@ class Reader {
             maxUploadFileSize = 10*1024*1024;
             maxUploadFileSize = 10*1024*1024;
         if (file.size > maxUploadFileSize)
         if (file.size > maxUploadFileSize)
             throw new Error(`Размер файла превышает ${maxUploadFileSize} байт`);
             throw new Error(`Размер файла превышает ${maxUploadFileSize} байт`);
-
         let formData = new FormData();
         let formData = new FormData();
-        formData.append('file', file);
+        formData.append('file', file, file.name);
 
 
         const options = {
         const options = {
             headers: {
             headers: {

+ 5 - 1
client/components/Reader/Reader.vue

@@ -846,8 +846,12 @@ class Reader extends Vue {
 
 
         let url = encodeURI(decodeURI(opts.url));
         let url = encodeURI(decodeURI(opts.url));
 
 
+        //TODO: убрать конвертирование 'file://' после 06.2021
+        if (url.length == 71 && url.indexOf('file://') == 0)
+            url = url.replace(/^file/, 'disk');
+
         if ((url.indexOf('http://') != 0) && (url.indexOf('https://') != 0) &&
         if ((url.indexOf('http://') != 0) && (url.indexOf('https://') != 0) &&
-            (url.indexOf('file://') != 0))
+            (url.indexOf('disk://') != 0))
             url = 'http://' + url;
             url = 'http://' + url;
 
 
         // уже просматривается сейчас
         // уже просматривается сейчас

+ 1 - 1
client/components/Reader/RecentBooksPage/RecentBooksPage.vue

@@ -296,7 +296,7 @@ class RecentBooksPage extends Vue {
 
 
     isUrl(url) {
     isUrl(url) {
         if (url)
         if (url)
-            return (url.indexOf('file://') != 0);
+            return (url.indexOf('disk://') != 0);
         else
         else
             return false;
             return false;
     }
     }

+ 1 - 1
client/components/Reader/TextPage/TextPage.vue

@@ -1053,7 +1053,7 @@ class TextPage extends Vue {
 
 
     onStatusBarClick() {
     onStatusBarClick() {
         const url = this.meta.url;
         const url = this.meta.url;
-        if (url && url.indexOf('file://') != 0) {
+        if (url && url.indexOf('disk://') != 0) {
             window.open(url, '_blank');
             window.open(url, '_blank');
         } else {
         } else {
             this.$root.stdDialog.alert('Оригинал недоступен, т.к. файл книги был загружен с локального диска.', ' ', {color: 'info'});
             this.$root.stdDialog.alert('Оригинал недоступен, т.к. файл книги был загружен с локального диска.', ' ', {color: 'info'});

+ 33 - 2
client/components/Reader/share/bookManager.js

@@ -64,8 +64,12 @@ class BookManager {
 
 
             await this.cleanRecentBooks();
             await this.cleanRecentBooks();
 
 
-            if (this.recentRev > 10)
-                await bmRecentStoreOld.clear();
+            //TODO: убрать после 06.2021, когда bmRecentStoreOld устареет
+            {
+                await this.convertFileToDiskPrefix();
+                if (this.recentRev > 10)
+                    await bmRecentStoreOld.clear();
+            }
         } else {//TODO: убрать после 06.2021, когда bmRecentStoreOld устареет
         } else {//TODO: убрать после 06.2021, когда bmRecentStoreOld устареет
             this.recentLast = await bmRecentStoreOld.getItem('recent-last');
             this.recentLast = await bmRecentStoreOld.getItem('recent-last');
             if (this.recentLast) {
             if (this.recentLast) {
@@ -455,6 +459,33 @@ class BookManager {
         return isDel;
         return isDel;
     }
     }
 
 
+    async convertFileToDiskPrefix() {
+        let isConverted = false;
+
+        const newRecent = {};
+        for (let key of Object.keys(this.recent)) {
+            let newKey = key;
+            let newUrl = this.recent[key].url;
+
+            if (newKey.indexOf('66696c65') == 0) {
+                newKey = newKey.replace(/^66696c65/, '6469736b');
+                if (newUrl)
+                    newUrl = newUrl.replace(/^file/, 'disk');
+                isConverted = true;
+            }
+
+            newRecent[newKey] = this.recent[key];
+            newRecent[newKey].key = newKey;
+            if (newUrl)
+                newRecent[newKey].url = newUrl;
+        }
+        if (isConverted) {
+            this.recent = newRecent;
+            await this.recentSetItem(null, true);
+        }
+        return isConverted;
+    }
+
     mostRecentBook() {
     mostRecentBook() {
         if (this.recentLastKey) {
         if (this.recentLastKey) {
             return this.recent[this.recentLastKey];
             return this.recent[this.recentLastKey];

+ 2 - 2
server/core/Reader/ReaderWorker.js

@@ -81,7 +81,7 @@ class ReaderWorker {
             const decompDirname = utils.randomHexString(30);
             const decompDirname = utils.randomHexString(30);
 
 
             //download or use uploaded
             //download or use uploaded
-            if (url.indexOf('file://') != 0) {//download
+            if (url.indexOf('disk://') != 0) {//download
                 const downdata = await this.down.load(url, (progress) => {
                 const downdata = await this.down.load(url, (progress) => {
                     wState.set({progress});
                     wState.set({progress});
                 }, q.abort);
                 }, q.abort);
@@ -214,7 +214,7 @@ class ReaderWorker {
             await fs.remove(file.path);
             await fs.remove(file.path);
         }
         }
 
 
-        return `file://${hash}`;
+        return `disk://${hash}`;
     }
     }
 
 
     async restoreRemoteFile(filename) {
     async restoreRemoteFile(filename) {