aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libdino/src/application.vala3
-rw-r--r--libdino/src/service/connection_manager.vala25
-rw-r--r--plugins/openpgp/src/out_file_processor.vala2
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;
}