Эх сурвалжийг харах

Tweaks and fixes from writing first real production PPUB in the editor

Billy Barrow 2 жил өмнө
parent
commit
fd987a5cfb

+ 2 - 0
README.md

@@ -16,6 +16,8 @@ It is still a work in progress, and also depends on some of my other home grown
 
 ## What is still to come
 
+- Spellchecking
+- Ability to generate PPIX files (PPub IndeX) once LibPpub has the functionality.
 - Templated creation of files that don't already exist in a PPUB.
 - Editing PPVM (PPub Video Manifest) files.
 - Guided creation of PPVM based PPUBs (PPUB files containing video).

+ 14 - 15
src/Editor.vala

@@ -10,7 +10,6 @@ namespace Publicate {
 
         private Leaflet leaflet;
 
-        private Ppub.Publication publication;
         private File publication_file;
         private ViewerWindow window;
 
@@ -90,14 +89,14 @@ namespace Publicate {
 
         public async void load_ppub(File file) throws Error {
 
-            publication = new Ppub.Publication(file.get_path());
+            window.publication = new Ppub.Publication(file.get_path());
             publication_file = file;
 
-            header_title.title = publication.metadata.title ?? "Untitled PPUB";
-            header_title.subtitle = publication.metadata.author_name ?? "";
+            header_title.title = window.publication.metadata.title ?? "Untitled PPUB";
+            header_title.subtitle = window.publication.metadata.author_name ?? "";
             window.title = header_title.title + " - Publicate!";
 
-            file_explorer.set_assets(publication.assets);
+            file_explorer.set_assets(window.publication.assets);
 
         }
 
@@ -159,7 +158,7 @@ namespace Publicate {
         }
 
         private void add_editor(Editors.EditorWidget editor, Ppub.Asset asset) {
-            editor.load_asset(publication, asset);
+            editor.load_asset(window.publication, asset);
             open_editors.set(asset.name, editor);
             tab_view.selected_page = editor.tab_page;
         }
@@ -183,14 +182,14 @@ namespace Publicate {
             select_file_from_tab();
         }
 
-        private async void save_tab() {
+        public async void save_tab() {
             var current_editor = (Editors.EditorWidget)tab_view.selected_page.child;
-            var to_save = publication.assets.select<Savable>(a => a.name == current_editor.asset_name ? (Savable)current_editor : new SavableAsset(publication, a));
+            var to_save = window.publication.assets.select<Savable>(a => a.name == current_editor.asset_name ? (Savable)current_editor : new SavableAsset(window.publication, a));
             yield save(to_save);
         }
 
         private async void save_all() {
-            var to_save = publication.assets.select<Savable>(get_savable_editor_or_asset);
+            var to_save = window.publication.assets.select<Savable>(get_savable_editor_or_asset);
             yield save(to_save);
         }
 
@@ -201,12 +200,12 @@ namespace Publicate {
                     return (Savable)editor;
                 }
             }
-            return new SavableAsset(publication, asset);
+            return new SavableAsset(window.publication, asset);
         }
 
         private async void save_and_close_tab_page(TabPage page) {
             var editor = (Editors.EditorWidget)page.child;
-            var to_save = publication.assets.select<Savable>(a => a.name == editor.asset_name ? (Savable)editor : new SavableAsset(publication, a));
+            var to_save = window.publication.assets.select<Savable>(a => a.name == editor.asset_name ? (Savable)editor : new SavableAsset(window.publication, a));
             yield save(to_save);
             open_editors.unset(editor.asset_name);
             tab_view.close_page_finish(page, true);
@@ -220,7 +219,7 @@ namespace Publicate {
 
         public async void add_asset (string name, string mimetype, GLib.InputStream stream, Ppub.CompressionInfo compression) {
 
-            var to_save = publication.assets.select<Savable>(a => new SavableAsset(publication, a)).to_sequence();
+            var to_save = window.publication.assets.select<Savable>(a => new SavableAsset(window.publication, a)).to_sequence();
             to_save.add(new SavableNewAsset(name, mimetype, stream, compression));
             yield save(to_save);
             
@@ -277,7 +276,7 @@ namespace Publicate {
         private void update_deletable() {
             // Inhibit deletion of default document or metadata.
             var asset = file_explorer.selected_asset;
-            remove_file_button.sensitive = (asset != null && asset.name != "metadata" && publication.get_default_asset().name != asset.name);
+            remove_file_button.sensitive = (asset != null && asset.name != "metadata" && window.publication.get_default_asset().name != asset.name);
         }
 
         private void delete_file_clicked() {
@@ -299,9 +298,9 @@ namespace Publicate {
         }
 
         private async void delete_file(Ppub.Asset asset) {
-            var to_save = publication.assets
+            var to_save = window.publication.assets
                 .where(a => a.name != asset.name)
-                .select<Savable>(a => new SavableAsset(publication, a)).to_sequence();
+                .select<Savable>(a => new SavableAsset(window.publication, a)).to_sequence();
 
             if(open_editors.has_key(asset.name)) {
                 Editors.EditorWidget editor;

+ 3 - 3
src/Editors/MarkdownEditor.vala

@@ -9,7 +9,6 @@ namespace Publicate.Editors {
         private Box leaflet; // For now, a box
 
         private GtkCommonMark.MarkdownView markdown_view;
-        private Ppub.Publication publication;
         private GtkSource.View text_view;
         private GtkSource.Buffer source_buffer;
         private GtkSource.LanguageManager language_manager;
@@ -98,7 +97,6 @@ namespace Publicate.Editors {
         }
         
         public async void load_asset (Ppub.Publication publication, Ppub.Asset asset) {
-            this.publication = publication;
             markdown_view.buffer.set_text("", 0);
             page.title = asset.name;
             this.asset = asset;
@@ -133,7 +131,7 @@ namespace Publicate.Editors {
                 pixbuf = pixbuf_cache[file];
             }
             else {
-                pixbuf = yield new Gdk.Pixbuf.from_stream_async (publication.read_asset (file), null);
+                pixbuf = yield new Gdk.Pixbuf.from_stream_async (window.publication.read_asset (file), null);
                 pixbuf_cache.set(file, pixbuf);
             }
 
@@ -144,6 +142,8 @@ namespace Publicate.Editors {
                 var ratio = image.get_paintable().get_intrinsic_aspect_ratio ();
                 image.height_request = (int)(wid / ratio);
             });
+
+            image.destroy.connect(() => print("IT gone\n"));
         }
 
 

+ 2 - 3
src/Editors/MetadataEditor.vala

@@ -7,7 +7,6 @@ namespace Publicate.Editors {
 
     public class MetadataEditor : Box, EditorWidget, Savable {
 
-        private Ppub.Publication publication;
         private Ppub.Metadata metadata;
         private Ppub.Asset asset;
         private TabPage page;
@@ -107,7 +106,6 @@ namespace Publicate.Editors {
 
         public async void load_asset (Ppub.Publication publication, Ppub.Asset asset) {
             this.asset = asset;
-            this.publication = publication;
 
             var stream = publication.read_asset (asset.name);
             metadata = new Ppub.Metadata.from_stream (stream);
@@ -155,9 +153,10 @@ namespace Publicate.Editors {
                 metadata.author = process_string(author.text);
             }
 
+            print(@"$(poster.selected_asset)\n");
             metadata.poster = process_string (poster.selected_asset);
             metadata.description = process_string(description.text);
-            metadata.tags = tags.text.split (" ");
+            metadata.tags = tags.text.chug().chomp().split (" ");
             metadata.copyright = process_string(copyright.text);
             metadata.licence = process_string (licence.selected_asset);
 

+ 0 - 2
src/Editors/PlainTextEditor.vala

@@ -6,7 +6,6 @@ namespace Publicate.Editors {
 
     public class PlainTextEditor : Box, EditorWidget, Savable {
 
-        private Ppub.Publication publication;
         private TextView text_view;
         
         private ScrolledWindow scroller;
@@ -58,7 +57,6 @@ namespace Publicate.Editors {
         }
         
         public async void load_asset (Ppub.Publication publication, Ppub.Asset asset) {
-            this.publication = publication;
             this.asset = asset;
 
             text_view.buffer.set_text("", 0);

+ 1 - 1
src/FileChooser.vala

@@ -69,7 +69,7 @@ namespace Publicate {
         }
 
         private void selected(Ppub.Asset? asset) {
-            selected_asset = name;
+            selected_asset = asset.name;
             subtitle = asset.name;
             asset_selected(asset);
         }

+ 6 - 0
src/Window.vala

@@ -9,6 +9,7 @@ namespace Publicate {
         private Stack stack;
         private StartupMenu startup_menu;
         public PpubEditor editor {get; set;}
+        public Ppub.Publication publication {get; set;}
 
         private SimpleAction extract_action;
 
@@ -25,6 +26,11 @@ namespace Publicate {
             stack.add_child(startup_menu);
             stack.add_child(editor);
             stack.transition_type = StackTransitionType.CROSSFADE;
+
+            var save_action = new SimpleAction("save", null);
+            save_action.activate.connect(() => editor.save_tab.begin());
+            add_action(save_action);
+            add_binding_action(Gdk.Key.s, Gdk.ModifierType.CONTROL_MASK, "win.save", "Save current tab");
         }
 
         public async void open_ppub() throws Error {

+ 1 - 1
src/meson.build

@@ -29,7 +29,7 @@ dependencies = [
     dependency('gtk4'),
     dependency('gtkcommonmark'),
     dependency('libppub'),
-    dependency('gtksourceview-5')
+    dependency('gtksourceview-5'),
 ]
 
 executable('publicate', sources, dependencies: dependencies)