Browse Source

Работа над ExternalLibs

Book Pauk 4 years ago
parent
commit
4883b8a190
1 changed files with 52 additions and 12 deletions
  1. 52 12
      client/components/ExternalLibs/ExternalLibs.vue

+ 52 - 12
client/components/ExternalLibs/ExternalLibs.vue

@@ -58,7 +58,7 @@
                     </template>
                 </q-input>
 
-                <q-btn rounded color="green-7" no-caps size="14px" @click="submitUrl">Открыть
+                <q-btn rounded color="green-7" no-caps size="14px" @click="submitUrl" :disabled="!bookUrl">Открыть
                     <q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">Открыть в читалке</q-tooltip>
                 </q-btn>
             </div>
@@ -139,14 +139,31 @@ export default @Component({
         },
         rootLink: function() {
             this.updateSelectedLink();
-            this.updateStartLink();
         },
         selectedLink: function() {
             this.updateStartLink();
         },
         defaultRootLink: function() {
             this.updateBookmarkLink();
-        }
+        },
+        bookUrl: function(newValue) {
+            const value = lu.addProtocol(newValue);
+            const subst = this.makeProxySubst(value, true);
+            if (value != subst) {
+                this.$nextTick(() => {
+                    this.bookUrl = subst;
+                });
+            }
+        },
+        bookmarkLink: function(newValue) {
+            const value = lu.addProtocol(newValue);
+            const subst = this.makeProxySubst(value, true);
+            if (value != subst) {
+                this.$nextTick(() => {
+                    this.bookmarkLink = subst;
+                });
+            }
+        },
     }    
 })
 class ExternalLibs extends Vue {
@@ -176,6 +193,8 @@ class ExternalLibs extends Vue {
             this.fullScreenActive = (document.fullscreenElement !== null);
         });
 
+        this.commitInProgress = false;
+
         //this.commit = this.$store.commit;
         //this.commit('reader/setLibs', rstore.libsDefaults);
     }
@@ -266,6 +285,7 @@ class ExternalLibs extends Vue {
                 case 'hello': this.sendMessage({type: 'mes', data: 'ready'}); break;
             }
         } else if (d.type == 'libs') {
+            this.commitInProgress = false;
             this.ready = true;
             this.libs = _.cloneDeep(d.data);
         } else if (d.type == 'notify') {
@@ -289,7 +309,20 @@ class ExternalLibs extends Vue {
     }
 
     commitLibs(libs) {
-        this.sendMessage({type: 'libs', data: libs});
+        (async() => {
+            let i = 0;
+            while (this.commitInProgress && i < 50) {//1 сек
+                await utils.sleep(20);
+                i++;
+            }
+
+            if (!this.commitInProgress) {
+                this.commitInProgress = true;
+                this.sendMessage({type: 'libs', data: libs});
+            } else {
+                throw new Error('Commit failed');
+            }
+        })();
     }
 
     loadLibs() {
@@ -308,11 +341,17 @@ class ExternalLibs extends Vue {
     doAction(event) {
         switch (event.action) {
             case 'setLibs': this.commitLibs(event.data); break;
-            case 'setRootLink': this.rootLink = event.data; this.rootLinkInput(); break;
+            case 'setRootLink': this.rootLink = event.data; break;
             case 'setSelectedLink': 
-                this.selectedLink = event.data;
-                this.rootLink = lu.getOrigin(this.selectedLink);
-                this.selectedLinkInput();
+                this.rootLink = lu.getOrigin(event.data);
+                this.$nextTick(async() => {
+                    let i = 0;
+                    while (this.commitInProgress && i < 50) {//1 сек
+                        await utils.sleep(20);
+                        i++;
+                    }
+                    this.selectedLink = event.data;
+                });
                 break;
             case 'editBookmark': this.addBookmark('edit', event.data.link, event.data.desc); break;
             case 'addBookmark': this.addBookmark('add'); break;
@@ -425,7 +464,8 @@ class ExternalLibs extends Vue {
         this.$nextTick(() => {
             this.frameVisible = true;
             this.$nextTick(() => {
-                this.$refs.frame.contentWindow.focus();
+                if (this.$refs.frame)
+                    this.$refs.frame.contentWindow.focus();
             });
         });
     }
@@ -439,7 +479,7 @@ class ExternalLibs extends Vue {
         for (const [key, value] of Object.entries(proxySubst)) {
             if (reverse && value == url.substring(0, value.length)) {
                 return key + url.substring(value.length);
-            } else if (key == url.substring(0, key.length)) {
+            } else if (!reverse && key == url.substring(0, key.length)) {
                 return value + url.substring(key.length);
             }
         }
@@ -464,7 +504,7 @@ class ExternalLibs extends Vue {
     submitUrl() {
         if (this.bookUrl) {
             this.sendMessage({type: 'submitUrl', data: {
-                url: this.makeProxySubst(lu.addProtocol(this.bookUrl), true), 
+                url: this.bookUrl,
                 force: true
             }});
             this.bookUrl = '';
@@ -479,7 +519,7 @@ class ExternalLibs extends Vue {
             this.editBookmarkLink = this.bookmarkLink = link;
             this.editBookmarkDesc = this.bookmarkDesc = desc;
         } else {
-            this.bookmarkLink = (this.bookUrl ? this.makeProxySubst(lu.addProtocol(this.bookUrl), true) : '');
+            this.bookmarkLink = this.bookUrl;
             this.bookmarkDesc = '';
         }