});
}
+ service.migrateServerSettings = function() {
+
+ if (!service.auth) service.auth = $injector.get('egAuth');
+ if (!service.auth.token()) return $q.reject('no authtoken');
+
+ var deferred = $q.defer();
+ var settings = service.serverSettings.slice(0); // clone
+
+ function migrateNext(key) {
+ if (!key) {
+ return deferred.resolve();
+ }
+
+ service.migrateOneServerSetting(key).then(
+ function() {
+ deferred.notify('migrated ' + key);
+ migrateNext(settings.shift());
+ },
+ function() {
+ deferred.reject(
+ 'Something failed during settings migration');
+ }
+ );
+
+ }
+
+ return deferred.promise;
+ }
+
+ service.migrateOneServerSetting = function(key) {
+ console.log('migrating server setting ' + key);
+ var deferred = $q.defer();
+
+ function remove(key) {
+ return service.useSettings() ?
+ service.removeRemoteItem(key) :
+ $q.when(service.removeLocalItem(key));
+ }
+
+ var prom = service.useSettings() ?
+ service.getRemoteItem(key) :
+ $q.when(service.getLocalItem(key));
+
+ prom.then(function(value) {
+
+ if (value === undefined || value === null) {
+ remove(key); // for good measure.
+ return deferred.resolve();
+ }
+
+ service.setServerItem(key, value).then(
+ function() {
+ console.debug(
+ 'setting ' + key + ' successfully stored on server');
+
+ remove(key).then(function() {
+ console.debug(
+ 'setting ' + key + ' removed from local storage');
+ deferred.resolve();
+ });
+ },
+ function() {
+ deferred.reject('applying server setting ' + key);
+ }
+ );
+ })
+
+ return deferred.promise;
+ }
+
service.getServerItemBatch = function(keys) {
// no cache checking for now. assumes batch mode is only
// called once on page load. maybe add cache checking later.