Просмотр исходного кода

Fix bug With selected image always beeing displayed on top of the others

isundil 2 лет назад
Родитель
Сommit
5488c177c8
4 измененных файлов с 32 добавлено и 18 удалено
  1. 3 0
      model/mediaService.js
  2. 0 1
      src/libraryManager.js
  3. 4 2
      static/public/js/medias.js
  4. 25 15
      static/public/js/uiMedia.js

+ 3 - 0
model/mediaService.js

@@ -1,5 +1,6 @@
 
 const path = require('path');
+const fs = require('fs');
 
 function Media()
 {
@@ -25,6 +26,8 @@ MediaStruct.prototype.pushTag = function(tag) {
 }
 
 MediaStruct.prototype.HaveAccess = function(accessList) {
+    if (!fs.existsSync(this.path))
+        return false;
     // FIXME
     return true;
 }

+ 0 - 1
src/libraryManager.js

@@ -13,7 +13,6 @@ function LibraryManager() {
 
 LibraryManager.prototype.push = function(path) {
     this.libraries.push(new Library(path));
-    // FIXME remove from db file that does not exists any more
 }
 
 LibraryManager.prototype.updateLibraries = async function(dbHelper) {

+ 4 - 2
static/public/js/medias.js

@@ -64,8 +64,10 @@ class MediaStorage extends EventTarget
         }
         for (let i of result)
             this.dispatchEvent(new CustomEvent("newMedia", { detail: i }));
-        if (reorder)
-            console.log("Warning: unordered databank ! Need to reorder"); // FIXME
+        if (reorder) {
+            this.medias.sort((a, b) => b.date.getTime() - a.date.getTime());
+            this.dispatchEvent(new CustomEvent("rebuildMedia"));
+        }
     }
 
     async getMedia(md5sum) {

+ 25 - 15
static/public/js/uiMedia.js

@@ -3,7 +3,6 @@ $(() => {
     function buildThumbnail(mediaItem) {
         if (mediaItem.ui)
             return mediaItem.ui;
-        let root = document.createDocumentFragment();
         let img = document.createElement("img");
         let container = document.createElement("li");
         let loadingImg = document.createElement("div");
@@ -27,9 +26,8 @@ $(() => {
         container.addEventListener("click", () => {
             document.location.hash = mediaItem.md5sum;
         });
-        root.appendChild(container);
         return mediaItem.ui = {
-            root: root,
+            root: container,
             img: img
         };
     }
@@ -46,22 +44,34 @@ $(() => {
         return result;
     }
 
-    MediaStorage.Instance.addEventListener("newMedia", (evt) => {
-        buildThumbnail(evt.detail);
-        if (!evt.detail.ui)
+    function redraw(container, media) {
+        buildThumbnail(media);
+        if (!media.ui)
             return;
-        let container = document.getElementById('pch-mediaList');
-
-        let yearUpdated = !container.dataset.lastItemYear || container.dataset.lastItemYear != evt.detail.date.getUTCFullYear();
+        let yearUpdated = !container.dataset.lastItemYear || container.dataset.lastItemYear != media.date.getUTCFullYear();
         if (yearUpdated) {
-            container.appendChild(buildYear(evt.detail.date));
-            container.dataset.lastItemYear = evt.detail.date.getUTCFullYear();
+            container.appendChild(buildYear(media.date));
+            container.dataset.lastItemYear = media.date.getUTCFullYear();
         }
-        if (yearUpdated || container.dataset.lastItemMonth === undefined || container.dataset.lastItemMonth != evt.detail.date.getUTCMonth()) {
-            container.appendChild(buildMonth(evt.detail.date));
-            container.dataset.lastItemMonth = evt.detail.date.getUTCMonth();
+        if (yearUpdated || container.dataset.lastItemMonth === undefined || container.dataset.lastItemMonth != media.date.getUTCMonth()) {
+            container.appendChild(buildMonth(media.date));
+            container.dataset.lastItemMonth = media.date.getUTCMonth();
         }
-        container.appendChild(evt.detail.ui.root);
+        container.appendChild(media.ui.root);
+    }
+
+    MediaStorage.Instance.addEventListener("rebuildMedia", (evt) => {
+        let newContainer = document.getElementById('pch-mediaList');
+        newContainer.textContent = '';
+        newContainer.dataset.lastItemYear = null;
+        newContainer.dataset.lastItemMonth = null;
+        for (let i of MediaStorage.Instance.medias)
+            redraw(newContainer, i);
+    });
+
+    MediaStorage.Instance.addEventListener("newMedia", (evt) => {
+        let container = document.getElementById('pch-mediaList');
+        redraw(container, evt.detail);
     });
 
     function _displayMediaFullPage(fileName, imgUrl, metaData, downloadLink) {