From e8f11178ecc1a333976ba713f532fcae11931b16 Mon Sep 17 00:00:00 2001 From: Marvin W Date: Sun, 12 Mar 2017 13:19:04 +0100 Subject: Move storage into user directory and fix plugin search path --- libdino/src/service/avatar_manager.vala | 12 +++++++++++- libdino/src/service/avatar_storage.vala | 17 +++++++++++------ libdino/src/service/message_manager.vala | 2 +- libdino/src/service/module_manager.vala | 3 --- 4 files changed, 23 insertions(+), 11 deletions(-) (limited to 'libdino/src/service') diff --git a/libdino/src/service/avatar_manager.vala b/libdino/src/service/avatar_manager.vala index 69e5580e..032bd576 100644 --- a/libdino/src/service/avatar_manager.vala +++ b/libdino/src/service/avatar_manager.vala @@ -20,7 +20,7 @@ public class AvatarManager : StreamInteractionModule, Object { private Database db; private HashMap user_avatars = new HashMap(Jid.hash_func, Jid.equals_func); private HashMap vcard_avatars = new HashMap(Jid.hash_func, Jid.equals_func); - private AvatarStorage avatar_storage = new AvatarStorage("./"); // TODO ihh + private AvatarStorage avatar_storage = new AvatarStorage(get_storage_dir()); private const int MAX_PIXEL = 192; public static void start(StreamInteractor stream_interactor, Database db) { @@ -28,10 +28,20 @@ public class AvatarManager : StreamInteractionModule, Object { stream_interactor.add_module(m); } + public static string get_storage_dir() { + return Path.build_filename(Application.get_storage_dir(), "avatars"); + } + private AvatarManager(StreamInteractor stream_interactor, Database db) { this.stream_interactor = stream_interactor; this.db = db; stream_interactor.account_added.connect(on_account_added); + stream_interactor.module_manager.initialize_account_modules.connect(initialize_avatar_modules); + } + + private void initialize_avatar_modules(Account account, ArrayList modules) { + modules.add(new Xep.UserAvatars.Module(avatar_storage)); + modules.add(new Xep.VCard.Module(avatar_storage)); } public Pixbuf? get_avatar(Account account, Jid jid) { diff --git a/libdino/src/service/avatar_storage.vala b/libdino/src/service/avatar_storage.vala index a9a8fb86..46b43d99 100644 --- a/libdino/src/service/avatar_storage.vala +++ b/libdino/src/service/avatar_storage.vala @@ -9,23 +9,28 @@ public class AvatarStorage : Xep.PixbufStorage, Object { public AvatarStorage(string folder) { this.folder = folder; + DirUtils.create_with_parents(folder, 0700); } public void store(string id, uint8[] data) { - File file = File.new_for_path(id); - if (file.query_exists()) file.delete(); //TODO y? - DataOutputStream fos = new DataOutputStream(file.create(FileCreateFlags.REPLACE_DESTINATION)); - fos.write(data); + File file = File.new_for_path(Path.build_filename(folder, id)); + try { + if (file.query_exists()) file.delete(); //TODO y? + DataOutputStream fos = new DataOutputStream(file.create(FileCreateFlags.REPLACE_DESTINATION)); + fos.write(data); + } catch (Error e) { + // Ignore: we failed in storing, so we refuse to display later... + } } public bool has_image(string id) { - File file = File.new_for_path(folder + id); + File file = File.new_for_path(Path.build_filename(folder, id)); return file.query_exists(); } public Pixbuf? get_image(string id) { try { - return new Pixbuf.from_file(folder + id); + return new Pixbuf.from_file(Path.build_filename(folder, id)); } catch (Error e) { return null; } diff --git a/libdino/src/service/message_manager.vala b/libdino/src/service/message_manager.vala index 11435262..b24aa12d 100644 --- a/libdino/src/service/message_manager.vala +++ b/libdino/src/service/message_manager.vala @@ -170,7 +170,7 @@ public class MessageManager : StreamInteractionModule, Object { pre_message_send(message, new_message, conversation); if (message.marked == Entities.Message.Marked.UNSENT || message.marked == Entities.Message.Marked.WONTSEND) return; if (delayed) { - stream.get_module(Xmpp.Xep.DelayedDelivery.Module.IDENTITY).set_message_delay(new_message, message.time); + Xmpp.Xep.DelayedDelivery.Module.set_message_delay(new_message, message.time); } stream.get_module(Xmpp.Message.Module.IDENTITY).send_message(stream, new_message); message.stanza_id = new_message.id; diff --git a/libdino/src/service/module_manager.vala b/libdino/src/service/module_manager.vala index 896fb1e4..ab268876 100644 --- a/libdino/src/service/module_manager.vala +++ b/libdino/src/service/module_manager.vala @@ -8,7 +8,6 @@ namespace Dino { public class ModuleManager { private HashMap> module_map = new HashMap>(); - private AvatarStorage avatar_storage = new AvatarStorage("./"); private EntityCapabilitiesStorage entity_capabilities_storage; public signal void initialize_account_modules(Account account, ArrayList modules); @@ -65,8 +64,6 @@ public class ModuleManager { module_map[account].add(new Xep.Muc.Module()); module_map[account].add(new Xep.Pubsub.Module()); module_map[account].add(new Xep.EntityCapabilities.Module(entity_capabilities_storage)); - module_map[account].add(new Xep.UserAvatars.Module(avatar_storage)); - module_map[account].add(new Xep.VCard.Module(avatar_storage)); module_map[account].add(new Xep.MessageDeliveryReceipts.Module()); module_map[account].add(new Xep.ChatStateNotifications.Module()); module_map[account].add(new Xep.ChatMarkers.Module()); -- cgit v1.2.3-70-g09d2