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/contact_titlebar_entry.vala | 68 ++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 plugins/http-files/src/contact_titlebar_entry.vala (limited to 'plugins/http-files/src/contact_titlebar_entry.vala') diff --git a/plugins/http-files/src/contact_titlebar_entry.vala b/plugins/http-files/src/contact_titlebar_entry.vala new file mode 100644 index 00000000..a87c7ddf --- /dev/null +++ b/plugins/http-files/src/contact_titlebar_entry.vala @@ -0,0 +1,68 @@ +using Gtk; + +using Dino.Entities; + +namespace Dino.Plugins.HttpFiles { + +public class ConversationsTitlebarEntry : Plugins.ConversationTitlebarEntry { + public override string id { get { return "send_files"; } } + + StreamInteractor stream_interactor; + + public ConversationsTitlebarEntry(StreamInteractor stream_interactor) { + this.stream_interactor = stream_interactor; + } + + public override double order { get { return 4; } } + public override Plugins.ConversationTitlebarWidget get_widget() { + return new ConversationTitlebarWidget(stream_interactor) { visible=true }; + } +} + +public class ConversationTitlebarWidget : Button, Plugins.ConversationTitlebarWidget { + + private Conversation? conversation; + private StreamInteractor stream_interactor; + + public ConversationTitlebarWidget(StreamInteractor stream_interactor) { + this.stream_interactor = stream_interactor; + image = new Image.from_icon_name("mail-attachment-symbolic", IconSize.MENU); + clicked.connect(on_clicked); + stream_interactor.get_module(Manager.IDENTITY).upload_available.connect(on_upload_available); + } + + public void on_clicked() { + FileChooserDialog chooser = new FileChooserDialog ( + "Select file", null, FileChooserAction.OPEN, + "Cancel", ResponseType.CANCEL, + "Select", ResponseType.ACCEPT); + int? max_file_size = stream_interactor.get_module(Manager.IDENTITY).get_max_file_size(conversation.account); + if (max_file_size != null) { + FileFilter filter = new FileFilter(); + filter.add_custom(FileFilterFlags.URI, (filter_info) => { + File file = File.new_for_uri(filter_info.uri); + FileInfo file_info = file.query_info("*", FileQueryInfoFlags.NONE); + return file_info.get_size() <= max_file_size; + }); + chooser.set_filter(filter); + } + if (chooser.run() == Gtk.ResponseType.ACCEPT) { + string uri = chooser.get_filename(); + stream_interactor.get_module(Manager.IDENTITY).send(conversation, uri); + } + chooser.close(); + } + + public void on_upload_available(Account account) { + if (conversation.account.equals(account)) { + visible = true; + } + } + + public new void set_conversation(Conversation conversation) { + this.conversation = conversation; + visible = stream_interactor.get_module(Manager.IDENTITY).is_upload_available(conversation.account); + } +} + +} -- cgit v1.2.3-54-g00ecf