Skip to content

Commit 5fcd94c

Browse files
committed
Replaces kango.storage with Mozilla/localForage to overcome localstorage size limitations
1 parent c1fdd8c commit 5fcd94c

File tree

5 files changed

+65
-63
lines changed

5 files changed

+65
-63
lines changed

app/extension_info.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"description": "Research tool for field studies in online social networks.",
1717
"creator": "Fraunhofer Institute SIT",
1818
"background_scripts": [
19+
"bower_components/localforage/dist/localforage.js",
1920
"main.js"
2021
],
2122
"version": "2.0.14",

app/main.coffee

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
2828
class MyExtension
2929
constructor: ->
3030
info = kango.getExtensionInfo()
31-
roseStorage = kango.storage.getItem 'roseStorage'
32-
unless roseStorage?
33-
roseStorage =
34-
platforms: []
35-
diary: []
36-
settings:
37-
reminder:
38-
isActive: true
39-
language: 'auto'
40-
meta:
41-
version: info.version
42-
'install-date': new Date().toJSON()
43-
44-
kango.storage.setItem 'roseStorage', roseStorage
31+
localforage.getItem 'roseStorage', (roseStorage) ->
32+
unless roseStorage?
33+
roseStorage =
34+
platforms: []
35+
diary: []
36+
settings:
37+
reminder:
38+
isActive: true
39+
language: 'auto'
40+
meta:
41+
version: info.version
42+
'install-date': new Date().toJSON()
43+
44+
localforage.setItem 'roseStorage', roseStorage
4545

4646
extension = new MyExtension()

app/scripts/Heartbeat.coffee

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
2828
class @Heartbeat
2929
@getHeartbeat: (name) ->
3030
return new RSVP.Promise (resolve) ->
31-
kango.invokeAsync 'kango.storage.getItem', 'heartbeat', (heartbeat) ->
31+
kango.invokeAsyncCallback 'localforage.getItem', 'heartbeat', (heartbeat) ->
3232
# Initialize heartbeat, if necessary.
3333
heartbeat = {} unless heartbeat?
3434

@@ -44,12 +44,12 @@ class @Heartbeat
4444

4545
@setHeartbeat: (name) ->
4646
return new RSVP.Promise (resolve) ->
47-
kango.invokeAsync 'kango.storage.getItem', 'heartbeat', (heartbeat) ->
47+
kango.invokeAsyncCallback 'localforage.getItem', 'heartbeat', (heartbeat) ->
4848
# Initialize heartbeat, if necessary.
4949
heartbeat = {} unless heartbeat?
5050

5151
# Set heartbeat.
5252
heartbeat[name] = new Date().toJSON()
5353

5454
# Write heartbeat back to storage.
55-
kango.invokeAsync 'kango.storage.setItem', 'heartbeat', heartbeat, resolve
55+
kango.invokeAsyncCallback 'localforage.setItem', 'heartbeat', heartbeat, resolve

app/scripts/Storage/Storage.coffee

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@ require 'Storage/RoseData'
2929

3030
class @Storage
3131
@addPlatform: (platformName) ->
32-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
32+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
3333
roseData = new RoseData(roseStorage)
3434

3535
roseData.addPlatform(platformName)
3636

37-
kango.invokeAsync 'kango.storage.setItem', 'roseStorage', roseData.getData()
37+
kango.invokeAsyncCallback 'localforage.setItem', 'roseStorage', roseData.getData()
3838

3939
@hasPlatform: (platformName, callback) ->
40-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
40+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
4141
roseData = new RoseData(roseStorage)
4242

4343
hasPlatform = roseData.hasPlatform(platformName)
@@ -47,186 +47,186 @@ class @Storage
4747
@addInteraction: (record, platformName) ->
4848
return new RSVP.Promise (resolve) ->
4949
console.log('[INTERACTION] ' + JSON.stringify(record))
50-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
50+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
5151
roseData = new RoseData(roseStorage)
5252

5353
roseData.addInteraction(record, platformName)
5454

55-
kango.invokeAsync 'kango.storage.setItem', 'roseStorage', roseData.getData(), resolve
55+
kango.invokeAsyncCallback 'localforage.setItem', 'roseStorage', roseData.getData(), resolve
5656

5757
@getInteraction: (index, platformName, callback) ->
58-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
58+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
5959
roseData = new RoseData(roseStorage)
6060

6161
interaction = roseData.getInteraction(index, platformName)
6262

6363
callback(interaction)
6464

6565
@getInteractions: (platformName, callback) ->
66-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
66+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
6767
roseData = new RoseData(roseStorage)
6868

6969
interactions = roseData.getInteractions(platformName)
7070

7171
callback(interactions)
7272

