Commit graph

1091 commits

Author SHA1 Message Date
Damien Elmes
902800de99 answers exceeding 60 seconds now log the full 60 instead of 0 2010-12-12 02:00:06 +09:00
Damien Elmes
cc8dbccf38 don't set combinedDue twice in answerCard 2010-12-12 00:09:40 +09:00
Damien Elmes
49b744f77d limit plugin warning to once a session 2010-12-11 22:04:24 +09:00
Damien Elmes
98597dd56d bump version 2010-12-11 22:01:07 +09:00
Damien Elmes
58b20b0626 make sure subprocess is available so we can set startupinfo 2010-12-11 18:36:01 +09:00
Damien Elmes
7ab5a53e38 remove superfluous 0 2010-12-11 17:02:51 +09:00
Damien Elmes
98304accb0 return actual checksum, or sqlite tries to treat it like an int 2010-12-11 16:30:26 +09:00
Damien Elmes
35fd3de6fb reset if there were buried cards, since updatePriorities() doesn't 2010-12-11 15:55:22 +09:00
Damien Elmes
59df94ff74 add compat code for fact.setModified() 2010-12-11 12:54:30 +09:00
Damien Elmes
9f276e3163 bump version 2010-12-11 02:33:25 +09:00
Damien Elmes
e3838464a2 use rec instead of tmp for recording name 2010-12-11 02:20:36 +09:00
Damien Elmes
f42a2e4a00 rebuild q/a cache to include latex 2010-12-11 02:17:00 +09:00
Damien Elmes
7a196b3747 don't bother to return used media 2010-12-11 02:13:37 +09:00
Damien Elmes
70eb44bce2 latex improvements
- move latex preamble into a deck var and include amsmath by default
- include the pre/postamble in the hash, so changes to the preamble result in
  newly generated images
2010-12-11 02:05:00 +09:00
Damien Elmes
b0f300bb74 fix latex generation bug caused my mediaDir() always chdiring now 2010-12-11 01:46:29 +09:00
Damien Elmes
4d2d9eab81 generate latex at fact modification, not review
- latex now slots in to the formatQA hook to render images in the q/a
- moved call() to utils
- cache/uncache latex have been obsoleted. User can delete manually, and
  images will be regenerated with a DB check
2010-12-11 01:40:49 +09:00
Damien Elmes
0c9672e7b8 rewrite media support
- media is no longer hashed, and instead stored in the db using its original
  name
- when adding media, its checksum is calculated and used to look for
  duplicates
- duplicate filenames will result in a number tacked on the file
- the size column is used to count card references to media. If media is
  referenced in a fact but not the question or answer, the count will be zero.
- there is no guarantee media will be listed in the media db if it is unused
  on the question & answer
- if rebuildMediaDir(delete=True), then entries with zero references are
  deleted, along with any unused files in the media dir.
- rebuildMediaDir() will update the internal checksums, and set the checksum
  to "" if a file can't be found
- rebuildMediaDir() is a lot less destructive now, and will leave alone
  directories it finds in the media folder (but not look in them either)
- rebuildMediaDir() returns more information about the state of media now
- the online and mobile clients will need to to make sure that when
  downloading media, entries with no checksum are non-fatal and should not
  abort the download process.
- the ref count is updated every time the q/a is updated - so the db should be
  up to date after every add/edit/import
- since we look for media on the q/a now, card templates like '<img
  src="{{{field}}}">' will work now
- export original files as gone as it is not needed anymore
- move from per-model media URL to deckVar. downloadMissingMedia() uses this
  now. Deck subscriptions will have to be updated to share media another way.
