[sushi] text: load the text buffer from JS



commit 3a5cb89e48a5f686557166977dfae68f223f0996
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Mon Jun 17 15:40:24 2019 -0700

    text: load the text buffer from JS
    
    We don't need to use SushiTextLoader anymore to accomplish this.

 src/libsushi/meson.build         |   2 -
 src/libsushi/sushi-text-loader.c | 307 ---------------------------------------
 src/libsushi/sushi-text-loader.h |  40 -----
 src/ui/mainWindow.js             |   2 +-
 src/viewers/text.js              |  41 ++++--
 5 files changed, 28 insertions(+), 364 deletions(-)
---
diff --git a/src/libsushi/meson.build b/src/libsushi/meson.build
index 3a3ca39..c43d4d6 100644
--- a/src/libsushi/meson.build
+++ b/src/libsushi/meson.build
@@ -6,7 +6,6 @@ libsushi_c = [
   'sushi-media-bin.c',
   'sushi-pdf-loader.c',
   'sushi-sound-player.c',
-  'sushi-text-loader.c',
   'sushi-utils.c',
 ]
 
@@ -18,7 +17,6 @@ libsushi_headers = [
   'sushi-media-bin.h',
   'sushi-pdf-loader.h',
   'sushi-sound-player.h',
-  'sushi-text-loader.h',
   'sushi-utils.h',
 ]
 
diff --git a/src/ui/mainWindow.js b/src/ui/mainWindow.js
index 87c2304..e24b717 100644
--- a/src/ui/mainWindow.js
+++ b/src/ui/mainWindow.js
@@ -219,7 +219,7 @@ var MainWindow = GObject.registerClass(class MainWindow extends Gtk.Window {
         }
 
         let klass = MimeHandler.getKlass(fileInfo.get_content_type());
-        this._renderer = new klass(this.file);
+        this._renderer = new klass(this.file, fileInfo);
         this._renderer.show_all();
         this._renderer.expand = true;
         this._embed.add(this._renderer);
diff --git a/src/viewers/text.js b/src/viewers/text.js
index bed0960..5d10a2a 100644
--- a/src/viewers/text.js
+++ b/src/viewers/text.js
@@ -23,7 +23,7 @@
  *
  */
 
-const {Gdk, Gio, GLib, GObject, Gtk, GtkSource, Sushi} = imports.gi;
+const {Gdk, Gio, GLib, GObject, Gtk, GtkSource} = imports.gi;
 
 const Renderer = imports.ui.renderer;
 const Utils = imports.ui.utils;
@@ -53,16 +53,15 @@ var Klass = GObject.registerClass({
                                          false)
     },
 }, class TextRenderer extends Gtk.ScrolledWindow {
-    _init(file) {
+    _init(file, fileInfo) {
         super._init();
 
-        let textLoader = new Sushi.TextLoader();
-        textLoader.connect('loaded', this._onBufferLoaded.bind(this));
-        textLoader.uri = file.get_uri();
-
-        this._view = new GtkSource.View({ editable: false,
+        let buffer = this._createBuffer(file, fileInfo);
+        this._view = new GtkSource.View({ buffer: buffer,
+                                          editable: false,
                                           cursor_visible: false,
-                                          monospace: true });
+                                          monospace: true,
+                                          show_line_numbers: !!buffer.language });
         this._view.set_can_focus(false);
         this._view.connect('button-press-event', (view, event) => {
             let [, button] = event.get_button();
@@ -76,17 +75,31 @@ var Klass = GObject.registerClass({
         this.isReady();
     }
 
-    _onBufferLoaded(loader, buffer) {
-        buffer.highlight_syntax = true;
-
+    _createBuffer(file, fileInfo) {
+        let buffer = new GtkSource.Buffer();
         let styleManager = GtkSource.StyleSchemeManager.get_default();
         let geditScheme = _getGeditScheme();
         let scheme = styleManager.get_scheme(geditScheme);
         buffer.set_style_scheme(scheme);
 
-        this._view.set_buffer(buffer);
-        if (buffer.get_language())
-            this._view.set_show_line_numbers(true);
+        let langManager = GtkSource.LanguageManager.get_default();
+        let language = langManager.guess_language(file.get_basename(),
+                                                  fileInfo.get_content_type());
+        if (language)
+            buffer.set_language(language);
+
+        let sourceFile = new GtkSource.File({ location: file });
+        let loader = new GtkSource.FileLoader({ buffer: buffer,
+                                                file: sourceFile });
+        loader.load_async(0, null, null, (loader, result) => {
+            try {
+                loader.load_finish(result);
+            } catch (e) {
+                logError(e, `Unable to load the text file at ${loader.location.get_uri()}`);
+            }
+        });
+
+        return buffer;
     }
 
     get moveOnClick() {


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