From d82194af58c8ff92634ce57ef293894ec4422efa Mon Sep 17 00:00:00 2001 From: fiaxh Date: Mon, 30 Oct 2017 01:43:26 +0100 Subject: [PATCH] Go offline before quiting application fixes #141 --- libdino/src/application.vala | 3 +++ libdino/src/service/connection_manager.vala | 25 ++++++++++++++++----- plugins/openpgp/src/out_file_processor.vala | 2 +- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/libdino/src/application.vala b/libdino/src/application.vala index c9283127..ff0827f8 100644 --- a/libdino/src/application.vala +++ b/libdino/src/application.vala @@ -42,6 +42,9 @@ public interface Dino.Application : GLib.Application { stream_interactor.connection_manager.log_options = print_xmpp; restore(); }); + shutdown.connect(() => { + stream_interactor.connection_manager.make_offline_all(); + }); open.connect((files, hint) => { if (files.length != 1) { warning("Can't handle more than one URI at once."); diff --git a/libdino/src/service/connection_manager.vala b/libdino/src/service/connection_manager.vala index 60cd335a..4c72f229 100644 --- a/libdino/src/service/connection_manager.vala +++ b/libdino/src/service/connection_manager.vala @@ -130,14 +130,29 @@ public class ConnectionManager { return null; } - public void disconnect(Account account) { + public void make_offline_all() { + foreach (Account account in connection_todo) { + make_offline(account); + } + } + + private void make_offline(Account account) { + Xmpp.Presence.Stanza presence = new Xmpp.Presence.Stanza(); + presence.type_ = Xmpp.Presence.Stanza.TYPE_UNAVAILABLE; change_connection_state(account, ConnectionState.DISCONNECTED); + try { + connections[account].stream.get_module(Presence.Module.IDENTITY).send_presence(connections[account].stream, presence); + } catch (Error e) { print(@"on_prepare_for_sleep error $(e.message)\n"); } + } + + public void disconnect(Account account) { + make_offline(account); + try { + connections[account].stream.disconnect(); + } catch (Error e) { print(@"on_prepare_for_sleep error $(e.message)\n"); } connection_todo.remove(account); if (connections.has_key(account)) { - try { - connections[account].stream.disconnect(); - connections.unset(account); - } catch (Error e) { } + connections.unset(account); } } diff --git a/plugins/openpgp/src/out_file_processor.vala b/plugins/openpgp/src/out_file_processor.vala index a09e17a6..c644a190 100644 --- a/plugins/openpgp/src/out_file_processor.vala +++ b/plugins/openpgp/src/out_file_processor.vala @@ -21,7 +21,7 @@ public class OutFileProcessor : OutgoingFileProcessor, Object { uint8[] enc_content = GPGHelper.encrypt_file(uri, keys, GPG.EncryptFlags.ALWAYS_TRUST); file_transfer.input_stream = new MemoryInputStream.from_data(enc_content, GLib.free); file_transfer.encryption = Encryption.PGP; - file_transfer.server_file_name = file_transfer.server_file_name + ".pgp"; + file_transfer.server_file_name = Xmpp.random_uuid() + ".pgp"; } catch (Error e) { file_transfer.state = FileTransfer.State.FAILED; }