Private
Public Access
1
0
Files
Kordophone/src/service/repository.vala

104 lines
3.7 KiB
Vala
Raw Normal View History

using GLib;
using Gee;
public class Repository : DBusServiceProxy {
public signal void conversations_updated();
public signal void messages_updated(string conversation_guid);
public signal void attachment_downloaded(string attachment_guid);
public static Repository get_instance() {
if (instance == null) {
instance = new Repository();
}
return instance;
}
private static Repository instance = null;
2025-05-03 01:11:26 -07:00
private DBusService.Repository? dbus_repository;
private uint dbus_watch_id;
private Repository() {
this.dbus_watch_id = Bus.watch_name(BusType.SESSION, DBUS_NAME, BusNameWatcherFlags.NONE, (name, name_owner) => {
connect_to_repository();
});
2025-05-03 01:11:26 -07:00
}
private void connect_to_repository() {
2025-05-14 17:37:23 -07:00
GLib.info("Connecting to repository");
try {
this.dbus_repository = Bus.get_proxy_sync<DBusService.Repository>(BusType.SESSION, DBUS_NAME, DBUS_PATH);
this.dbus_repository.conversations_updated.connect(() => {
conversations_updated();
});
this.dbus_repository.messages_updated.connect((conversation_guid) => {
messages_updated(conversation_guid);
});
this.dbus_repository.attachment_download_completed.connect((attachment_guid) => {
attachment_downloaded(attachment_guid);
});
2025-05-03 01:11:26 -07:00
conversations_updated();
} catch (GLib.Error e) {
warning("Failed to connect to repository: %s", e.message);
}
}
public Conversation[] get_conversations(int limit = 200) throws DBusServiceProxyError, GLib.Error {
if (dbus_repository == null) {
throw new DBusServiceProxyError.NOT_CONNECTED("Repository not connected");
}
var conversations = dbus_repository.get_conversations(limit, 0);
Conversation[] returned_conversations = new Conversation[conversations.length];
for (int i = 0; i < conversations.length; i++) {
returned_conversations[i] = new Conversation.from_hash_table(conversations[i]);
}
return returned_conversations;
}
public Message[] get_messages(string conversation_guid, string last_message_id = "") throws DBusServiceProxyError, GLib.Error {
if (dbus_repository == null) {
throw new DBusServiceProxyError.NOT_CONNECTED("Repository not connected");
}
var messages = dbus_repository.get_messages(conversation_guid, last_message_id);
Message[] returned_messages = new Message[messages.length];
for (int i = 0; i < messages.length; i++) {
returned_messages[i] = new Message.from_hash_table(messages[i]);
}
return returned_messages;
}
2025-05-02 15:09:12 -07:00
public string send_message(string conversation_guid, string message) throws DBusServiceProxyError, GLib.Error {
if (dbus_repository == null) {
throw new DBusServiceProxyError.NOT_CONNECTED("Repository not connected");
2025-05-02 15:09:12 -07:00
}
return dbus_repository.send_message(conversation_guid, message);
}
public void sync_conversation(string conversation_guid) throws DBusServiceProxyError, GLib.Error {
if (dbus_repository == null) {
throw new DBusServiceProxyError.NOT_CONNECTED("Repository not connected");
}
dbus_repository.sync_conversation(conversation_guid);
}
public void download_attachment(string attachment_guid, bool preview) throws DBusServiceProxyError, GLib.Error {
if (dbus_repository == null) {
throw new DBusServiceProxyError.NOT_CONNECTED("Repository not connected");
}
dbus_repository.download_attachment(attachment_guid, preview);
}
}