diff options
Diffstat (limited to 'plugins/http-files/src/manager.vala')
-rw-r--r-- | plugins/http-files/src/manager.vala | 56 |
1 files changed, 56 insertions, 0 deletions
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<Manager> IDENTITY = new ModuleIdentity<Manager>("http_files"); + public string id { get { return IDENTITY.id; } } + + public signal void upload_available(Account account); + + private StreamInteractor stream_interactor; + private HashMap<Account, int?> max_file_sizes = new HashMap<Account, int?>(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); + } +} + +} |