~mihirsoni/ubuntu-calendar-app/dateSelectNewEventTest

« back to all changes in this revision

Viewing changes to dataService.js

  • Committer: Frank Mertens
  • Date: 2013-03-27 23:36:18 UTC
  • mfrom: (7.2.9 data-service)
  • Revision ID: frank@cyblogic.de-20130327233618-uag9uo5eyv9v8sgt
Merged the data-service branch manually.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
.pragma library
 
2
 
 
3
.import QtQuick.LocalStorage 2.0 as LS
 
4
 
 
5
Array.prototype.append = function(x) { this.push(x) }
 
6
 
 
7
var CATEGORY_EVENT = 0
 
8
var CATEGORY_TODO = 1
 
9
 
 
10
function getEvents(termStart, termEnd, events)
 
11
{
 
12
    var result = null
 
13
 
 
14
    db().readTransaction(
 
15
        function(tx) {
 
16
            result = tx.executeSql('\
 
17
select * from Event \
 
18
where (? <= startTime and startTime < ?) or \
 
19
      (? < endTime and endTime <= ?) or \
 
20
      (startTime <= ? and ? <= endTime) \
 
21
order by startTime',
 
22
                [ termStart, termEnd, termStart, termEnd, termStart, termEnd ]
 
23
            )
 
24
        }
 
25
    )
 
26
 
 
27
    events = events || []
 
28
 
 
29
    for (var i = 0; i < result.rows.length; ++i) {
 
30
        var e = result.rows.item(i)
 
31
        e.startTime = new Date(e.startTime)
 
32
        e.endTime = new Date(e.endTime)
 
33
        events.append(e)
 
34
    }
 
35
 
 
36
    return events
 
37
}
 
38
 
 
39
function getAttendees(event, attendees)
 
40
{
 
41
    var result = null;
 
42
 
 
43
    db().readTransaction(
 
44
        function(tx) {
 
45
            result = tx.executeSql('\
 
46
select c.* from Attendance a, Contact c \
 
47
where a.eventId = ? and a.contactId = c.id \
 
48
order by c.name',
 
49
                [ event.id ]
 
50
            )
 
51
        }
 
52
    )
 
53
 
 
54
    attendees = attendees || []
 
55
 
 
56
    for (var i = 0; i < result.rows.length; ++i)
 
57
        attendees.append(result.rows.item(i))
 
58
 
 
59
    return attendees
 
60
}
 
61
 
 
62
function addEvent(event)
 
63
{
 
64
    var result = null
 
65
 
 
66
    db().transaction(
 
67
        function(tx) {
 
68
            result = tx.executeSql('\
 
69
insert into Event(title, message, startTime, endTime) \
 
70
values (?, ?, ?, ?)',
 
71
                [ event.title, event.message, event.startTime, event.endTime ]
 
72
            )
 
73
        }
 
74
    )
 
75
 
 
76
    event.id = result.insertId
 
77
 
 
78
    eventsNotifier().dataChanged()
 
79
 
 
80
    return event
 
81
}
 
82
 
 
83
function removeEvent(event)
 
84
{
 
85
    db().transaction(
 
86
        function(tx) {
 
87
            tx.executeSql(
 
88
                'delete from Event where id = ?',
 
89
                [ event.id ]
 
90
            )
 
91
            tx.executeSql(
 
92
                'delete from Attendance where eventId = ?',
 
93
                [ event.id ]
 
94
            )
 
95
            tx.executeSql(
 
96
                'delete from Venue where eventId = ?',
 
97
                [ event.id ]
 
98
            )
 
99
        }
 
100
    )
 
101
 
 
102
    delete event.id
 
103
 
 
104
    eventsNotifier().dataChanged()
 
105
}
 
106
 
 
107
function getContacts(contacts)
 
108
{
 
109
    var result = null
 
110
 
 
111
    db().readTransaction(
 
112
        function(tx) {
 
113
            result = tx.executeSql('select * from Contact order by name')
 
114
        }
 
115
    )
 
116
 
 
117
    contacts = contacts || []
 
118
 
 
119
    for (var i = 0; i < result.rows.length; ++i)
 
120
        contacts.append(result.rows.item(i))
 
121
 
 
122
    return contacts
 
123
}
 