- pass deck in formatQA, as latex support is going to change
2010-12-11 01:19:31 +09:00
Damien Elmes
75da977026 bump version 2010-12-09 18:01:16 +09:00
Damien Elmes
27ca04fab6 support a media prefix 2010-12-09 15:34:01 +09:00
Damien Elmes
84a98550f0 always change cwd to media dir 2010-12-09 12:55:00 +09:00
Damien Elmes
1bbffec0d6 abort download missing media early; remove obsolete forceMediaDir 2010-12-09 12:53:01 +09:00
Damien Elmes
e5d9697d28 don't break older clients with new delay1 setting 2010-12-09 12:00:00 +09:00
Damien Elmes
cdac2bf8d7 workaround card ordering bug from older versions 2010-12-09 10:43:45 +09:00
Damien Elmes
7fc593a2ce fix tag update 2010-12-08 17:05:19 +09:00
Damien Elmes
3491a5e378 add an index for modified to speed up sync.summary()
testing indicates this can produce a 2x performance improvement on lastSync=0,
and much more for partial syncs
2010-12-08 15:59:16 +09:00
Damien Elmes
fe97616ecd add temporary index for priority 2010-12-08 15:38:06 +09:00
Damien Elmes
05f60c49c8 add rebuild arg for minimal startup
this bypasses rebuilding the queue and other startup initialization and thus
loads the deck considerably faster. This is useful when you want to perform
operations on the deck like syncing, but don't need the ability to review
cards
2010-12-08 15:28:28 +09:00
Damien Elmes
878c9abb83 bump version 2010-12-07 18:04:53 +09:00
Damien Elmes
9f91e904b2 re-enable locked check 2010-12-07 17:18:17 +09:00
Damien Elmes
1a5c8d2435 fix from marcus for "field":value search 2010-12-07 17:13:25 +09:00
Damien Elmes
0194296839 failed cards at end if !delay0 && !failedCardMax 2010-12-07 16:55:03 +09:00
Damien Elmes
a383223e02 provide more info in sync error messages; catch zlib decode errors 2010-12-07 16:48:49 +09:00
Damien Elmes
2013e7e4ff conditional delete of css 2010-12-07 14:35:16 +09:00
Damien Elmes
15763f8f3c make sure we don't commit during a sync
updateDynamicIndices() is done on next deck load anyway
2010-12-07 11:59:02 +09:00
Damien Elmes
039af66a9d don't rebuild counts in applyPayload(), as the deck will be reopened 2010-12-07 11:56:43 +09:00
Damien Elmes
4c8f2d3b47 add finish() command to sync protocol 2010-12-07 11:02:23 +09:00
Damien Elmes
0af8da9cb8 sync updates
- set lastSync on successful upload, not before it
- make sure source file is closed
- use v2 sync protocol
2010-12-07 09:20:31 +09:00
Damien Elmes
da97701b2d disable lastSync fudging again 2010-12-07 09:19:09 +09:00
Damien Elmes
2a8ef89ee5 remove unused binding 2010-12-07 07:26:33 +09:00
Damien Elmes
a2cd19f49a tell users how they can disable the move check 2010-12-05 17:43:54 +09:00
Damien Elmes
458357548f more sqlalchemy workarounds 2010-12-02 23:38:06 +09:00
Damien Elmes
a23098c92c bump version 2010-12-02 09:55:06 +09:00
Damien Elmes
9259718fd5 set syncName after full download 2010-12-02 07:23:54 +09:00
Damien Elmes
7dd57887d0 update learn more for new spacing 2010-12-02 06:48:45 +09:00
Damien Elmes
b5dd8a9f4b update cram code for new spacing 2010-12-02 06:47:16 +09:00
Damien Elmes
bac4acdaa8 reworked handling of spaced cards; add cms argument to previewFact()
- obsolete spaceUntil - it serves no useful purpose
- the old per-model spacing variables are obsolete, as the new approach
  requires uniform spacing across all models for new cards
- introduce a new per-deck variable: newSpacing
- don't fill new queue if we've done today's cards
- still need to check cramming / review early

newSpacing is a time in seconds to delay introduction of sibling new cards.
It can be applied as many times as necessary as there is no harm in new cards
being delayed repeatedly. Because the default queue length is 200 and it can
take quite some time for the spaced cards to be placed in the queue again, we
use a separate array to track spaced new cards provided the configured delay
is less than 20 minutes. At times under 20 minutes this number is not a
guaranteed minimum spacing - if the new card queue is empty the spaced cards
will be flushed before checking the new queue again, as otherwise we end up
trying to fill on every repetition. The due counts no longer decrease by more
than one if the spacing is less than the due cutoff, since that confused some
users.

Review cards are now placed at the end of the current review queue, and will
never be rescheduled to a different day. The old approach had a number of
problems:

- the more card models you had, the more likely a card would be spaced
  multiple times, resulting in you forgetting the card before you get a chance
  to review it
- spacing was applied even if the due card was already late
- repeatedly failing one card over a period of days or weeks would also stave
  the other cards of attention
