~ubuntu-branches/ubuntu/saucy/geary/saucy-updates

« back to all changes in this revision

Viewing changes to src/engine/imap-db/imap-db-database.vala

  • Committer: Package Import Robot
  • Author(s): Sebastien Bacher
  • Date: 2013-03-14 13:48:23 UTC
  • mfrom: (1.1.3)
  • Revision ID: package-import@ubuntu.com-20130314134823-gyk5av1g508zyj8a
Tags: 0.3.0~pr1-0ubuntu1
New upstream version (FFE lp: #1154316), supports multiple account as
well as full conversation views with inline replies

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
 
7
7
private class Geary.ImapDB.Database : Geary.Db.VersionedDatabase {
8
8
    private const string DB_FILENAME = "geary.db";
9
 
    private const int BUSY_TIMEOUT_MSEC = Db.Connection.RECOMMENDED_BUSY_TIMEOUT_MSEC;
10
9
    private string account_owner_email;
11
10
    
12
11
    public Database(File db_dir, File schema_dir, string account_owner_email) {
25
24
    }
26
25
    
27
26
    protected override void post_upgrade(int version) {
28
 
        if (version == 5) {
29
 
            try {
30
 
                Db.Result result = query("SELECT sender, from_field, to_field, cc, bcc FROM MessageTable");
31
 
                while (!result.finished) {
32
 
                    MessageAddresses message_addresses =
33
 
                        new MessageAddresses.from_result(account_owner_email, result);
34
 
                    foreach (Contact contact in message_addresses.contacts)
35
 
                        do_update_contact_importance(get_master_connection(), contact);
36
 
                    result.next();
 
27
        switch (version) {
 
28
            case 5:
 
29
                post_upgrade_populate_autocomplete();
 
30
            break;
 
31
            
 
32
            case 6:
 
33
                post_upgrade_encode_folder_names();
 
34
            break;
 
35
        }
 
36
    }
 
37
    
 
38
    // Version 5.
 
39
    private void post_upgrade_populate_autocomplete() {
 
40
        try {
 
41
            Db.Result result = query("SELECT sender, from_field, to_field, cc, bcc FROM MessageTable");
 
42
            while (!result.finished) {
 
43
                MessageAddresses message_addresses =
 
44
                    new MessageAddresses.from_result(account_owner_email, result);
 
45
                foreach (Contact contact in message_addresses.contacts)
 
46
                    do_update_contact_importance(get_master_connection(), contact);
 
47
                result.next();
 
48
            }
 
49
        } catch (Error err) {
 
50
            debug("Error populating autocompletion table during upgrade to database schema 5");
 
51
        }
 
52
    }
 
53
    
 
54
    // Version 6.
 
55
    private void post_upgrade_encode_folder_names() {
 
56
        try {
 
57
            Db.Result select = query("SELECT id, name FROM FolderTable");
 
58
            while (!select.finished) {
 
59
                int64 id = select.int64_at(0);
 
60
                string encoded_name = select.string_at(1);
 
61
                
 
62
                try {
 
63
                    string canonical_name = Geary.ImapUtf7.imap_utf7_to_utf8(encoded_name);
 
64
                    
 
65
                    Db.Statement update = prepare("UPDATE FolderTable SET name=? WHERE id=?");
 
66
                    update.bind_string(0, canonical_name);
 
67
                    update.bind_int64(1, id);
 
68
                    update.exec();
 
69
                } catch (Error e) {
 
70
                    debug("Error renaming folder %s to its canonical representation: %s", encoded_name, e.message);
37
71
                }
38
 
            } catch (Error err) {
39
 
                debug("Error population autocompletion table during upgrade to database schema 5");
 
72
                
 
73
                select.next();
40
74
            }
 
75
        } catch (Error e) {
 
76
            debug("Error decoding folder names during upgrade to database schema 6: %s", e.message);
41
77
        }
42
78
    }
43
79
    
44
80
    private void on_prepare_database_connection(Db.Connection cx) throws Error {
45
 
        cx.set_busy_timeout_msec(BUSY_TIMEOUT_MSEC);
46
81
        cx.set_foreign_keys(true);
47
82
        cx.set_recursive_triggers(true);
48
83
        cx.set_synchronous(Db.SynchronousMode.OFF);