~lubuntu-software-center-team/lubuntu-software-center/vala-port

« back to all changes in this revision

Viewing changes to src/Backend/LscDatabase.vala

  • Committer: Stephen Smally
  • Date: 2012-03-04 12:59:13 UTC
  • Revision ID: eco.stefi@fastwebnet.it-20120304125913-bk1iutifwoeoyo0i
Worked a lot!

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
//  Stephen Smally © 2012
2
 
//      This program is free software; you can redistribute it and/or modify
3
 
//      it under the terms of the GNU General Public License as published by
4
 
//      the Free Software Foundation; either version 2 of the License, or
5
 
//      (at your option) any later version.
6
 
//      
7
 
//      This program is distributed in the hope that it will be useful,
8
 
//      but WITHOUT ANY WARRANTY; without even the implied warranty of
9
 
//      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
 
//      GNU General Public License for more details.
11
 
//      
12
 
//      You should have received a copy of the GNU General Public License
13
 
//      along with this program; if not, write to the Free Software
14
 
//      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
15
 
//      MA 02110-1301, USA.
16
 
//      
17
 
 
18
 
 
19
 
using Sqlite;
20
 
using Gee;
21
 
 
22
 
namespace Lsc.Backend {
23
 
    public class LscApp : Object {
24
 
        public LscCategory parent_category { get; private set; }
25
 
        public string id { get; private set; }
26
 
        public string name { get; private set; }
27
 
        public string comment { get; private set; }
28
 
        public string description { get; private set; }
29
 
        public string icon { get; private set; }
30
 
        public string[] dependencies { get; private set; }
31
 
        
32
 
        public LscApp (LscCategory parent, Statement stmt) {
33
 
            parent_category = parent;
34
 
            id = stmt.column_value(1).to_text();
35
 
            name = stmt.column_value(0).to_text();
36
 
            comment = stmt.column_value(3).to_text();
37
 
            icon = stmt.column_value(4).to_text();
38
 
            description = stmt.column_value(5).to_text();
39
 
            dependencies = stmt.column_value(6).to_text().split(";");
40
 
        }
41
 
    }
42
 
    
43
 
    public class LscCategory : Object {
44
 
        public string id { get; private set; }
45
 
        public bool showboth { get; private set; }
46
 
        public string name { get; private set; }
47
 
        public string comment { get; private set; }
48
 
        public string icon { get; private set; }
49
 
        
50
 
        public LscCategory (Statement stmt) {
51
 
            id = stmt.column_value(0).to_text();
52
 
            showboth = bool.parse(stmt.column_value(2).to_text().down());
53
 
            name = stmt.column_value(3).to_text();
54
 
            comment = stmt.column_value(4).to_text();
55
 
            icon = stmt.column_value(5).to_text();
56
 
        }
57
 
    }
58
 
    
59
 
    public class LscDatabase : Object {
60
 
        public HashMap<string, LscCategory> current_categories { get; private set; }
61
 
        public HashMap<LscCategory, HashMap<string, LscApp>> current_apps { get; private set; }
62
 
        private HashMap<string, LscApp> tmp_apps;
63
 
        private Database db;
64
 
        private Statement get_categories_stmt;
65
 
        private Statement get_apps_stmt;
66
 
        private string STMT_GET_CATEGORIES = "SELECT * FROM tables";
67
 
        
68
 
        public void fill_categories () {
69
 
            current_categories.clear();
70
 
            while (get_categories_stmt.step() == Sqlite.ROW) {
71
 
                LscCategory category = new LscCategory(get_categories_stmt);
72
 
                current_categories[category.id] = category;
73
 
            }
74
 
        }
75
 
        
76
 
        public LscApp get_app (string category_id, string app_id) {
77
 
            return current_apps[current_categories[category_id]][app_id];
78
 
        }
79
 
        
80
 
        public void fill_category (string category_id) {   
81
 
            current_apps.clear();
82
 
            LscCategory cat = current_categories[category_id];
83
 
            
84
 
            string STMT_GET_FROM_CAT = "SELECT * FROM "+cat.id;
85
 
            db.prepare_v2(STMT_GET_FROM_CAT, STMT_GET_FROM_CAT.length, out get_apps_stmt);
86
 
            tmp_apps = new HashMap<string, LscApp>();
87
 
            
88
 
            while (get_apps_stmt.step() == Sqlite.ROW) {
89
 
                LscApp app = new LscApp(cat, get_apps_stmt);
90
 
                tmp_apps[app.id] = app;
91
 
            }
92
 
            
93
 
            current_apps[cat] = tmp_apps;
94
 
        }
95
 
        
96
 
        public LscDatabase (string path) {
97
 
            current_categories = new HashMap<string, LscCategory>();
98
 
            current_apps = new HashMap<LscCategory, HashMap<string, LscApp>>();
99
 
            
100
 
            if (Database.open_v2(path, out db) != Sqlite.OK) {
101
 
                stdout.printf("Error opening %s\n", path);
102
 
            }
103
 
            
104
 
            db.prepare_v2(STMT_GET_CATEGORIES, STMT_GET_CATEGORIES.length, out get_categories_stmt);
105
 
        }
106
 
    }
107
 
}