fixup board create calls, cleanup.

multisite
Floens 8 years ago
parent 891a18a154
commit 49f628a4f1
  1. 17
      Clover/app/src/main/java/org/floens/chan/core/database/DatabaseBoardManager.java
  2. 15
      Clover/app/src/main/java/org/floens/chan/core/database/DatabaseHelper.java
  3. 3
      Clover/app/src/main/java/org/floens/chan/core/database/DatabaseManager.java
  4. 4
      Clover/app/src/main/java/org/floens/chan/core/manager/BoardManager.java
  5. 5
      Clover/app/src/main/java/org/floens/chan/core/manager/WatchManager.java
  6. 6
      Clover/app/src/main/java/org/floens/chan/core/model/orm/Board.java
  7. 21
      Clover/app/src/main/java/org/floens/chan/core/site/SiteManager.java

@ -1,5 +1,7 @@
package org.floens.chan.core.database;
import com.j256.ormlite.stmt.QueryBuilder;
import org.floens.chan.core.model.orm.Board;
import org.floens.chan.core.site.Site;
import org.floens.chan.core.site.Sites;
@ -35,8 +37,19 @@ public class DatabaseBoardManager {
return new Callable<Void>() {
@Override
public Void call() throws Exception {
for (Board b : boards) {
helper.boardsDao.createOrUpdate(b);
// TODO: optimize
for (Board board : boards) {
QueryBuilder<Board, Integer> q = helper.boardsDao.queryBuilder();
q.where().eq("site", board.getSite().id())
.and().eq("value", board.code);
Board existing = q.queryForFirst();
if (existing != null) {
existing.update(board);
helper.boardsDao.update(existing);
board.update(existing);
} else {
helper.boardsDao.create(board);
}
}
return null;

@ -219,21 +219,6 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
Logger.e(TAG, "Error upgrading to version 22", e);
}
// final Site[] siteRef = new Site[1];
// getGraph().get(SiteManager.class).addSiteFromClass(Chan4.class, new SiteManager.SiteAddCallback() {
// @Override
// public void onSiteAdded(Site site) {
// siteRef[0] = site;
// }
//
// @Override
// public void onSiteAddFailed(String message) {
// throw new RuntimeException("Error adding site for db upgrade: " + message);
// }
// });
//
// // Will always be 1
// int siteId = siteRef[0].id();
int siteId = 0;
try {

@ -269,7 +269,7 @@ public class DatabaseManager {
}
public <T> void runTask(final Callable<T> taskCallable, final TaskResult<T> taskResult) {
executeTask(taskCallable, taskResult);
Future<T> f = executeTask(taskCallable, taskResult);
}
public <T> T runTaskSync(final Callable<T> taskCallable) {
@ -305,6 +305,7 @@ public class DatabaseManager {
}
return result;
} catch (Exception e) {
Logger.e(TAG, "executeTask", e);
throw new RuntimeException(e);
}
}

@ -95,7 +95,7 @@ public class BoardManager {
public void saveBoard(Board board) {
board.saved = true;
board = databaseManager.runTaskSync(databaseManager.getDatabaseBoardManager().createOrUpdate(board));
databaseManager.runTaskSync(databaseManager.getDatabaseBoardManager().createOrUpdate(board));
loadBoards();
}
@ -103,7 +103,7 @@ public class BoardManager {
public void unsaveBoard(Board board) {
board.saved = false;
board = databaseManager.runTaskSync(databaseManager.getDatabaseBoardManager().createOrUpdate(board));
databaseManager.runTaskSync(databaseManager.getDatabaseBoardManager().createOrUpdate(board));
loadBoards();
}

@ -113,7 +113,6 @@ public class WatchManager {
}
};
@Inject
ChanLoaderFactory chanLoaderFactory;
private final AlarmManager alarmManager;
@ -134,11 +133,13 @@ public class WatchManager {
private long lastBackgroundUpdateTime;
@Inject
public WatchManager(DatabaseManager databaseManager) {
public WatchManager(DatabaseManager databaseManager, ChanLoaderFactory chanLoaderFactory) {
alarmManager = (AlarmManager) getAppContext().getSystemService(Context.ALARM_SERVICE);
powerManager = (PowerManager) getAppContext().getSystemService(Context.POWER_SERVICE);
this.databaseManager = databaseManager;
this.chanLoaderFactory = chanLoaderFactory;
databasePinManager = databaseManager.getDatabasePinManager();
pins = databaseManager.runTaskSync(databasePinManager.getPins());
Collections.sort(pins, SORT_PINS);

@ -25,6 +25,9 @@ import com.j256.ormlite.table.DatabaseTable;
import org.floens.chan.core.model.SiteReference;
import org.floens.chan.core.site.Site;
/**
* A board is something that can be browsed, it is unique by it's site and code.
*/
@DatabaseTable(tableName = "board")
public class Board implements SiteReference {
@DatabaseField(generatedId = true)
@ -38,6 +41,9 @@ public class Board implements SiteReference {
*/
public transient Site site;
/**
* The board appears in the dropdown.
*/
@DatabaseField
public boolean saved = false;

@ -67,7 +67,7 @@ public class SiteManager {
public void addSiteFromClass(Class<? extends Site> siteClass, SiteAddCallback callback) {
Site site = instantiateSiteClass(siteClass);
site = createNewSite(site);
createNewSite(site);
List<Site> newAllSites = new ArrayList<>(Sites.allSites());
newAllSites.add(site);
@ -120,7 +120,12 @@ public class SiteManager {
return sites;
}
private Site createNewSite(Site site) {
/**
* Create a new site from the Site instance. This will insert the model for the site
* into the database and calls initialize on the site instance.
* @param site the site to add.
*/
private void createNewSite(Site site) {
SiteConfig config = new SiteConfig();
config.classId = Sites.SITE_CLASSES.indexOfValue(site.getClass());
config.external = false;
@ -130,8 +135,6 @@ public class SiteManager {
SiteModel siteModel = createNewSiteModel(site, config, userSettings);
initializeSite(site, siteModel.id, config, userSettings);
return site;
}
private SiteModel createNewSiteModel(Site site, SiteConfig config, SiteUserSettings userSettings) {
@ -171,6 +174,13 @@ public class SiteManager {
return instantiateSiteClass(clazz);
}
/**
* Create the instance of the site class. Catches any reflection exceptions as runtime
* exceptions.
* @param clazz the class to instantiate
* @return the instantiated clas
* @throws IllegalArgumentException on reflection exceptions, should never happen.
*/
private Site instantiateSiteClass(Class<? extends Site> clazz) {
Site site;
//noinspection TryWithIdenticalCatches
@ -184,6 +194,9 @@ public class SiteManager {
return site;
}
public static class SiteAlreadyAdded extends IllegalArgumentException {
}
public interface SiteAddCallback {
void onSiteAdded(Site site);

Loading…
Cancel
Save