124
 
 
125
function addAttendee(event, contact)
 
126
{
 
127
    db().transaction(
 
128
        function(tx) {
 
129
            tx.executeSql(
 
130
                'insert into Attendance(eventId, contactId) values (?, ?)',
 
131
                [ event.id, contact.id ]
 
132
            )
 
133
        }
 
134
    )
 
135
}
 
136
 
 
137
function removeAttendee(event, contact)
 
138
{
 
139
    db().transaction(
 
140
        function(tx) {
 
141
            tx.executeSql(
 
142
                'delete from Attendance where eventId = ? and contactId = ?',
 
143
                [ event.id, contact.id ]
 
144
            )
 
145
        }
 
146
    )
 
147
}
 
148
 
 
149
function getPlaces(places)
 
150
{
 
151
    var result = null
 
152
 
 
153
    db().readTransaction(
 
154
        function(tx) {
 
155
            result = tx.executeSql('select * from Place')
 
156
        }
 
157
    )
 
158
 
 
159
    places = places || []
 
160
 
 
161
    for (var i = 0; i < result.rows.length; ++i)
 
162
        places.append(result.rows.item(i))
 
163
 
 
164
    return places
 
165
}
 
166
 
 
167
function addPlace(place)
 
168
{
 
169
    var result = null
 
170
 
 
171
    if (typeof place.address == 'undefined') place.address = null
 
172
    if (typeof place.latitude == 'undefined') place.latitude = null
 
173
    if (typeof place.longitude == 'undefined') place.longitude = null
 
174
 
 
175
    db().transaction(
 
176
        function(tx) {
 
177
            result = tx.executeSql(
 
178
                'insert into Place(name, address, latitude, longitude) values(?, ?, ?, ?)',
 
179
                [ place.name, place.address, place.latitude, place.longitude ]
 
180
            )
 
181
        }
 
182
    )
 
183
 
 
184
    place.id = result.insertId
 
185
 
 
186
    return place
 
187
}
 
188
 
 
189
function removePlace(place)
 
190
{
 
191
    db().transaction(
 
192
        function(tx) {
 
193
            tx.executeSql(
 
194
                'delete from Place where id = ?',
 
195
                [ place.id ]
 
196
            )
 
197
            tx.executeSql(
 
198
                'delete from Venue where placeId = ?',
 
199
                [ place.id ]
 
200
            )
 
201
        }
 
202
    )
 
203
 
 
204
    delete place.id
 
205
}
 
206
 
 
207
function addVenue(event, place)
 
208
{
 
209
    db().transaction(
 
210
        function(tx) {
 
211
            tx.executeSql(
 
212
                'insert into Venue(eventId, placeId) values(?, ?)',
 
213
                [ event.id, place.id ]
 
214
            )
 
215
        }
 
216
    )
 
217
}
 
218
 
 
219
function removeVenue(event, place)
 
220
{
 
221
    db().transaction(
 
222
        function(tx) {
 
223
            tx.executeSql(
 
224
                'delete from Venue where eventId = ? and placeId = ?',
 
225
                [ event.id, place.id ]
 
226
            )
 
227
        }
 
228
    )
 
229
}
 
230
 
 
231
function getVenues(event, venues)
 
232
{
 
233
    var result = null
 
234
 
 
235
    db().readTransaction(
 
236
        function(tx) {
 
237
            result = tx.executeSql('\
 
238
select p.* \
 
239
from Venue v, Place p \
 
240
where v.eventId = ? and p.id = v.placeId \
 
241
order by p.name',
 
242
                [ event.id ]
 
243
            )
 
244
        }
 
245
    )
 
246
 
 
247
    venues = venues || []
 
248
 
 
249
    for (var i = 0; i < result.rows.length; ++i)
 
250
        venues.append(result.rows.item(i))
 
251
 
 
252
    return venues
 
253
}
 
