Commit graph

1816 commits

Author SHA1 Message Date
Damien Elmes
593e45a9bb decrease timeout to 30; httplib2 retries for us 2011-12-07 18:08:15 +09:00
Damien Elmes
4b190c3586 run all sync requests through one function 2011-12-07 17:57:07 +09:00
Damien Elmes
9b76a4669c compress zip, add media sanity check 2011-12-06 23:36:01 +09:00
Damien Elmes
fabec6e920 more sync resuming changes
The server now returns the next usn after every addFiles(), so an interrupted
upload doesn't cause the uploaded material to be sent back down.
2011-12-06 23:04:26 +09:00
Damien Elmes
be66c960a9 rework media syncing so we can resume 2011-12-06 22:18:41 +09:00
Damien Elmes
c0edcae238 fix some sync bugs
- don't send server graves graves back on the next sync
- make sure we update usns of models/tags/decks as well on upload
- don't die when updating decks after current deck deleted
- report counts when sanity check fails
2011-12-06 01:35:54 +09:00
Damien Elmes
52234f9d9a removeHook -> remHook 2011-12-06 00:12:36 +09:00
Damien Elmes
4a88885e83 default to compression level 6 2011-12-06 00:05:39 +09:00
Damien Elmes
594204a134 queue argument is obsolete 2011-12-06 00:05:14 +09:00
Damien Elmes
5a3d65ac61 send zips in 2.5MB increments 2011-12-05 22:06:23 +09:00
Damien Elmes
14f7c366d0 add base62 2011-12-05 22:06:09 +09:00
Damien Elmes
d52b2d4801 if counts() is passed a card, add the necessary count 2011-12-05 19:34:25 +09:00
Damien Elmes
8308c79fa6 minor refactor of count handling
- drop lrnCount; rename lrnRepCount to lrnCount
- on card fetch, decr count by card.left
- drop cardCounts(), rename repCounts() to just counts()
- fix lrn count bugs
2011-12-05 19:15:46 +09:00
Damien Elmes
e7101faff7 don't overcount learning reps by 1 2011-12-05 17:57:32 +09:00
Damien Elmes
41636f41f8 tweak sync error handling 2011-12-05 17:44:54 +09:00
Damien Elmes
0395047579 initial usn is 0, so distinguish between 0 and false 2011-12-05 15:27:06 +09:00
Damien Elmes
b33c2e99c0 return false, not 'continue', when not finished 2011-12-05 14:43:32 +09:00
Damien Elmes
b99dbb1466 don't .reset() on deck load by default anymore 2011-12-05 13:40:37 +09:00
Damien Elmes
e85603dae6 fix certs bundling 2011-12-04 19:09:47 +09:00
Damien Elmes
cca3b5cba6 scm ts should be ms too, fix unit tests 2011-12-04 17:52:01 +09:00
Damien Elmes
3b0334b04d add schema check to note save 2011-12-04 16:28:01 +09:00
Damien Elmes
1ec747dbb4 tweak sync hooks 2011-12-04 15:56:38 +09:00
Damien Elmes
6bad4cc8c2 fix sanity check 2011-12-04 15:23:43 +09:00
Damien Elmes
9d5357f7a6 after a save, revert to unmodified state; sync tweaks 2011-12-04 14:56:12 +09:00
Damien Elmes
cdb33cf6a8 don't bump mod time unless the db has actually been changed 2011-12-04 13:51:13 +09:00
Damien Elmes
0ff59b87e9 make sure we commit after media operations 2011-12-04 13:00:38 +09:00
Damien Elmes
457ee809f4 don't implicitly commit in context manager 2011-12-04 13:00:24 +09:00
Damien Elmes
8fff05618c check download before overwrite 2011-12-03 22:15:36 +09:00
Damien Elmes
6965a9c102 sync tweaks 2011-12-03 21:06:27 +09:00
Damien Elmes
d148a6cf1b bundle ssl certs; share con across all sync types 2011-12-03 16:38:45 +09:00
Damien Elmes
92352d4725 convert guid to base 91 string
Because JSON doesn't support 64 bit numbers, we need to either convert the 64
bit numbers to a string during transport, or store the ids as a string. At
base 91 a 64 bit number only takes an extra two bytes, and it means we can
dump DB results directly into JSON without having to apply any transformation.
2011-12-03 14:25:18 +09:00
Damien Elmes
1db4b41e23 use WAL mode if available; don't delete media in check 2011-12-02 22:44:00 +09:00
Damien Elmes
c961b5843a fix ivl estimation for new cards 2011-12-02 22:10:33 +09:00
Damien Elmes
8f1404642a always generate new cards on edit; don't delete 2011-12-02 21:52:33 +09:00
Damien Elmes
88da227ce1 don't make optimize/check force a full sync anymore 2011-12-02 21:52:10 +09:00
Damien Elmes
a0d910201d don't add two typeans fields on upgrade 2011-12-02 17:37:10 +09:00
Damien Elmes
dc73ba8e47 add #answerStart to default hr so we can scroll to answer 2011-12-02 17:25:40 +09:00
Damien Elmes
4a3b190453 fix bug in rev ivl adjustment that could lead to 0 day interval 2011-12-01 17:35:26 +09:00
Damien Elmes
320bb7c82f change stats alignment 2011-12-01 17:15:17 +09:00
Damien Elmes
e8f4d04420 fix hourly retention graph 2011-12-01 13:25:40 +09:00
Damien Elmes
74518264e0 raise an exception when an invalid sort type is passed 2011-11-30 12:34:49 +09:00
Damien Elmes
a1693a3691 field operations should mod the schema immediately 2011-11-30 10:57:42 +09:00
Damien Elmes
49c0a5dd82 add review count back 2011-11-29 17:12:08 +09:00
Damien Elmes
347bfbbff5 tweak stats layout 2011-11-29 16:48:18 +09:00
Damien Elmes
56ec1c6135 fix upgrading of revlog 2011-11-29 10:34:49 +09:00
Damien Elmes
3d1756df9b tweak stats 2011-11-29 10:18:37 +09:00
Damien Elmes
9dbb0b90d5 fix updateFieldCache() call 2011-11-28 21:30:47 +09:00
Damien Elmes
be3258b0a8 fix field limiting 2011-11-28 20:51:47 +09:00
Damien Elmes
73b80211c2 add current deck limit 2011-11-28 20:48:14 +09:00
Damien Elmes
8c1266ab2a less terse card state searches 2011-11-28 20:18:16 +09:00
Damien Elmes
67e4f0d1cc tweak find code 2011-11-28 20:04:39 +09:00
Damien Elmes
d903b50d5f upgrade tweaks 2011-11-28 19:14:10 +09:00
Damien Elmes
bd29318168 catch incorrect ordinals on upgrade 2011-11-28 16:57:58 +09:00
Damien Elmes
cd76706a2f make sure to remove inactive templates properly 2011-11-28 16:10:41 +09:00
Damien Elmes
0032dd39c9 return 0 count when media not copied 2011-11-28 16:05:48 +09:00
Damien Elmes
c0e2a0ba50 identify whether it's a dupe or empty 2011-11-28 16:05:37 +09:00
Damien Elmes
1235f8362a type answer is now a template replacement 2011-11-28 15:15:38 +09:00
Damien Elmes
223cc48052 don't wrap template in div; reference #card instead
We want the background color to fill the card area rather than only the size
of the card content, so we need to set the CSS for the outer container
instead.
2011-11-28 14:45:43 +09:00
Damien Elmes
ddd890ee75 more fixes for schema being accidentally modified on model add 2011-11-27 13:50:49 +09:00
Damien Elmes
478e4c9212 use the original id if available when importing 2011-11-26 12:06:17 +09:00
Damien Elmes
20c1799be5 add back the ability to show the entire collection stats 2011-11-26 10:28:42 +09:00
Damien Elmes
592078545e don't fail when upgrading an empty deck 2011-11-25 14:20:18 +09:00
Damien Elmes
39f3c84661 point out that old files are invalid too 2011-11-25 14:19:41 +09:00
Damien Elmes
faf2f061a8 log imported card/media counts 2011-11-25 14:13:14 +09:00
Damien Elmes
b5c0b1f2c7 drop required/unique field properties
Instead of having required and unique flags for every field, enforce both
requirements on the first field, and neither on the rest. This mirrors the
subject/body format people are used to in note-taking apps. The subject
defines the object being learnt, and the remaining fields represent properties
of that object.

