Go offline before quiting application

fixes #141
This commit is contained in:
fiaxh 2017-10-30 01:43:26 +01:00
parent 0102abeec1
commit d82194af58
3 changed files with 24 additions and 6 deletions

View file

@ -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.");

View file

@ -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);
}
}

View file

@ -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;
}