7373
@removeInteraction: (index, platformName, callback) ->
74-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
74+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
7575
roseData = new RoseData(roseStorage)
7676

7777
roseData.removeInteraction(index, platformName)
7878

79-
kango.invokeAsync 'kango.storage.setItem', 'roseStorage', roseData.getData(), callback
79+
kango.invokeAsyncCallback 'localforage.setItem', 'roseStorage', roseData.getData(), callback
8080

8181
@hideInteraction: (index, hide, platformName, callback) ->
82-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
82+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
8383
roseData = new RoseData(roseStorage)
8484

8585
roseData.hideInteraction(index, hide, platformName)
8686

87-
kango.invokeAsync 'kango.storage.setItem', 'roseStorage', roseData.getData(), callback
87+
kango.invokeAsyncCallback 'localforage.setItem', 'roseStorage', roseData.getData(), callback
8888

8989
@addComment: (comment, platformName) ->
90-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
90+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
9191
roseData = new RoseData(roseStorage)
9292

9393
roseData.addComment(comment, platformName)
9494

95-
kango.invokeAsync 'kango.storage.setItem', 'roseStorage', roseData.getData()
95+
kango.invokeAsyncCallback 'localforage.setItem', 'roseStorage', roseData.getData()
9696

9797
@getComment: (id, platformName, callback) ->
98-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
98+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
9999
roseData = new RoseData(roseStorage)
100100

101101
comment = roseData.getComment(id, platformName)
102102

103103
callback(comment)
104104

105105
@getComments: (platformName, callback) ->
106-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
106+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
107107
roseData = new RoseData(roseStorage)
108108

109109
comments = roseData.getComments(platformName)
110110

111111
callback(comments)
112112

113113
@hideComment: (index, hide, platformName, callback) ->
114-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
114+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
115115
roseData = new RoseData(roseStorage)
116116

117117
roseData.hideComment(index, hide, platformName)
118118

119-
kango.invokeAsync 'kango.storage.setItem', 'roseStorage', roseData.getData(), callback
119+
kango.invokeAsyncCallback 'localforage.setItem', 'roseStorage', roseData.getData(), callback
120120

121121
@removeComment: (index, platformName) ->
122-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
122+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
123123
roseData = new RoseData(roseStorage)
124124

125125
roseData.removeComment(index, platformName)
126126

127-
kango.invokeAsync 'kango.storage.setItem', 'roseStorage', roseData.getData()
127+
kango.invokeAsyncCallback 'localforage.setItem', 'roseStorage', roseData.getData()
128128

129129
@addDiaryEntry: (entry) ->
130-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
130+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
131131
roseData = new RoseData(roseStorage)
132132

133133
roseData.addDiaryEntry(entry)
134134

135-
kango.invokeAsync 'kango.storage.setItem', 'roseStorage', roseData.getData()
135+
kango.invokeAsyncCallback 'localforage.setItem', 'roseStorage', roseData.getData()
136136

137137
@removeDiaryEntry: (index) ->
138-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
138+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
139139
roseData = new RoseData(roseStorage)
140140

141141
roseData.removeDiaryEntry(index)
142142

143-
kango.invokeAsync 'kango.storage.setItem', 'roseStorage', roseData.getData()
143+
kango.invokeAsyncCallback 'localforage.setItem', 'roseStorage', roseData.getData()
144144

145145
@updateDiaryEntry: (index, text, callback) ->
146-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
146+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
147147
roseData = new RoseData(roseStorage)
148148

149149
roseData.updateDiaryEntry(index, text)
150150

151-
kango.invokeAsync 'kango.storage.setItem', 'roseStorage', roseData.getData(), callback
151+
kango.invokeAsyncCallback 'localforage.setItem', 'roseStorage', roseData.getData(), callback
152152

153153
@getDiaryEntries: (callback) ->
154-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
154+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
155155
roseData = new RoseData(roseStorage)
156156

157157
entries = roseData.getDiaryEntries()
158158

159159
callback(entries)
160160

161161
@getPrivacyEntry: (platformName, callback) ->
162-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
162+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
163163
roseData = new RoseData(roseStorage)
164164

165165
entry = roseData.getPrivacyEntry(platformName)
166166

167167
callback(entry)
168168

169169
@setPrivacyEntry: (entry, platformName) ->
170-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
170+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
171171
roseData = new RoseData(roseStorage)
172172

173173
roseData.setPrivacyEntry(entry, platformName)
174174

175-
kango.invokeAsync 'kango.storage.setItem', 'roseStorage', roseData.getData()
175+
kango.invokeAsyncCallback 'localforage.setItem', 'roseStorage', roseData.getData()
176176

