st3v3nmw / obsidian-spaced-repetition

Fight the forgetting curve by reviewing flashcards & entire notes on Obsidian
https://www.stephenmwangi.com/obsidian-spaced-repetition/
MIT License
1.58k stars 189 forks source link

[FEAT] More control over the flashcard ordering #946

Open 4Source opened 6 months ago

4Source commented 6 months ago

This feature is on top of the #814 should add more control how to go through the cards during review.

I am currently working on it but I would like to here some feedback before continue.

Current Functionality image image

The new system should consist of 4 drop-down menus which are: Deck order In which order the decks get selected.

Card order In which order the cards in a deck get selected.

Deck priority How the deck order is prioritized complete the deck or only one card per deck. Could probably extended with a random option.

Card priority Which cards get prioritized to complete first.

The resulting options are listed here:

Deck order Card order Card priority Deck priority Explained Replaces current
Sequential Sequential New first Complete Goes sequentially through all decks. First all new cards in deck Sequentially within a deck (All new cards first)
&
Sequentially (once all cards in previous deck reviewed)
Sequential Sequential Due first Complete Goes sequentially through all decks. First all due cards in deck Sequentially within a deck (All due cards first)
&
Sequentially (once all cards in previous deck reviewed)
Sequential Sequential Any first Complete Ignores new and due goes through one after another
Sequential Sequential New first Round robin Goes sequentially through all decks with new cards first only one new card per deck
Sequential Sequential Due first Round robin Goes sequentially through all decks with due cards first only one due card per deck
Sequential Sequential Any first Round robin Goes sequentially through all decks only one card per deck
Sequential Random New first Complete Goes sequentially through all decks. First all new random cards in deck Randomly within a deck (All new cards first)
&
Sequentially (once all cards in previous deck reviewed)
Sequential Random Due first Complete Goes sequentially through all decks. First all due random cards in deck Randomly within a deck (All due cards first)
&
Sequentially (once all cards in previous deck reviewed)
Sequential Random Any first Complete Ignores new and due goes through one deck after the other and gives random card within deck
Sequential Random New first Round robin Goes sequentially through all decks with new cards first only one random new card per deck
Sequential Random Due first Round robin Goes sequentially through all decks with due cards first only one random due card per deck
Sequential Random Any first Round robin Goes sequentially through all decks only one random card per deck
Random Sequential New first Complete Goes randomly through all decks. First all new cards in deck Sequentially within a deck (All new cards first)
&
Randomly (once all cards in previous deck reviewed)
Random Sequential Due first Complete Goes randomly through all decks. First all due cards in deck Sequentially within a deck (All due cards first)
&
Randomly (once all cards in previous deck reviewed)
Random Sequential Any first Complete Ignores new and due goes through one deck than randomlly selects a new deck gives one deck after the another within the deck
Random Sequential New first Round robin Goes randomly through all decks with new cards first only one new card per deck
Random Sequential Due first Round robin Goes randomly through all decks with due cards first only one due card per deck
Random Sequential Any first Round robin Goes randomly through all decks only one card per deck
Random Random New first Complete Goes randomly through all decks. First all new random cards in deck Randomly within a deck (All new cards first)
&
Randomly (once all cards in previous deck reviewed)
Random Random Due first Complete Goes randomly through all decks. First all due random cards in deck Randomly within a deck (All due cards first)
&
Randomly (once all cards in previous deck reviewed)
Random Random Any first Complete Goes randomly through all deck when completed with random card from deck
Random Random New first Round robin Goes randomly through all decks with new cards first only one random new card per deck
Random Random Due first Round robin Goes randomly through all decks with due cards first only one random due card per deck
Random Random Any first Round robin Goes randomly through all decks with any card first only one random card per deck Random card from random deck
&
Every card a random deck with a random card Ignoring new and due

This should nearly address any possible way someone would like to configure the review at least when deck priority includes a random option. And if there are any other needs I think on this base there could be easily added in future.

I would love to hear your thoughts on this, so please share.

ronzulu commented 6 months ago

Hi @4Source

