forked from doublespeakgames/adarkroom
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Connection to the dropbox datastore api
-> this is the first attempt, improvements welcome :)
- Loading branch information
1 parent
4f82e33
commit aca23d6
Showing
3 changed files
with
340 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,308 @@ | ||
(function (Engine, Dropbox) { | ||
|
||
if (!Engine) return false; // Game Engine not available | ||
if (!Dropbox) return false; // Dropbox Connector not available | ||
|
||
var DropboxConnector = window.Engine.Dropbox = { | ||
|
||
options: { | ||
log: false, | ||
key: 'YOUR_DROPBOX_APP_KEY', // get one at https://www.dropbox.com/developers/apps | ||
table: 'adarkroom' // | ||
}, | ||
|
||
client: false, | ||
table: false, | ||
dropboxAccount: false, | ||
savegameKey: false, | ||
savegames: {0: null, 1: null, 2: null, 3: null, 4: null}, | ||
|
||
init: function (options) { | ||
this.options = $.extend( | ||
this.options, | ||
options | ||
); | ||
|
||
this._log = this.options.log; | ||
|
||
this.client = new Dropbox.Client({key: DropboxConnector.options.key}); | ||
this.connectToDropbox(false); | ||
|
||
return this; | ||
}, | ||
|
||
|
||
startDropbox: function () { | ||
if (!DropboxConnector.client || !DropboxConnector.table) { | ||
DropboxConnector.startDropboxConnectEvent(); | ||
} else { | ||
DropboxConnector.startDropboxImportEvent(); | ||
} | ||
}, | ||
|
||
startDropboxConnectEvent: function () { | ||
Events.startEvent({ | ||
title: _('Dropbox connection'), | ||
scenes: { | ||
start: { | ||
text: [_('connect game to dropbox local storage')], | ||
buttons: { | ||
'connect': { | ||
text: _('connect'), | ||
nextScene: 'end', | ||
onChoose: function () { | ||
DropboxConnector.connectToDropbox(DropboxConnector.startDropboxImportEvent) | ||
} | ||
}, | ||
'cancel': { | ||
text: _('cancel'), | ||
nextScene: 'end' | ||
} | ||
} | ||
} | ||
} | ||
}); | ||
}, | ||
|
||
startDropboxImportEvent: function () { | ||
Events.startEvent({ | ||
title: _('Dropbox Export / Import'), | ||
scenes: { | ||
start: { | ||
text: [_('export or import save data to dropbox datastorage'), | ||
_('your are connected to dropbox with account / email ') + DropboxConnector.dropboxAccount], | ||
buttons: { | ||
'save': { | ||
text: _('save'), | ||
nextScene: {1: 'saveToSlot'} | ||
}, | ||
'load': { | ||
text: _('load'), | ||
nextScene: {1: 'loadFromSlot'}, | ||
onChoose: DropboxConnector.loadGamesFromDropbox | ||
}, | ||
'signout': { | ||
text: _('signout'), | ||
nextScene: 'end', | ||
onChoose: DropboxConnector.signout | ||
}, | ||
'cancel': { | ||
text: _('cancel'), | ||
nextScene: 'end' | ||
} | ||
} | ||
}, | ||
saveToSlot: { | ||
text: [_('choose one slot to save to')], | ||
buttons: function () { | ||
var buttons = {}; | ||
|
||
$.each(DropboxConnector.savegames, function (n, savegame) { | ||
buttons['savegame' + n] = { | ||
text: _('save to slot') + n + ' ' + (savegame ? DropboxConnector.prepareSaveDate(savegame.get('timestamp')) : 'empty'), | ||
nextScene: 'end', | ||
onChoose: function () { | ||
DropboxConnector.log('Save to slot ' + n + ' initiated'); | ||
// timeout prevents error due to fade out animation of the previous event | ||
window.setTimeout(function () { | ||
DropboxConnector.log('Save to slot ' + n); | ||
DropboxConnector.saveGameToDropbox(n, DropboxConnector.savedtoDropboxEvent) | ||
}, 1000); | ||
} | ||
}; | ||
}); | ||
|
||
buttons['cancel'] = { | ||
text: _('cancel'), | ||
nextScene: 'end' | ||
}; | ||
|
||
return buttons; | ||
}() | ||
}, | ||
loadFromSlot: { | ||
text: [_('choose one slot to load from')], | ||
buttons: function () { | ||
var buttons = {}; | ||
|
||
$.each(DropboxConnector.savegames, function (n, savegame) { | ||
if (savegame) { | ||
buttons['savegame' + n] = { | ||
text: _('load from slot') + n + ' ' + DropboxConnector.prepareSaveDate(savegame.get('timestamp')), | ||
nextScene: 'end', | ||
onChoose: function () { | ||
DropboxConnector.log('Load from slot ' + n + ' initiated'); | ||
// timeout prevents error due to fade out animation of the previous event | ||
window.setTimeout(function () { | ||
DropboxConnector.log('Load from slot ' + n); | ||
DropboxConnector.loadGameFromDropbox(n) | ||
}, 1000); | ||
} | ||
}; | ||
} | ||
}); | ||
|
||
buttons['cancel'] = { | ||
text: _('cancel'), | ||
nextScene: 'end' | ||
}; | ||
|
||
return buttons; | ||
}() | ||
} | ||
} | ||
}); | ||
}, | ||
|
||
savedtoDropboxEvent: function (success) { | ||
Events.startEvent({ | ||
title: _('Dropbox Export / Import'), | ||
scenes: { | ||
start: { | ||
text: success ? [_('successfully saved to dropbox datastorage')] : | ||
[_('error while saving to dropbox datastorage')], | ||
buttons: { | ||
'ok': { | ||
text: _('ok'), | ||
nextScene: 'end' | ||
} | ||
} | ||
} | ||
} | ||
}); | ||
}, | ||
|
||
connectToDropbox: function (interactive, callback) { | ||
|
||
DropboxConnector.log('start dropbox'); | ||
|
||
var client = this.client; | ||
|
||
client.authenticate({interactive: interactive}, function (error) { | ||
if (error) { | ||
DropboxConnector.log('Dropbox Authentication error: ' + error); | ||
} | ||
}); | ||
|
||
if (client.isAuthenticated()) { | ||
|
||
var datastoreManager = client.getDatastoreManager(); | ||
datastoreManager.openDefaultDatastore(function (error, datastore) { | ||
if (error) { | ||
DropboxConnector.log('Error opening default datastore: ' + error); | ||
} else { | ||
DropboxConnector.table = datastore.getTable(DropboxConnector.options.table); | ||
DropboxConnector.loadGamesFromDropbox(); | ||
|
||
DropboxConnector.log(DropboxConnector.client.credentials()); | ||
|
||
DropboxConnector.client.getAccountInfo({}, function (error, info) { | ||
if (!error) { | ||
DropboxConnector.dropboxAccount = info.email; | ||
} | ||
}); | ||
|
||
DropboxConnector.log("Got savegames", DropboxConnector.savegames); | ||
|
||
if (typeof callback == "function") { | ||
callback.call(DropboxConnector.table); | ||
} | ||
} | ||
}); | ||
} else { | ||
DropboxConnector.log('Not connected to dropbox.'); | ||
} | ||
}, | ||
|
||
loadGamesFromDropbox: function () { | ||
|
||
var savegames = DropboxConnector.savegames; | ||
|
||
$.each(savegames, function (n) { | ||
var results = DropboxConnector.table.query({savegameId: DropboxConnector.prepareSavegameID(n)}); | ||
savegames[n] = results[0]; | ||
}); | ||
|
||
return savegames; | ||
}, | ||
|
||
loadGameFromDropbox: function (slotnumber) { | ||
|
||
var table = DropboxConnector.table; | ||
var id = DropboxConnector.prepareSavegameID(slotnumber); | ||
|
||
var results = table.query({savegameId: id}); | ||
var record = results[0]; | ||
|
||
if (record && record.get('gameState')) { | ||
Engine.import64(record.get('gameState')); | ||
} | ||
}, | ||
|
||
saveGameToDropbox: function (slotnumber, callback) { | ||
|
||
var table = DropboxConnector.table; | ||
var record = null; | ||
var success = false; | ||
var id = DropboxConnector.prepareSavegameID(slotnumber); | ||
|
||
var saveGame = { | ||
gameState: Engine.generateExport64(), | ||
timestamp: new Date().getTime() | ||
}; | ||
|
||
if (DropboxConnector.savegames[slotnumber]) { // slot aleady user -> overwrite | ||
record = DropboxConnector.savegames[slotnumber]; | ||
try { | ||
record.update(saveGame); | ||
DropboxConnector.log("Updated savegame ", slotnumber); | ||
success = true; | ||
} catch (e) { | ||
success = false; | ||
} | ||
|
||
} else { | ||
saveGame.savegameId = id; | ||
try { | ||
record = table.insert(saveGame); | ||
DropboxConnector.log("Inserted savegame ", record.getId()); | ||
success = true; | ||
} catch (e) { | ||
success = false; | ||
} | ||
} | ||
if (typeof callback == "function") { | ||
callback(success); | ||
} | ||
}, | ||
|
||
prepareSavegameID: function (slotnumber) { | ||
return 'adarkroom_savegame_' + slotnumber; | ||
}, | ||
|
||
prepareSaveDate: function (timestamp) { | ||
var date = new Date(timestamp); | ||
return date.toLocaleDateString() + ' ' + date.toLocaleTimeString(); | ||
}, | ||
|
||
signout: function () { | ||
DropboxConnector.client.signOut({}, function (error) { | ||
if (error) { | ||
alert('Error while logout from dropbox'); | ||
} else { | ||
alert('Successfully signed out.'); | ||
DropboxConnector.client = null; | ||
DropboxConnector.savegames = null; | ||
DropboxConnector.dropboxAccount = null; | ||
} | ||
}); | ||
}, | ||
|
||
log: function () { | ||
if (this._log) { | ||
console.log(arguments); | ||
} | ||
} | ||
} | ||
|
||
})(window.Engine, window.Dropbox); |
Oops, something went wrong.