+ s.setStorageSettings(setupData);
+ qDebug() << qPrintable(tr("Creating admin user..."));
+ mutex.lock();
+ storage->addUser(user, password);
+ mutex.unlock();
+ startListening(); // TODO check when we need this
+ return QString();
+}
+
+/*** Storage Handling ***/
+
+bool Core::registerStorageBackend(Storage *backend) {
+ if(backend->isAvailable()) {
+ _storageBackends[backend->displayName()] = backend;
+ return true;
+ } else {
+ backend->deleteLater();
+ return false;
+ }
+}
+
+void Core::unregisterStorageBackend(Storage *backend) {
+ _storageBackends.remove(backend->displayName());
+ backend->deleteLater();
+}
+
+// old db settings:
+// "Type" => "sqlite"
+bool Core::initStorage(QVariantMap dbSettings, bool setup) {
+ QString backend = dbSettings["Backend"].toString();
+ if(backend.isEmpty()) {
+ //qWarning() << "No storage backend selected!";
+ return configured = false;
+ }
+
+ if(_storageBackends.contains(backend)) {
+ storage = _storageBackends[backend];
+ } else {
+ qWarning() << "Selected storage backend is not available:" << backend;
+ return configured = false;
+ }
+ if(!storage->init(dbSettings)) {
+ if(!setup || !(storage->setup(dbSettings) && storage->init(dbSettings))) {
+ qWarning() << "Could not init storage!";
+ storage = 0;
+ return configured = false;
+ }
+ }
+ // delete all other backends
+ foreach(Storage *s, _storageBackends.values()) {
+ if(s != storage) s->deleteLater();
+ }
+ _storageBackends.clear();
+
+ connect(storage, SIGNAL(bufferInfoUpdated(UserId, const BufferInfo &)), this, SIGNAL(bufferInfoUpdated(UserId, const BufferInfo &)));
+ return configured = true;
+}
+
+void Core::syncStorage() {
+ QMutexLocker locker(&mutex);
+ if(storage) storage->sync();