aboutsummaryrefslogtreecommitdiff
path: root/libdino/src/application.vala
blob: 4b5fd274b2c804f81da6dccb05d281a4da325ea4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using Gtk;

using Dino.Entities;

public class Dino.Application : Gtk.Application {

    public Database db;
    public StreamInteractor stream_interaction;
    public Plugins.Registry plugin_registry = new Plugins.Registry();

    public Application() throws Error {
        if (DirUtils.create_with_parents(get_storage_dir(), 0700) == -1) {
            throw new Error(-1, 0, @"Could not create storage dir \"$(get_storage_dir())\": $(FileUtils.error_from_errno(errno))");
        }

        // FIXME: Legacy import
        if (FileUtils.test("store.sqlite3", FileTest.IS_REGULAR)) {
            FileUtils.rename("store.sqlite3", Path.build_filename(get_storage_dir(), "dino.db"));
        }

        this.db = new Database(Path.build_filename(get_storage_dir(), "dino.db"));
        this.stream_interaction = new StreamInteractor(db);

        AvatarManager.start(stream_interaction, db);
        MessageManager.start(stream_interaction, db);
        CounterpartInteractionManager.start(stream_interaction);
        PresenceManager.start(stream_interaction);
        MucManager.start(stream_interaction);
        RosterManager.start(stream_interaction);
        ConversationManager.start(stream_interaction, db);
        ChatInteraction.start(stream_interaction);
    }

    public static string get_storage_dir() {
        return Path.build_filename(Environment.get_user_data_dir(), "dino");
    }
}