0
0
mirror of https://github.com/ankidroid/Anki-Android.git synced 2024-09-20 20:03:05 +02:00

clean(DeckPicker): extract countCardsInDeckTree

Extract helper method to focus on DeckPicker logic
This commit is contained in:
David Allison 2022-01-30 04:49:16 +00:00 committed by Mike Hardy
parent 1b3ad5936c
commit cb15433b86
2 changed files with 28 additions and 11 deletions

View File

@ -104,6 +104,7 @@ import com.ichi2.anki.dialogs.customstudy.CustomStudyDialogFactory;
import com.ichi2.anki.exception.ConfirmModSchemaException;
import com.ichi2.anki.export.ActivityExportingDelegate;
import com.ichi2.anki.receiver.SdCardReceiver;
import com.ichi2.anki.servicelayer.DeckService;
import com.ichi2.anki.servicelayer.SchedulerService;
import com.ichi2.anki.servicelayer.UndoService;
import com.ichi2.anki.stats.AnkiStatsTaskHandler;
@ -142,7 +143,6 @@ import com.ichi2.utils.JSONException;
import java.io.File;
import java.util.List;
import java.util.TreeMap;
import kotlin.Unit;
import timber.log.Timber;
@ -2401,16 +2401,7 @@ public class DeckPicker extends NavigationDrawerActivity implements
return;
}
// Get the number of cards contained in this deck and its subdecks
TreeMap<String, Long> children = getCol().getDecks().children(did);
long[] dids = new long[children.size() + 1];
dids[0] = did;
int i = 1;
for (Long l : children.values()) {
dids[i++] = l;
}
String ids = Utils.ids2str(dids);
int cnt = getCol().getDb().queryScalar(
"select count() from cards where did in " + ids + " or odid in " + ids);
int cnt = DeckService.countCardsInDeckTree(getCol(), did);
boolean isDyn = getCol().getDecks().isDyn(did);
// Delete empty decks without warning. Filtered decks save filters in the deck data, so require confirmation.
if (cnt == 0 && !isDyn) {

View File

@ -18,7 +18,9 @@ package com.ichi2.anki.servicelayer
import com.ichi2.libanki.Collection
import com.ichi2.libanki.Consts
import com.ichi2.libanki.Utils
import com.ichi2.libanki.did
import java.util.*
object DeckService {
@JvmStatic
@ -32,4 +34,28 @@ object DeckService {
@JvmStatic
fun defaultDeckHasCards(col: Collection) =
col.db.queryScalar("select 1 from cards where did = 1") != 0
/**
* Counts cards in the supplied deck and child decks.
*
* Includes the count of filtered decks
* Includes filtered cards outside the tree if the home deck is included
*
* @param did Id of the deck to search
* @return the number of cards in the supplied deck and child decks
*/
@JvmStatic
fun countCardsInDeckTree(col: Collection, did: did): Int {
val children: TreeMap<String, Long> = col.decks.children(did)
val dids = LongArray(children.size + 1)
dids[0] = did
var i = 1
for (l in children.values) {
dids[i++] = l
}
val ids = Utils.ids2str(dids)
return col.db.queryScalar(
"select count() from cards where did in $ids or odid in $ids"
)
}
}