In the past, duplicate checking served two purposes: it quickly notified the
user that they're entering the same fact twice, and it notified the user if
they'd accidentally mistyped a secondary field. The former behaviour is
important for avoiding wasted effort, and so it should be done in real time.
The latter behaviour is not essential however - a typo is not wasted effort,
and it could be fixed in a periodic 'find duplicates' function. Given that
some users ended up with sluggish decks due to the overhead a large number of
facts * a large number of unique fields caused, this seems like a change for
the better.

This also means Anki will let you add notes as long as as the first field has
been filled out. Again, this is not a big deal: Anki is still checking to make
sure one or more cards will be generated, and the user can easily add any
missing fields later.

As a bonus, this change simplifies field configuration somewhat. As the card
layout and field dialogs are a popular point of confusion, the more they can
be simplified, the better.
2011-11-24 22:16:03 +09:00
Damien Elmes
daea038aa4 deckCounts -> deckDue 2011-11-24 17:04:26 +09:00
Damien Elmes
fae153c2af don't mod schema when adding new models 2011-11-24 16:33:40 +09:00
Damien Elmes
f7790275ce groups -> decks 2011-11-23 19:28:09 +09:00
Damien Elmes
279a942642 deck -> collection 2011-11-23 17:47:44 +09:00
Damien Elmes
6e4e8249fb facts -> notes 2011-11-23 12:37:21 +09:00
Damien Elmes
10e1c1b03e tweak tag handling 2011-11-23 11:39:33 +09:00
Damien Elmes
ffc096e308 the generated cards should note use msecs 2011-11-22 08:50:23 +09:00
Damien Elmes
4a601416bc keep typeAns as a field name
We have the fact loaded into memory anyway for the q/a display
2011-11-19 23:36:40 +09:00
Damien Elmes
7a5cee1d20 remove remaining CSS; more template properties into div 2011-11-18 08:25:56 +09:00
Damien Elmes
15e4b64162 new approach to hideQ
Instead of a separate option to hide question, embed the question into the
answer format by default. Users who don't want to see the question can remove
the question fields, and users who want a separator between the question and
answer (or not) can control it in HTML now.