Wow. Man, you've put in so much work to get to this point. I've only had a chance to look at this briefly, but had a few questions for you.

Are the "deck priority" and "card priority" headings crossed over against the column content? image

I'm wondering if it would be possible to stage the development, rather than adding in everything all in one go.

So I'm curious which options are ones that:

@st3v3nmw might think differently, and in the end this is his baby, but I know that for every feature added it requires more than just the implementation time. There is writing the unit test cases, having it reviewed by Stephen or myself et cetera.

Hence why I'm wondering if it would be possible to stage the development. Ones that are "nice to have" could be moved to a separate issue, and you could see if people comment and indicate that they would use it if it was implemented.

Kudos once again for thinking this all through, it must have taken serious effort!

Cheers Ronny

4Source commented 6 months ago

Yeah this took a while. I really thought about this a while (couple of weeks now).

Are the "deck priority" and "card priority" headings crossed over against the column content?

Ohh yes there are switched I will fix this.

I'm wondering if it would be possible to stage the development, rather than adding in everything all in one go.

Yes I Think this should be possible. And for sure easier to review. A possible Solution could be to firstly ignore the Round robin options and just implement it with only the Complete Deck priority this would halve the amount of possible combinations. Also the Any first could be set to only be allowed when Deck & Card order are both set to Random. This would only keep the existing Configurations but would setup the Base for the Additional Configurations. Which could be added in 2. stage or any later stage of development.

So I'm curious which options are ones that:

  • you want to see because it will be helpful for you
  • other users have requested in other issues (I do keep an eye out on most things, nothing immediately comes to mind)
  • you think would be "nice to have"

I'am at the moment not happy with the currently available options and thought I couldn't be the only one who don't would like to have more control how the review presents me the cards. And adding more and more Options to the existing drop down would not be really efficient. And would make a later refactoring harder. I didn't find any related issues, so I don't think others have requested something similar.

@st3v3nmw might think differently, and in the end this is his baby, but I know that for every feature added it requires more than just the implementation time.

This is one of the reasons why I created this issue, to avoid wasting my time implementing something what don't get included.

There is writing the unit test cases, having it reviewed by Stephen or myself et cetera.

Whit the unit test cases I could help and implement them by myself the review part on the other hand I cant really help you only thing I could do add more Comments while going through this.

4Source commented 6 months ago

This is now a lot more but I added a better description of the configurations and the option for random Deck priority. Also give each row a development stage in a order I think it would make sense. For me every thing including Stage 3 is what I would like to have. Stage 4 in my opinion is a bonus but not really necessary.

It feels like I am spamming so sry for that.

