From ea174ab632ced082eb0f1c51cea1bc9dc5c7c89e Mon Sep 17 00:00:00 2001 From: fiaxh Date: Wed, 2 Aug 2017 17:29:55 +0200 Subject: Http file upload --- plugins/http-files/src/manager.vala | 56 +++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 plugins/http-files/src/manager.vala (limited to 'plugins/http-files/src/manager.vala') diff --git a/plugins/http-files/src/manager.vala b/plugins/http-files/src/manager.vala new file mode 100644 index 00000000..5b804a00 --- /dev/null +++ b/plugins/http-files/src/manager.vala @@ -0,0 +1,56 @@ +using Dino.Entities; +using Xmpp; +using Gee; + +namespace Dino.Plugins.HttpFiles { + +public class Manager : StreamInteractionModule, Object { + public static ModuleIdentity IDENTITY = new ModuleIdentity("http_files"); + public string id { get { return IDENTITY.id; } } + + public signal void upload_available(Account account); + + private StreamInteractor stream_interactor; + private HashMap max_file_sizes = new HashMap(Account.hash_func, Account.equals_func); + + private Manager(StreamInteractor stream_interactor) { + this.stream_interactor = stream_interactor; + + stream_interactor.stream_negotiated.connect(on_stream_negotiated); + } + + public void send(Conversation conversation, string file_uri) { + Xmpp.Core.XmppStream? stream = stream_interactor.get_stream(conversation.account); + if (stream != null) { + stream_interactor.module_manager.get_module(conversation.account, UploadStreamModule.IDENTITY).upload(stream, file_uri, + (stream, url_down) => { + stream_interactor.get_module(MessageProcessor.IDENTITY).send_message(url_down, conversation); + }, + () => {} + ); + + } + } + + public bool is_upload_available(Account account) { + return max_file_sizes.has_key(account); + } + + public int? get_max_file_size(Account account) { + return max_file_sizes[account]; + } + + private void on_stream_negotiated(Account account, Core.XmppStream stream) { + stream_interactor.module_manager.get_module(account, UploadStreamModule.IDENTITY).feature_available.connect((stream, max_file_size) => { + max_file_sizes[account] = max_file_size; + upload_available(account); + }); + } + + public static void start(StreamInteractor stream_interactor) { + Manager m = new Manager(stream_interactor); + stream_interactor.add_module(m); + } +} + +} -- cgit v1.2.3-54-g00ecf