177177
@getMetaInformation: (callback) ->
178-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
178+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
179179
roseData = new RoseData(roseStorage)
180180

181181
meta = roseData.getMeta()
182182

183183
callback(meta)
184184

185185
@getStaticInformation: (platformName, callback) ->
186-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
186+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
187187
roseData = new RoseData(roseStorage)
188188

189189
staticInformation = roseData.getStaticInformation(platformName)
190190

191191
callback(staticInformation)
192192

193193
@getStaticInformationEntries: (platformName, informationName, callback) ->
194-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
194+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
195195
roseData = new RoseData(roseStorage)
196196

197197
staticEntry = roseData.getStaticInformationEntries(platformName, informationName)
198198

199199
callback(staticEntry)
200200

201201
@addStaticInformationEntry: (entry, platformName, informationName) ->
202-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
202+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
203203
roseData = new RoseData(roseStorage)
204204

205205
roseData.addStaticInformationEntry(entry, platformName, informationName)
206206

207-
kango.invokeAsync 'kango.storage.setItem', 'roseStorage', roseData.getData()
207+
kango.invokeAsyncCallback 'localforage.setItem', 'roseStorage', roseData.getData()
208208

209209
@getStorageAsJson: (callback) ->
210-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
210+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
211211
callback JSON.stringify roseStorage, undefined, 2
212212

213213
@setStorage: (store, callback) ->
214-
kango.invokeAsync 'kango.storage.setItem', 'roseStorage', store, callback
214+
kango.invokeAsyncCallback 'localforage.setItem', 'roseStorage', store, callback
215215

216216
@getSettings: (callback) ->
217-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
217+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
218218
settings = roseStorage.settings
219219
callback settings || {}
220220

221221
@setSettings: (key, settings) ->
222-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
222+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
223223
roseStorage.settings[key] = settings
224224

225-
kango.invokeAsync 'kango.storage.setItem', 'roseStorage', roseStorage
225+
kango.invokeAsyncCallback 'localforage.setItem', 'roseStorage', roseStorage
226226

227227
@getLastExtractionTime: (network, extractorName) ->
228228
return new RSVP.Promise (resolve) ->
229-
kango.invokeAsync 'kango.storage.getItem', 'extractorTimes', (extractorTimes) ->
229+
kango.invokeAsyncCallback 'localforage.getItem', 'extractorTimes', (extractorTimes) ->
230230
data = $.extend true, {}, extractorTimes
231231
if data?[network]?[extractorName]?
232232
resolve data[network][extractorName]
@@ -235,19 +235,19 @@ class @Storage
235235

236236
@setLastExtractionTime: (network, extractorName, time) ->
237237
return new RSVP.Promise (resolve) ->
238-
kango.invokeAsync 'kango.storage.getItem', 'extractorTimes', (extractorTimes) ->
238+
kango.invokeAsyncCallback 'localforage.getItem', 'extractorTimes', (extractorTimes) ->
239239
# Set up storage field.
240240
extractorTimesTemp = $.extend true, {}, extractorTimes
241241
extractorTimesTemp[network] = {} unless extractorTimesTemp[network]
242242

243243
# Set timestamp.
244244
extractorTimesTemp[network][extractorName] = time
245245

246-
kango.invokeAsync 'kango.storage.setItem', 'extractorTimes', extractorTimesTemp, resolve
246+
kango.invokeAsyncCallback 'localforage.setItem', 'extractorTimes', extractorTimesTemp, resolve
247247

248248
@getLastOpenCloseInteractionType: (network) ->
249249
return new RSVP.Promise (resolve) ->
250-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
250+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
251251
roseData = new RoseData(roseStorage)
252252

253253
# Find last 'open' or 'close' interaction.
@@ -267,8 +267,8 @@ class @Storage
267267

268268
@setParticipantID: (id, network) ->
269269
return new RSVP.Promise (resolve) ->
270-
kango.invokeAsync 'kango.storage.getItem', 'roseStorage', (roseStorage) ->
270+
kango.invokeAsyncCallback 'localforage.getItem', 'roseStorage', (roseStorage) ->
271271
roseData = new RoseData roseStorage
272272
roseData.setParticipantID id, network
273273

274-
kango.invokeAsync 'kango.storage.setItem', 'roseStorage', roseData.getData(), resolve
274+
kango.invokeAsyncCallback 'localforage.setItem', 'roseStorage', roseData.getData(), resolve

bower.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"semantic-ui": "~0.15.1",
2222
"jquery.cookie": "~1.4.0",
2323
"rsvp": "~3.0.1",
24-
"moment": "~2.4.0"
24+
"moment": "~2.4.0",
25+
"localforage": "~0.9.2"
2526
}
2627
}

0 commit comments

Comments
 (0)