[polari] urlPreview: Avoid blocking IO for stat



commit bda7a5a05a8872504d2075d0ccb1ae7d9c636f2b
Author: Florian Müllner <fmuellner gnome org>
Date:   Sat Jul 25 17:29:46 2020 +0200

    urlPreview: Avoid blocking IO for stat
    
    GLib.file_test() is a convenient API, but does blocking IO. As we
    are calling it for every single URL we encounter (either in messages
    or logs), it's better to avoid the blocking and switch to the async
    GIO API.
    
    https://gitlab.gnome.org/GNOME/polari/-/issues/149

 src/urlPreview.js | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)
---
diff --git a/src/urlPreview.js b/src/urlPreview.js
index b818c812..b0bc1472 100644
--- a/src/urlPreview.js
+++ b/src/urlPreview.js
@@ -1,6 +1,8 @@
 /* exported URLPreview */
 const { Gio, GLib, GObject, Gtk, Pango } = imports.gi;
 
+Gio._promisify(Gio._LocalFilePrototype, 'query_info_async', 'query_info_finish');
+
 class Thumbnailer {
     static getDefault() {
         if (!this._singleton)
@@ -23,9 +25,8 @@ class Thumbnailer {
         this._processData(data);
     }
 
-    _processData(data) {
-        let check = GLib.file_test(`${data.filename}`, GLib.FileTest.EXISTS);
-        if (check)
+    async _processData(data) {
+        if (await this._thumbExists(data))
             this._generationDone(data);
         else if (!this._subProc)
             this._generateThumbnail(data);
@@ -57,6 +58,17 @@ class Thumbnailer {
         });
     }
 
+    async _thumbExists(data) {
+        const file = Gio.File.new_for_path(`${data.filename}`);
+        try {
+            await file.query_info_async(Gio.FILE_ATTRIBUTE_STANDARD_TYPE,
+                Gio.FileQueryInfoFlags.NONE, GLib.PRIORITY_DEFAULT, null);
+            return true;
+        } catch (e) {
+            return false;
+        }
+    }
+
     _generateFilename(url) {
         let checksum = GLib.Checksum.new(GLib.ChecksumType.MD5);
         checksum.update(url);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]