2010-12-02 06:33:40 +09:00
Damien Elmes
53fbc9b3ee if spacing is disabled, don't decrement counts 2010-12-01 02:54:21 +09:00
Damien Elmes
bb901dfa16 make sure all fields have a font set 2010-12-01 02:42:13 +09:00
Damien Elmes
9fed5e2bc1 work around sqlalchemy problem 2010-12-01 01:21:05 +09:00
Damien Elmes
2352502807 bump version 2010-11-30 03:35:45 +09:00
Damien Elmes
ae388595da add whitespace preservation flag; only show active card models when previewing 2010-11-30 03:28:08 +09:00
Damien Elmes
a5af8fb8e9 convert pystache to private library since it doesn't behave like upstream 2010-11-29 22:51:55 +09:00
Damien Elmes
da1cfa52b1 mention editFontFamily unused 2010-11-29 22:33:05 +09:00
Damien Elmes
b349a96fa5 drop most of the per-card formatting 2010-11-29 22:27:19 +09:00
Damien Elmes
74a0998a36 bump version 2010-11-28 18:21:00 +09:00
Damien Elmes
255deb9e9e elaborate on debug msg 2010-11-28 18:14:09 +09:00
Damien Elmes
689a744266 bump version 2010-11-28 02:32:59 +09:00
Damien Elmes
850d883ab4 update rest of code to recognize&use new rendering 2010-11-28 02:26:53 +09:00
Damien Elmes
ac8f613aca use pystache for template rendering; autoconvert old style for now 2010-11-28 02:06:54 +09:00
Damien Elmes
f247133ed8 make syncName work with foreign chars 2010-11-27 13:14:16 +09:00
Damien Elmes
ca9aeaa086 don't allow mature delay over a week for now; fix delay being reset to 0 2010-11-26 23:35:26 +09:00
Damien Elmes
386de21f87 don't fudge matplotlib path on win32 2010-11-26 21:59:09 +09:00
Damien Elmes
e58d7f8dac bump version 2010-11-26 04:20:40 +09:00
Damien Elmes
84b99b1ae5 don't allow tags to be prefixed with a colon, as this breaks sqlite 2010-11-26 03:49:01 +09:00
Damien Elmes
3aa787a146 remove print statement 2010-11-26 03:39:58 +09:00
Damien Elmes
00087ed101 find duplicates support 2010-11-26 03:26:02 +09:00
Damien Elmes
d539018137 support multiple facts in fid: query 2010-11-26 03:25:32 +09:00
Damien Elmes
367143f4f3 make sure to set cards as not due when resetting/rescheduling for old clients 2010-11-26 01:49:10 +09:00
Damien Elmes
f4a35e9b03 support tags: at the top of file to import; fix comment stripping 2010-11-26 01:48:54 +09:00
Damien Elmes
e3dd736460 add ability to update fields when importing 2010-11-26 01:36:24 +09:00
Damien Elmes
dd00d1a5e1 when rebuilding tag priorities, don't include obsolote suspended 2010-11-25 21:56:08 +09:00
Damien Elmes
8f18299cc5 typo 2010-11-24 05:39:06 +09:00
Damien Elmes
f698481c19 don't keep changing the hard interval on load
only adjust it if it looks like the defaults haven't been changed
2010-11-24 05:32:09 +09:00
Damien Elmes
6bdca8b3c6 fix available card limiting when using %(tags)s, %(cardModel), etc 2010-11-24 05:14:07 +09:00
Damien Elmes
45dfc97e9f add axis labels to graphs
note that due to limitations in the graphing library, these can't be
translated at the moment.
2010-11-24 05:09:00 +09:00
Damien Elmes
33567edb3e numerous graph changes
- use bar graphs instead of line graphs for 3 months or less
- easier to read shades of blue for reps graph
- simplify day cutoff calculation
- fix off by one bug in work done data
- add missing entries when calculating cumulative due
2010-11-24 04:30:55 +09:00
Damien Elmes
7491cfc521 new syncName handling
- the local deck name must now match the online deck
- syncName is a hash of the current deck's path or None
- the hash is checked on deck load, and if it is different (because the deck
  was copied or moved), syncing is disabled. This should prevent people from
  accidentally clobbering their online decks
