Skip to content

Commit

Permalink
[Fix] Fix #92 : the releases and characters (and their associated tab…
Browse files Browse the repository at this point in the history
…les, including the producers) are now properly updated when we swipe to refresh a VN details page.
  • Loading branch information
herbeth1u committed Dec 19, 2016
1 parent 8501a7f commit f03c196
Showing 1 changed file with 121 additions and 96 deletions.
217 changes: 121 additions & 96 deletions app/src/main/java/com/booboot/vndbandroid/api/DB.java
Original file line number Diff line number Diff line change
Expand Up @@ -625,16 +625,17 @@ public static void saveCharacters(Context context, List<Item> characters, int vn
int[] itemsToInsert = new int[3];

/* Retrieving all items to check if we have TO INSERT or UPDATE */
LinkedHashMap<Integer, Boolean> alreadyInsertedItems = new LinkedHashMap<>();
LinkedHashMap<Integer, Boolean> alreadyInsertedCharacters = new LinkedHashMap<>();
LinkedHashMap<Integer, Boolean> alreadyLinkedCharacters = new LinkedHashMap<>();
LinkedHashMap<Integer, Boolean> newlyInsertedCharacters = new LinkedHashMap<>();
Set<Integer> characterIds = new HashSet<>();
for (Item character : characters) {
characterIds.add(character.getId());
}

Cursor cursor = db.rawQuery("SELECT id FROM " + TABLE_CHARACTER + " WHERE id IN (" + TextUtils.join(",", characterIds) + ")", new String[]{});
while (cursor.moveToNext()) {
alreadyInsertedItems.put(cursor.getInt(0), true);
alreadyInsertedCharacters.put(cursor.getInt(0), true);
}
cursor.close();
cursor = db.rawQuery("SELECT character FROM " + TABLE_VN_CHARACTER + " WHERE vn = " + vnId, new String[]{});
Expand All @@ -646,40 +647,47 @@ public static void saveCharacters(Context context, List<Item> characters, int vn
db.beginTransaction();

for (Item character : characters) {
if (alreadyInsertedItems.get(character.getId()) == null) {
String vns = null;
try {
vns = JSON.mapper.writeValueAsString(character.getVns());
} catch (JsonProcessingException e) {
}
queries[1].append("(")
/* We've just inserted this character now so it is up to date : go to next */
if (newlyInsertedCharacters.get(character.getId()) != null) continue;

if (alreadyInsertedCharacters.get(character.getId()) != null) {
db.delete(TABLE_CHARACTER, "id=?", new String[]{character.getId() + ""});
db.delete(TABLE_TRAITS, "character=?", new String[]{character.getId() + ""});
}

String vns = null;
try {
vns = JSON.mapper.writeValueAsString(character.getVns());
} catch (JsonProcessingException e) {
}
queries[1].append("(")
.append(character.getId()).append(",")
.append(formatString(character.getName())).append(",")
.append(formatString(character.getOriginal())).append(",")
.append(formatString(character.getGender())).append(",")
.append(formatString(character.getBloodt())).append(",")
.append(character.getBirthday()[0]).append(",")
.append(character.getBirthday()[1]).append(",")
.append(formatString(character.getAliases())).append(",")
.append(formatString(character.getDescription())).append(",")
.append(formatString(character.getImage())).append(",")
.append(character.getBust()).append(",")
.append(character.getWaist()).append(",")
.append(character.getHip()).append(",")
.append(character.getHeight()).append(",")
.append(character.getWeight()).append(",")
.append(formatString(vns))
.append("),");
itemsToInsert[1] = checkInsertLimit(db, queries[1], itemsToInsert[1], TABLE_CHARACTER);
newlyInsertedCharacters.put(character.getId(), true);

for (int[] trait : character.getTraits()) {
queries[2].append("(")
.append(character.getId()).append(",")
.append(formatString(character.getName())).append(",")
.append(formatString(character.getOriginal())).append(",")
.append(formatString(character.getGender())).append(",")
.append(formatString(character.getBloodt())).append(",")
.append(character.getBirthday()[0]).append(",")
.append(character.getBirthday()[1]).append(",")
.append(formatString(character.getAliases())).append(",")
.append(formatString(character.getDescription())).append(",")
.append(formatString(character.getImage())).append(",")
.append(character.getBust()).append(",")
.append(character.getWaist()).append(",")
.append(character.getHip()).append(",")
.append(character.getHeight()).append(",")
.append(character.getWeight()).append(",")
.append(formatString(vns))
.append(trait[0]).append(",")
.append(trait[1])
.append("),");
itemsToInsert[1] = checkInsertLimit(db, queries[1], itemsToInsert[1], TABLE_CHARACTER);

for (int[] trait : character.getTraits()) {
queries[2].append("(")
.append(character.getId()).append(",")
.append(trait[0]).append(",")
.append(trait[1])
.append("),");
itemsToInsert[2] = checkInsertLimit(db, queries[2], itemsToInsert[2], TABLE_TRAITS);
}
itemsToInsert[2] = checkInsertLimit(db, queries[2], itemsToInsert[2], TABLE_TRAITS);
}

if (alreadyLinkedCharacters.get(character.getId()) == null) {
Expand Down Expand Up @@ -765,6 +773,8 @@ public static void saveReleases(Context context, List<Item> releases, int vnId)
LinkedHashMap<Integer, Boolean> alreadyInsertedReleases = new LinkedHashMap<>();
LinkedHashMap<Integer, Boolean> alreadyInsertedProducers = new LinkedHashMap<>();
LinkedHashMap<Integer, Boolean> alreadyLinkedReleases = new LinkedHashMap<>();
LinkedHashMap<Integer, Boolean> newlyInsertedProducers = new LinkedHashMap<>();
LinkedHashMap<Integer, Boolean> newlyInsertedReleases = new LinkedHashMap<>();
Set<Integer> releasesIds = new HashSet<>();
Set<Integer> producersIds = new HashSet<>();
for (Item release : releases) {
Expand Down Expand Up @@ -792,76 +802,91 @@ public static void saveReleases(Context context, List<Item> releases, int vnId)
db.beginTransaction();

for (Item release : releases) {
if (alreadyInsertedReleases.get(release.getId()) == null) {
queries[1].append("(")
.append(release.getId()).append(",")
.append(formatString(release.getTitle())).append(",")
.append(formatString(release.getOriginal())).append(",")
.append(formatString(release.getReleased())).append(",")
.append(formatString(release.getType())).append(",")
.append(formatBool(release.isPatch())).append(",")
.append(formatBool(release.isFreeware())).append(",")
.append(formatBool(release.isDoujin())).append(",")
.append(formatString(release.getWebsite())).append(",")
.append(formatString(release.getNotes())).append(",")
.append(release.getMinage()).append(",")
.append(formatString(release.getGtin())).append(",")
.append(formatString(release.getCatalog()))
.append("),");
itemsToInsert[1] = checkInsertLimit(db, queries[1], itemsToInsert[1], TABLE_RELEASE);
alreadyInsertedReleases.put(release.getId(), true);

if (release.getLanguages() != null) {
for (String language : release.getLanguages()) {
queries[2].append("(")
.append(release.getId()).append(",")
.append(formatString(language))
.append("),");
itemsToInsert[2] = checkInsertLimit(db, queries[2], itemsToInsert[2], TABLE_RELEASE_LANGUAGES);
}
}
/* We've just inserted this release now so it is up to date : go to next */
if (newlyInsertedReleases.get(release.getId()) != null) continue;

if (alreadyInsertedReleases.get(release.getId()) != null) {
db.delete(TABLE_RELEASE, "id=?", new String[]{release.getId() + ""});
db.delete(TABLE_RELEASE_LANGUAGES, "release=?", new String[]{release.getId() + ""});
db.delete(TABLE_RELEASE_PLATFORMS, "release=?", new String[]{release.getId() + ""});
db.delete(TABLE_RELEASE_MEDIA, "release=?", new String[]{release.getId() + ""});
db.delete(TABLE_RELEASE_PRODUCER, "release=?", new String[]{release.getId() + ""});
}

queries[1].append("(")
.append(release.getId()).append(",")
.append(formatString(release.getTitle())).append(",")
.append(formatString(release.getOriginal())).append(",")
.append(formatString(release.getReleased())).append(",")
.append(formatString(release.getType())).append(",")
.append(formatBool(release.isPatch())).append(",")
.append(formatBool(release.isFreeware())).append(",")
.append(formatBool(release.isDoujin())).append(",")
.append(formatString(release.getWebsite())).append(",")
.append(formatString(release.getNotes())).append(",")
.append(release.getMinage()).append(",")
.append(formatString(release.getGtin())).append(",")
.append(formatString(release.getCatalog()))
.append("),");
itemsToInsert[1] = checkInsertLimit(db, queries[1], itemsToInsert[1], TABLE_RELEASE);
newlyInsertedReleases.put(release.getId(), true);

if (release.getPlatforms() != null) {
for (String platform : release.getPlatforms()) {
queries[3].append("(")
.append(release.getId()).append(",")
.append(formatString(platform))
.append("),");
itemsToInsert[3] = checkInsertLimit(db, queries[3], itemsToInsert[3], TABLE_RELEASE_PLATFORMS);
}
if (release.getLanguages() != null) {
for (String language : release.getLanguages()) {
queries[2].append("(")
.append(release.getId()).append(",")
.append(formatString(language))
.append("),");
itemsToInsert[2] = checkInsertLimit(db, queries[2], itemsToInsert[2], TABLE_RELEASE_LANGUAGES);
}
}

if (release.getMedia() != null) {
for (Media media : release.getMedia()) {
queries[4].append("(")
.append(release.getId()).append(",")
.append(formatString(media.getMedium())).append(",")
.append(media.getQty())
.append("),");
itemsToInsert[4] = checkInsertLimit(db, queries[4], itemsToInsert[4], TABLE_RELEASE_MEDIA);
}
if (release.getPlatforms() != null) {
for (String platform : release.getPlatforms()) {
queries[3].append("(")
.append(release.getId()).append(",")
.append(formatString(platform))
.append("),");
itemsToInsert[3] = checkInsertLimit(db, queries[3], itemsToInsert[3], TABLE_RELEASE_PLATFORMS);
}
}

for (Producer producer : release.getProducers()) {
queries[5].append("(")
if (release.getMedia() != null) {
for (Media media : release.getMedia()) {
queries[4].append("(")
.append(release.getId()).append(",")
.append(producer.getId()).append(",")
.append(formatBool(producer.isDeveloper())).append(",")
.append(formatBool(producer.isPublisher()))
.append(formatString(media.getMedium())).append(",")
.append(media.getQty())
.append("),");
itemsToInsert[5] = checkInsertLimit(db, queries[5], itemsToInsert[5], TABLE_RELEASE_PRODUCER);

if (alreadyInsertedProducers.get(producer.getId()) == null) {
queries[6].append("(")
.append(producer.getId()).append(",")
.append(formatString(producer.getName())).append(",")
.append(formatString(producer.getOriginal())).append(",")
.append(formatString(producer.getType()))
.append("),");
itemsToInsert[6] = checkInsertLimit(db, queries[6], itemsToInsert[6], TABLE_PRODUCER);
alreadyInsertedProducers.put(producer.getId(), true);
}
itemsToInsert[4] = checkInsertLimit(db, queries[4], itemsToInsert[4], TABLE_RELEASE_MEDIA);
}
}

for (Producer producer : release.getProducers()) {
queries[5].append("(")
.append(release.getId()).append(",")
.append(producer.getId()).append(",")
.append(formatBool(producer.isDeveloper())).append(",")
.append(formatBool(producer.isPublisher()))
.append("),");
itemsToInsert[5] = checkInsertLimit(db, queries[5], itemsToInsert[5], TABLE_RELEASE_PRODUCER);

/* We've just inserted this producer now so it is up to date : go to next */
if (newlyInsertedProducers.get(producer.getId()) != null) continue;

if (alreadyInsertedProducers.get(producer.getId()) != null) {
/* The producer already existed : removing it so it is updated (even if used in another VN) */
db.delete(TABLE_PRODUCER, "id=?", new String[]{producer.getId() + ""});
}

queries[6].append("(")
.append(producer.getId()).append(",")
.append(formatString(producer.getName())).append(",")
.append(formatString(producer.getOriginal())).append(",")
.append(formatString(producer.getType()))
.append("),");
itemsToInsert[6] = checkInsertLimit(db, queries[6], itemsToInsert[6], TABLE_PRODUCER);
newlyInsertedProducers.put(producer.getId(), true);
}

if (alreadyLinkedReleases.get(release.getId()) == null) {
Expand Down

0 comments on commit f03c196

Please sign in to comment.