254
 
 
255
function printEvent(event)
 
256
{
 
257
    console.log('Event', event)
 
258
    console.log('  id:', event.id)
 
259
    console.log('  title:', event.title)
 
260
    console.log('  message:', event.message)
 
261
    console.log('  startTime:', new Date(event.startTime).toLocaleString())
 
262
    console.log('  endTime:', new Date(event.endTime).toLocaleString())
 
263
 
 
264
    var attendees = []
 
265
    var venues = []
 
266
    getAttendees(event, attendees)
 
267
    getVenues(event, venues)
 
268
    for (var j = 0; j < attendees.length; ++j)
 
269
        printContact(attendees[j])
 
270
    for (var j = 0; j < venues.length; ++j)
 
271
        printPlace(venues[j])
 
272
    console.log('')
 
273
}
 
274
 
 
275
function printContact(contact)
 
276
{
 
277
    console.log('Contact', contact)
 
278
    console.log('  id:', contact.id)
 
279
    console.log('  name:', contact.name)
 
280
    console.log('  surname:', contact.surname)
 
281
    console.log('  avatar:', contact.avatar)
 
282
}
 
283
 
 
284
function printPlace(place)
 
285
{
 
286
    console.log('Place', place)
 
287
    console.log('  name:', place.name)
 
288
    console.log('  address:', place.address)
 
289
    console.log('  latitude:', place.latitude)
 
290
    console.log('  longitude:', place.longitude)
 
291
}
 
292
 
 
293
function __createFirstTime(tx)
 
294
{
 
295
    var schema = '\
 
296
create table Event(\
 
297
    id integer primary key,\
 
298
    title text,\
 
299
    message text,\
 
300
    startTime integer,\
 
301
    endTime integer,\
 
302
    category text default "Events"\
 
303
);\
 
304
\
 
305
create index EventStartTimeIndex on Event(startTime);\
 
306
create index EventEndTimeIndex on Event(endTime);\
 
307
\
 
308
create table Place(\
 
309
    id integer primary key,\
 
310
    name text,\
 
311
    address text,\
 
312
    latitude real,\
 
313
    longitude real\
 
314
);\
 
315
\
 
316
create table Contact(\
 
317
    id integer primary key,\
 
318
    name text,\
 
319
    surname text,\
 
320
    avatar text\
 
321
);\
 
322
\
 
323
create table Attendance(\
 
324
    id integer primary key,\
 
325
    eventId integer references Event(id) on delete cascade,\
 
326
    contactId integer references Contact(id) on delete cascade,\
 
327
    placeId integer references Place(id) on delete set null\
 
328
);\
 
329
\
 
330
create table Venue(\
 
331
    id integer primary key,\
 
332
    eventId integer references Event(id) on delete cascade,\
 
333
    placeId integer references Place(id) on delete cascade\
 
334
);\
 
335
\
 
336
'.split(';')
 
337
 
 
338
    for (var i = 0; i < schema.length; ++i) {
 
339
        var sql = schema[i]
 
340
        if (sql != "") {
 
341
            console.log(sql)
 
342
            tx.executeSql(sql)
 
343
        }
 
344
    }
 
345
}
 
346
 
 
347
function eventsNotifier()
 
348
{
 
349
    if (!eventsNotifier.hasOwnProperty("instance"))
 
350
        eventsNotifier.instance = Qt.createQmlObject('import QtQuick 2.0; QtObject { signal dataChanged }', Qt.application, 'DataService.eventsNotifier()')
 
351
    return eventsNotifier.instance
 
352
}
 
353
 
 
354
function db()
 
355
{
 
356
    if (!db.hasOwnProperty("instance")) {
 
357
        db.instance = LS.LocalStorage.openDatabaseSync("Calendar", "", "Offline Calendar", 100000)
 
358
        if (db.instance.version == "") db.instance.changeVersion("", "0.1", __createFirstTime)
 
359
    }
 
360
    return db.instance
 
361
}