2010-11-23 23:12:34 +09:00
Damien Elmes
6ec898ca4b Require explicit reset for most queue-modifying functions
When you call operations like deleteCards(), suspendCards() and so on, it is
now necessary to call deck.reset() afterwards. This allows the calling code to
delay a reset if necessary. If the calling code calls a function that says the
caller must reset, the caller should be sure to call .reset() and fetch the
current card again. Failure to do the latter will result in answerCard()
attempting to remove the card from the queue, when the queue has been cleared.
2010-11-23 17:41:36 +09:00
Damien Elmes
943c9a0e5f make sure the finished message displays cards due tomorrow 2010-11-23 15:33:54 +09:00
Damien Elmes
03503cd9b9 fix cram from ids case 2010-11-22 08:09:20 +09:00
Damien Elmes
b03f30c279 no need to adjust hardInterval in upgrade; handled in deck open 2010-11-21 14:24:46 +09:00
Damien Elmes
76135dc8be updated failed card handling when cramming
- temp suspend all answered cards, regardless of type
- fails influence the standard scheduling too
2010-11-21 13:39:28 +09:00
Damien Elmes
37e269ab81 bump version for coming development release 2010-11-21 12:58:14 +09:00
Damien Elmes
937d6a6513 update earliestTime() for new failed cards handling 2010-11-21 12:32:58 +09:00
Damien Elmes
b4493f0ec8 user may set young delay to more than a day 2010-11-21 12:25:54 +09:00
Damien Elmes
8e9d14a0fd avoid passing the second fade argument, as it seems to be more robust 2010-11-16 18:04:04 +09:00
Damien Elmes
c2f2225b7f update combinedDue for the current card object, not just for the db 2010-11-16 11:27:27 +09:00
Damien Elmes
0afec850c0 on second thought, avoid suspended cards or this will bite us in the future 2010-11-15 14:29:52 +09:00
Damien Elmes
1cd5125d4e remove the rest of the obsolote rebuildTypes() code 2010-11-15 14:27:52 +09:00
Damien Elmes
26470c997e remove unused where clause from rebuildTypes() 2010-11-15 14:07:13 +09:00
Damien Elmes
6d2e32e2df finished message should use cutoff + 24hrs 2010-11-14 08:16:07 +09:00
Damien Elmes
6f8a5d6a24 fix wrong priority code in rebuildTypes() 2010-11-14 08:11:28 +09:00
Damien Elmes
aa753d35a5 don't include suspended cards in graphs 2010-11-14 07:37:51 +09:00
Damien Elmes
1f8adc791a a few failed cards related fixes
- make sure cardLimit() matches on sql statements that are broken over lines
- fix logic in getCardId()
- don't increment failed count if delay1>0 and card was mature
2010-11-13 21:39:52 +09:00
Damien Elmes
7502fba5ce change failed card handling
The old delay1 behaviour isn't easy to achieve with the queue code, as we only
refresh the queue when it's emptied, and if the user has delay1 set to say 9
hours, failed mature cards sitting in the queue could prevent subsequent young
failures from being displayed. Instead we convert delay1 to a count in days in
which to offset failed mature cards. 0 means the same time as delay0, 1 means
show the card a day later, and so on. This means users will lose the ability
to delay mature cards for x number of minutes more than young cards, but a
scan of AnkiOnline decks indicates that's not often done.

We also need to use a separate cutoff for failed cards, since we need to be
able to display them as they expire if the user has disabled per-day
scheduling.

And instead of marking cards as due in the future, we set their due time to
the current time, and move the delay0 calculation to getCardId(). This means
that if the user changes their failed card settings from say 1 hour to 10
minutes, the changes apply to the currently failed cards and not just cards
failed in the future.
2010-11-13 21:15:41 +09:00
Damien Elmes
b69fd48768 more type handling updates; don't munge counts on sync
In various parts of the code we need to get all cards of a given category
(new, failed, etc) regardless of whether they're suspended, buried, etc. So we
store the true type in the obsolete relativeDelay column and add in index for
it, because it's cheaper than putting indices on reps & successive.
2010-11-13 18:39:24 +09:00
Damien Elmes
268d2645fd delete cards that have the wrong card model 2010-11-13 16:33:39 +09:00
Damien Elmes
274017036a add sanity limits to cutoff calculation 2010-11-13 12:00:01 +09:00
Damien Elmes
4a35dbe6b2 python2.7/win32 fix for latex 2010-11-12 13:05:43 +09:00
Damien Elmes
919353c57d only require due to be past cutoff if the card was passed 2010-11-12 12:51:53 +09:00