Also, remove obsolete field CSS, and don't accidentally chomp a character on
upgrade.
2011-11-18 05:15:15 +09:00
Damien Elmes
c76c08069e change template replacement behaviour
Previously {{field}} wrapped the field in a span with the field's font
properties. This wasn't obvious, and caused frequent problems with people
trying to combine field and template text, or use field content in dictionary
links.

Now that AnkiWeb has a wizard for configuring the front & back layout, we can
just put the formatting in the template instead.
2011-11-18 02:50:47 +09:00
Damien Elmes
770f402905 don't allow template removal to orphan facts 2011-11-17 23:09:18 +09:00
Damien Elmes
a51307701d del -> rem for consistency 2011-11-17 22:55:03 +09:00
Damien Elmes
16ecfe4097 add forgetting index adj; thanks to adam mesha for the inspiration 2011-11-15 19:15:22 +09:00
Damien Elmes
58c56c433a apply review limit; fix finished msg 2011-11-15 04:05:44 +09:00
Damien Elmes
4a4f4797db update daily counts on reset instead of each review 2011-11-15 02:53:55 +09:00
Damien Elmes
0dfcfd9171 make sure conf name set on create 2011-11-14 23:33:05 +09:00
Damien Elmes
47f4b271dc mark recycled models for card generation; drop superfluous flagModels 2011-11-08 22:32:43 +09:00
Damien Elmes
357e5e7036 media.check() takes a list of files for ankiweb integration 2011-11-08 22:32:24 +09:00
Damien Elmes
01b297babc fix model gencards 2011-11-08 22:32:02 +09:00
Damien Elmes
37b3de23cf remove inactive templates that are unused on upgrade 2011-11-08 18:52:31 +09:00
Damien Elmes
795cdd7d3f remove the concept of non-active templates
The old template handling was too complicated, and generated frequent
questions on the forums. By dropping non-active templates we can do away with
the generate cards function, and advanced users can simulate the old behaviour
by using conditional field templates.
2011-11-08 18:06:19 +09:00
Damien Elmes
f8eefe5ee1 model deleting should use the string id 2011-11-07 18:38:48 +09:00
Damien Elmes
c6c6af4328 split remote sync tests into separate file 2011-11-07 16:21:29 +09:00
Damien Elmes
aef7626557 add fieldNames(); fix scmhash() 2011-11-07 14:27:15 +09:00
Damien Elmes
688a680b54 when importing, set the new group as current 2011-11-07 14:26:56 +09:00
Damien Elmes
cbdb283b20 refactor model copying 2011-10-31 11:34:03 +09:00
Damien Elmes
b1bf50c677 make sure to save after import 2011-10-30 19:04:52 +09:00
Damien Elmes
3bf0b253f2 handle bad field references and tags; don't create empty fields 2011-10-30 10:12:24 +09:00
Damien Elmes
e99e7baa3c need to keep latex in unicode until preamble concat 2011-10-29 21:36:29 +09:00
Damien Elmes
82f9d484da don't die on non-field references 2011-10-29 20:11:37 +09:00
Damien Elmes
0c03da52f5 fix latex rewriting 2011-10-29 17:15:13 +09:00
Damien Elmes
7a849fccc5 fix allMedia() and unit tests 2011-10-29 15:31:27 +09:00
Damien Elmes
ed7367d67f fix reporting of latex errors; catch some bad commands 2011-10-29 15:12:57 +09:00
Damien Elmes
6911ae839e on upgrade convert media references in template to separate field 2011-10-29 10:44:32 +09:00
Damien Elmes
ad81a564d1 don't leak fds in upgrade 2011-10-27 17:42:23 +09:00
Damien Elmes
caf46e948a speed up import when there are lots of duplicate ids 2011-10-26 15:37:18 +09:00
Damien Elmes
1edd724c3e raise an error on an invalid file import, so cmd line tools notice 2011-10-26 15:16:32 +09:00
Damien Elmes
37ea359931 add indices to upgrade check if missing 2011-10-26 12:19:12 +09:00
Damien Elmes
4668b1a210 on import make sure we update post; use static random range 2011-10-26 06:24:14 +09:00
Damien Elmes
c16cb6ee9b fix more bugs in group count tree 2011-10-24 01:28:43 +09:00
Damien Elmes
8be318d749 when removing a group should ensure there's an active one left 2011-10-23 06:08:57 +09:00
Damien Elmes
1ce5a7552e ensure top level properties updated on rename 2011-10-23 05:45:15 +09:00
Damien Elmes
f37f4aff96 need to sort tree based on split components, not string order 2011-10-22 21:14:46 +09:00
Damien Elmes
716684edae make sure to save on group delete 2011-10-22 21:04:57 +09:00
Damien Elmes
b9dc5764a3 add group renaming 2011-10-22 20:41:33 +09:00
Damien Elmes
3068e79b42 Merge branch 'new' 2011-10-22 18:39:08 +09:00
Damien Elmes
ae839dd3a3 group deletion should be recursive; fix css in import 2011-10-22 10:04:32 +09:00
Damien Elmes
b31bd5c091 vacuum after import; make sure models.current() always returns 2011-10-22 07:39:13 +09:00
Damien Elmes
1772474765 make sure we record the prefix before changing filename 2011-10-22 04:46:21 +09:00
Damien Elmes
5ac6cc7a36 don't die if deck has no media folder 2011-10-22 04:33:49 +09:00
Damien Elmes
bbe2973952 add newly created clozes too 2011-10-22 03:58:54 +09:00
Damien Elmes
46dd863f3c convert genCards() to bulk update; drop random 2011-10-22 03:39:34 +09:00
Damien Elmes
852189808f catch attempts to save a fact that deletes a cloze card 2011-10-22 03:10:34 +09:00
Damien Elmes
a4e8eb8b74 cache required fields, drop emptyAns
For importing and the deck creation wizard, we need to be able to generate
thousands of cards efficiently. So instead of requiring the creation of a fact
and rendering it, we cache the required fields and cloze references in the
model.

