Skip to content

Commit

Permalink
Save thumbnails in archive at /Thumnails
Browse files Browse the repository at this point in the history
  • Loading branch information
Philip-Scott committed Feb 11, 2019
1 parent 07b23f8 commit b79ccd5
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 10 deletions.
2 changes: 1 addition & 1 deletion src/Services/Clipboard.vala
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ public class Spice.Clipboard {
var root_object = Utils.get_json_object (data);
if (root_object == null) return;

if (root_object.has_member ("preview")) {
if (root_object.has_member ("items")) {
manager.new_slide (root_object, true);
} else {
var item = Utils.canvas_item_from_data (root_object, manager.current_slide.canvas);
Expand Down
5 changes: 5 additions & 0 deletions src/Services/FileFormat/ZipArchiveHandler.vala
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,11 @@ public class Spice.Services.ZipArchiveHandler : GLib.Object {
}
}

public File get_file_from_basename (File location, string basename) {
var path = Path.build_filename (location.get_path (), basename);
return File.new_for_path (path);
}

/**
* Get's a random file inside the archive at the location specified
* using a guid-like name.
Expand Down
49 changes: 43 additions & 6 deletions src/Services/Slide.vala
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public class Spice.Slide : Object {
public Canvas canvas;
public Gtk.Image preview;

private File? thumbnail_file = null;
public string preview_data { get; private set; default = ""; }
public string notes { get; set; default = ""; }
public Gtk.StackTransitionType transition { get; set; default = Gtk.StackTransitionType.NONE; }
Expand All @@ -46,8 +47,11 @@ public class Spice.Slide : Object {
item.visible = true;
}

canvas.window.current_file.file_collector.ref_file (thumbnail_file);
to_be_deleted.clear ();
} else {
canvas.window.current_file.file_collector.unref_file (thumbnail_file);

foreach (var widget in canvas.get_children ()) {
if (widget is CanvasItem && widget.visible) {
CanvasItem item = (CanvasItem) widget;
Expand Down Expand Up @@ -103,11 +107,33 @@ public class Spice.Slide : Object {
private void load_data () {
if (save_data == null) return;

preview_data = save_data.get_string_member ("preview");
if (preview_data != null && preview_data != "") {
var pixbuf = Utils.base64_to_pixbuf (preview_data);
if (save_data.has_member ("preview")) {
preview_data = save_data.get_string_member ("preview");

if (preview_data != null && preview_data != "") {
var pixbuf = Utils.base64_to_pixbuf (preview_data);

preview.set_from_pixbuf (pixbuf.scale_simple (SlideList.WIDTH, SlideList.HEIGHT, Gdk.InterpType.BILINEAR));
}
} else if (save_data.has_member ("thumbnail")) {
print ("Loading thumbnail file...\n");
var thumbnail_basename = save_data.get_string_member ("thumbnail");
if (canvas != null && thumbnail_basename != "") {
var current_file = canvas.window.current_file;
thumbnail_file = current_file.get_file_from_basename (current_file.thumbnails_folder, thumbnail_basename);

var pixbuf = new Gdk.Pixbuf.from_file (thumbnail_file.get_path ());
preview.set_from_pixbuf (pixbuf);
}
}

preview.set_from_pixbuf (pixbuf.scale_simple (SlideList.WIDTH, SlideList.HEIGHT, Gdk.InterpType.BILINEAR));
if (thumbnail_file == null && canvas != null) {
var current_file = canvas.window.current_file;
thumbnail_file = current_file.get_random_file_name (current_file.thumbnails_folder, "jpg");
}

if (canvas != null) {
canvas.window.current_file.file_collector.ref_file (thumbnail_file);
}

if (save_data.has_member ("transition")) {
Expand Down Expand Up @@ -143,7 +169,7 @@ public class Spice.Slide : Object {
});
}

public string serialise () {
public string serialise (bool save_preview = false) {
if (this.save_data != null) {
var root = new Json.Node (Json.NodeType.OBJECT);
root.set_object (save_data);
Expand All @@ -164,8 +190,19 @@ public class Spice.Slide : Object {
}
}

if (save_preview && thumbnail_file != null) {
print ("Saving thumbnail at %s\n", thumbnail_file.get_path ());
try {
preview.pixbuf.save (thumbnail_file.get_path (), "jpeg");
} catch (Error e) {
warning (e.message);
}
}

string preview_name = save_preview && thumbnail_file != null ? thumbnail_file.get_basename () : "";
var raw_notes = (string) GLib.Base64.encode (notes.data);
return "{%s, \"transition\": %d, \"items\": [%s], \"notes\": \"%s\", \"preview\": \"%s\"}\n".printf (canvas.serialise (), (int) transition, data, raw_notes, preview_data);

return "{%s, \"transition\": %d, \"items\": [%s], \"notes\": \"%s\", \"thumbnail\": \"%s\" }\n".printf (canvas.serialise (), (int) transition, data, raw_notes, preview_name);
}

public void delete () {
Expand Down
2 changes: 1 addition & 1 deletion src/Services/SlideManager.vala
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ public class Spice.SlideManager : Object {

foreach (var slide in slides) {
if (slide.visible) {
data = data + (data != "" ? "," + slide.serialise () : slide.serialise ());
data = data + (data != "" ? "," + slide.serialise (true) : slide.serialise (true));
}
}

Expand Down
8 changes: 6 additions & 2 deletions src/Services/Utils.vala
Original file line number Diff line number Diff line change
Expand Up @@ -158,9 +158,13 @@ public class Spice.Utils {
}

public static Spice.CanvasItem? canvas_item_from_data (Json.Object data, Spice.Canvas? canvas) {
string type = data.get_string_member ("type");
CanvasItem? item = null;
string type = "";

if (data.has_member ("type")) {
type = data.get_string_member ("type");
}

CanvasItem? item = null;
switch (type) {
case "text":
item = new TextItem (canvas, data);
Expand Down

0 comments on commit b79ccd5

Please sign in to comment.