Deck order Card order Card priority Deck priority Explained Dev Stage Replaces current
seq seq New first Complete Starts at the first deck. First all new cards in the deck are gone through if there are any in this deck, then all due cards in the deck. After completing the deck, the same procedure is followed for the next deck. 1 Sequentially within a deck (All new cards first)
&
Sequentially (once all cards in previous deck reviewed)
seq seq Due first Complete Starts at the first deck. First all due cards in the deck are gone through if there are any in this deck, then all new cards in the deck. After completing the deck, the same procedure is followed for the next deck. 1 Sequentially within a deck (All due cards first)
&
Sequentially (once all cards in previous deck reviewed)
seq seq Any first Complete Starts at the first deck. No cards are prioritized, they are all gone through in the deck one after the other. After completing the deck, the same procedure is followed for the next deck. 2
seq seq New first Round robin Starts at the first deck. A new card is selected from the deck if there is none in this deck or after the card is completed, the next deck is moved to. If there are no more new cards in any deck, all due cards are processed using the same procedure "one card per deck". 3
seq seq Due first Round robin Starts at the first deck. A due card is selected from the deck if there is none in this deck or upon completion of the card, the next deck is moved to. If there are no more due cards in any deck, all new cards are processed using the same "one card per deck" procedure. 3
seq seq Any first Round robin Starts at the first deck. A card is selected from the deck, after completing the card, the next deck is moved to. All cards get processed using the same "one card per deck" procedure. 3
seq seq New first rnd Starts with the first deck. A new card is selected from the deck, if there is no card in this deck, it goes to the next deck. After the card has been completed, a random decision is made as to whether another card should be chosen from the deck or from the next deck. If there are no new cards left in any deck, all due cards will be processed using the same “one card per deck” process. 4
seq seq Due first rnd Starts with the first deck. A due card is selected from the deck, if there is no due card in that deck, the next deck is moved to. After the card has been completed, a random decision is made as to whether another card should be chosen from the deck or from the next deck. If there are no more cards due in any deck, all new cards will be processed using the same “one card per deck” process. 4
seq seq Any first rnd Starts with the first deck. A card is selected from the deck. After the card has been completed, a random decision is made as to whether another card should be chosen from the deck or from the next deck. All cards are processed using the same “one card per deck” process. 4
seq rnd New first Complete Starts on the first deck. First, all new cards in the deck are gone through in random order, if there are any in that deck, then all due cards in the deck. After completing the deck, the same procedure is followed for the next deck. 1 Randomly within a deck (All new cards first)
&
Sequentially (once all cards in previous deck reviewed)
seq rnd Due first Complete Starts on the first deck. First, all due cards in the deck are gone through in random order, if there are any in that deck, then all new cards in the deck. After the deck is completed, the same procedure is followed for the next deck. 1 Randomly within a deck (All due cards first)
&
Sequentially (once all cards in previous deck reviewed)
seq rnd Any first Complete Starts on the first deck. All cards in the deck are gone through in random order. After the deck is completed, the same procedure is followed for the next deck. 2
seq rnd New first Round robin Starts on the first deck. A new random card is selected from the deck if there is no card in that deck, or after the card is completed, is moved to the next deck. If there are no new cards left in any deck, all due cards will be processed using the same “one card per deck” process. 3
seq rnd Due first Round robin Starts on the first deck. A due random card is selected from the deck if there is no card in that deck, or after the card is completed, is moved to the next deck. If there are no more cards due in any deck, all new cards will be processed using the same “one card per deck” process. 3
seq rnd Any first Round robin Starts with the first deck. A random card is selected from the deck and moved to the next deck once the card is completed. All cards are processed using the same “one card per deck” process. 3
seq rnd New first rnd Start with the first deck. A new random card is selected from the deck. If there is no card in this deck, it moves to the next deck. After the card is completed, a random decision is made as to whether another card should be selected from the deck or from the next deck. If there are no new cards left in any deck, all due cards will be processed using the same “one card per deck” process. 4
seq rnd Due first rnd Start with the first deck. A due random card is selected from the deck. If there is no card in this pile, it moves to the next pile. After the card is completed, a random decision is made as to whether another card should be selected from the deck or from the next deck. If there are no cards due in any deck, all new cards will be processed using the same “one card per deck” process. 4
seq rnd Any first rnd Start with the first deck. A card is randomly selected from the deck. After the card is completed, a random decision is made as to whether another card should be selected from the deck or from the next deck. All cards are processed using the same “one card per deck” process. 4
rnd seq New first Complete Goes randomly through all decks. First all new cards in the deck are gone through if there are any in this deck, then all due cards in the deck. After completing the deck, the same procedure is followed for the next random deck. 1 Sequentially within a deck (All new cards first)
&
Randomly (once all cards in previous deck reviewed)
rnd seq Due first Complete Goes randomly through all decks. First all due cards in the deck are gone through if there are any in this deck, then all new cards in the deck. After completing the deck, the same procedure is followed for the next random deck. 1 Sequentially within a deck (All due cards first)
&
Randomly (once all cards in previous deck reviewed)
rnd seq Any first Complete Goes randomly through all decks. No cards are prioritized, they are all gone through in the deck one after the other. After completing the deck, the same procedure is followed for the next random deck. 2
rnd seq New first Round robin Goes randomly through all decks. A new card is selected from the deck if there is none in this deck or after the card is completed, the next deck is moved to. If there are no more new cards in any deck, all due cards are processed using the same procedure "one card per deck". 3
rnd seq Due first Round robin Goes randomly through all decks. A due card is selected from the deck if there is none in this deck or upon completion of the card, the next deck is moved to. If there are no more due cards in any deck, all new cards are processed using the same "one card per deck" procedure. 3
rnd seq Any first Round robin Goes randomly through all decks. A card is selected from the deck, after completing the card, the next deck is moved to. All cards get processed using the same "one card per deck" procedure. 3
rnd seq New first rnd Goes randomly through all decks. A new card is selected from the deck, if there is no card in this deck, it goes to the next deck. After the card has been completed, a random decision is made as to whether another card should be chosen from the deck or from the next deck. If there are no new cards left in any deck, all due cards will be processed using the same “one card per deck” process. 4
rnd seq Due first rnd Goes randomly through all decks. A due card is selected from the deck, if there is no due card in that deck, the next deck is moved to. After the card has been completed, a random decision is made as to whether another card should be chosen from the deck or from the next deck. If there are no more cards due in any deck, all new cards will be processed using the same “one card per deck” process. 4
rnd seq Any first rnd Goes randomly through all decks. A card is selected from the deck. After the card has been completed, a random decision is made as to whether another card should be chosen from the deck or from the next deck. All cards are processed using the same “one card per deck” process. 4
rnd rnd New first Complete Goes randomly through all decks. First, all new cards in the deck are gone through in random order, if there are any in that deck, then all due cards in the deck. After completing the deck, the same procedure is followed for the next random deck. 1 Randomly within a deck (All new cards first)
&
Randomly (once all cards in previous deck reviewed)
rnd rnd Due first Complete Goes randomly through all decks. First, all due cards in the deck are gone through in random order, if there are any in that deck, then all new cards in the deck. After the deck is completed, the same procedure is followed for the next random deck. 1 Randomly within a deck (All due cards first)
&
Randomly (once all cards in previous deck reviewed)
rnd rnd Any first Complete Goes randomly through all decks. All cards in the deck are gone through in random order. After the deck is completed, the same procedure is followed for the next random deck. 2
rnd rnd New first Round robin Goes randomly through all decks. A new random card is selected from the deck if there is no card in that deck, or after the card is completed, is moved to the next deck. If there are no new cards left in any deck, all due cards will be processed using the same “one card per deck” process. 3
rnd rnd Due first Round robin Goes randomly through all decks. A due random card is selected from the deck if there is no card in that deck, or after the card is completed, is moved to the next deck. If there are no more cards due in any deck, all new cards will be processed using the same “one card per deck” process. 3
rnd rnd Any first Round robin Goes randomly through all decks. A random card is selected from the deck and moved to the next deck once the card is completed. All cards are processed using the same “one card per deck” process. 3
rnd rnd New first rnd Goes randomly through all decks. A new random card is selected from the deck. If there is no card in this deck, it moves to the next deck. After the card is completed, a random decision is made as to whether another card should be selected from the deck or from the next deck. If there are no new cards left in any deck, all due cards will be processed using the same “one card per deck” process. 4
rnd rnd Due first rnd Goes randomly through all decks. A due random card is selected from the deck. If there is no card in this pile, it moves to the next pile. After the card is completed, a random decision is made as to whether another card should be selected from the deck or from the next deck. If there are no cards due in any deck, all new cards will be processed using the same “one card per deck” process. 4
rnd rnd Any first rnd Goes randomly through all decks. A card is randomly selected from the deck. After the card is completed, a random decision is made as to whether another card should be selected from the deck or from the next deck. All cards are processed using the same “one card per deck” process. 1 rnd card from random deck
&
Every card a random deck with a random card Ignoring new and due

Development Stage 1

The main goal at stage 1 is to prepare the code to accept further modifications. Only implementing the existing functionallity without modifying the unit tests everything should work the same.

Development Stage 2

Add the function that there is no prioritization of due/new.

New unit test are requiered at this stage.

Development Stage 3

Implements the Round robin option for Card priority.

New unit test are requiered at this stage.

Development Stage 4

Implements the random option for Card priority.

New unit test are requiered at this stage.

4Source commented 5 months ago

Maybe this needs a rethinking here is a order that would be with this setup not possible