Also, emptyAns is dropped, as people can achieve the same behaviour by adding
the required answer fields as conditional to the question.

Todo: refactor genCards() to work in bulk, handle cloze edits intelligently
(prompt to delete invalid references, create new cards as necessary)
2011-10-22 02:28:57 +09:00
Damien Elmes
8bb26aaf74 add the ability to skip cards for shared decks 2011-10-22 00:05:09 +09:00
Damien Elmes
4539ca2b73 import each anki1 deck as its basename 2011-10-22 00:02:28 +09:00
Damien Elmes
119217290e implement anki1 importer 2011-10-21 23:45:42 +09:00
Damien Elmes
b242b06052 import media too 2011-10-21 07:53:22 +09:00
Damien Elmes
83f8ef45ff anki2 importing and reorganize import code 2011-10-21 07:36:44 +09:00
Damien Elmes
1ba75e8dc9 don't need a separate migration package; the rest is std import 2011-10-20 22:18:55 +09:00
Damien Elmes
76960abd75 fix upgrading; drop old mnemosyne 1 importer 2011-10-20 22:05:34 +09:00
Damien Elmes
cf4abcb403 split upgrade code into separate file; use .anki2 now 2011-10-20 05:26:50 +09:00
Damien Elmes
0c85acf3f7 refactor to support early exit when no media changes
- regular sync now receives a media USN as well
- server bumps media usn not only on sync but any other media change
- added local media.hasChanged()
2011-10-06 15:34:22 +09:00
Damien Elmes
afe1ad2b0b add resync test, fix zip meta 2011-10-06 14:37:07 +09:00
Damien Elmes
b4fdf1c690 send 'continue' for multiple zips; test splitting 2011-10-06 13:51:44 +09:00
Damien Elmes
8c1f397459 ensure successive calls work 2011-10-06 13:25:01 +09:00
Damien Elmes
0a52f55e50 test removing too 2011-10-06 13:06:32 +09:00
Damien Elmes
4b710b5a87 use sha1 everywhere; the speed differences are negligible 2011-10-03 14:58:01 +09:00
Damien Elmes
eca6ef204f check file is added on remote test 2011-10-03 13:42:53 +09:00
Damien Elmes
866fe8a283 don't sync mod time; media conflicts are very unlikely 2011-10-03 13:33:55 +09:00
Damien Elmes
49181ee738 fix media zipping and addFiles call 2011-10-03 12:59:35 +09:00
Damien Elmes
5da3bba1df initial work on media syncing 2011-10-03 12:45:08 +09:00
Damien Elmes
a8d2578be5 move common auth+upload code into base class 2011-10-01 22:16:56 +09:00
Damien Elmes
bf3bb9dd32 if sync server offline, abort sync tests 2011-10-01 20:44:35 +09:00
Damien Elmes
f131021c7e remote partial syncing working; fixed mod time on finish() 2011-10-01 14:24:39 +09:00
Damien Elmes
dd5b2056fb factor out file uploads; use for incremental sync too 2011-09-30 21:09:10 +09:00
Damien Elmes
20d753591d add timestamp & common error checks to meta(); kill old code 2011-09-29 22:18:36 +09:00
Damien Elmes
aabc884341 start work on remote syncing; full up/down implemented 2011-09-29 20:58:42 +09:00
Damien Elmes
9b8e949a72 add db timeout 2011-09-29 15:57:29 +09:00
Damien Elmes
40e9eea43f fix update cutoff call 2011-09-29 04:01:11 +09:00
Damien Elmes
2a73d58532 make close() idempotent; add isEmpty() 2011-09-26 08:06:13 +09:00
Damien Elmes
22df2790f9 refactor media change logging 2011-09-25 06:33:57 +09:00
Damien Elmes
9fdfac722d fixed bug in bundling 2011-09-24 14:46:42 +09:00
Damien Elmes
667b89ecc5 support partial syncs of arbitrary size
The full sync threshold was a hack to ensure we synced the deck in a
memory-efficient way if there was a lot of data to send. The problem is that
it's not easy for the user to predict how many changes there are, and so it
might come as a surprise to them when a sync suddenly switches to a full sync.

In order to be able to send changes in chunks rather than all at once, some
changes had to be made:

- Clients now set usn=-1 when they modify an object, which allows us to
  distinguish between objects that have been modified on the server, and ones
  that have been modified on the client. If we don't do this, we would have to
  buffer the local changes in a temporary location before adding the server
  changes.
- Before a client sends the objects to the server, it changes the usn to
  maxUsn both in the payload and the local storage.
- We do deletions at the start
- To determine which card or fact is newer, we have to fetch the modification
  time of the local version. We do this in batches rather than try to load the
  entire list in memory.
2011-09-24 12:42:02 +09:00