- fix an extra \r\n being included at the end of the last form var
- req()s in the middle of a sync should throw an exception if they
receive a 403, as the calling code does not check for an empty return
universal_newlines uses system locale which is ascii on osx unless
LC_CTYPE/LANG is set to utf8, so we need to be explicit about the
encoding we want instead
we also lose line buffering, so we have to explicitly flush
Previously, y axis ticks could be fractional. Fractional ticks were always rounded to the nearest whole number for display. This leads to confusing graphs where the bar and ticks do not match up. For example, if the bar is 3 and the tick is 2.5, then the bar renders just above the tick but the tick is rendered as 3. They both then appear to have value 3 but don't line up.
To fix this behavior, we now indicate to flot that for the y axis we don't want fractional tick values (by setting tickDecimals to 0). flot will pick tick values to accommodate this setting. If for some reason the ticks are fractional, which shouldn't happen, we will render to one decimal place. Otherwise we render whole numbers without the decimal. Since we are counting reviews, this behavior makes more sense, because reviews are always whole numbers and never fractional.
When adding a new cloze tag while a card is in a filtered deck, anki currently adds the new card to the Default deck.
My proposed fix checks if the card has the odid field set and then sets the did to use when generating the new cards as the odid.
- we now allow exports over 2gb/64k files - AnkiMobile and AnkiDroid
will need to be updated to support this
- avoid compressing media files in export, as in the common case of
jpg/mp3 it's much faster with no increase in size
- exports and imports now show # of files processed
- mw.progress.update() now limits # of updates per sec
When the override deck is not valid, the more intuitive behavior for users is to not override. Advanced users that really want to use this feature will immediately open the deck override settings and see that it's referencing an invalid deck. Advanced users and developers have all been stumped by the old behavior, it's simply not intuitive.
fixes https://anki.tenderapp.com/discussions/ankidesktop/15795-export
-error-doubling-br-tags
This code dates back a few years, and was probably a naive solution
for files breaking when exported with newlines. Ideally we should be
preserving the newlines and wrapping the field in quotes, but since
some people may be relying on exported files not to be quoted, we'll
wait to change this until the next major release. For now, we'll use
a space instead, which should not alter the appearance of the
rendered HTML.
Currently, field searches are confirmed by a regex search with the single option of case-insensitive (?i), and with the beginning and ending markers ^ and $. Since multi-line is not enabled, and re.DOTALL (option s) is not enabled, the field search will fail for any field with a new line
fixes the following:
- create a filtered deck and sync it
- review cards in the filtered deck and delete it
- sync again
The filtered deck deletion was bumping the mod time on cards at the
start of the sync, preventing the reviews from being synced from the
other side, leading to lost reviews and sanity check errors.
When a user renames or deletes a field, Anki tries to go through the
user's templates to substitute occurrences of that field name with its
new name or remove the field.
However, if the user has multiple Mustache placeholders on a single
line, this does not work as intended because the leading (.*) capture
group grabs the text in-between the two (or more) Mustache placeholders.
Examples:
{{#Flag}}
...
{{/Flag}}{{^Flag}}
...
{{/Flag}}
or
{{Front}} {{#Flag}}...{{/Flag}}
or
{{Front}} Hello. {{Victim}}
Previously they were allowed to be added, but all searches and
operations treated them as case-sensitive, creating an inconsistency.
The new implementation will change new tags with different case than
existing ones to the version currently in the database.
This may cause some slowdown in collections with a very large number of
tags since the only way to do this at the moment is to scan through
every one of them. Changing the format tags are stored in in the future
may be useful.
deletes in particular take some time for the server to process, but
don't require much bandwidth, leading to the progress appearing to
have pause when content is actually being processed
this also gives the user an idea of how long the process will take to
complete
- media syncing no longer locks the account, so it can be done
in the background in the future, and multiple clients can safely
sync media at the same time
- all operations are now idempotent, so they can be repeatedly safely
in the event of a connection error
- whether it's a normal incremental sync, an initial sync,
or the media database has been deleted, no files will be uploaded
or downloaded if they already exist on the other side
- file removals are now chunked like additions & updates, preventing
timeouts due to large requests
- if the server can't process a chunk in time, it will return a count
of what it did process, so the client can retry the rest
Notes for AnkiDroid:
- when porting this, recommend you pick a different name for the
.media.db2 file, so users don't accidentally copy the AD version to
the desktop or vice versa
- please make sure filenames are added to the zip in NFC form
If duplicate notes are already in the collection and, based on the first
field of all of them, they should be updated, update all of them instead
of just the first one we come across.
When "allow HTML" was turned off, Anki was replacing newlines with <br>s
in the text of the new notes before it escaped HTML characters, so the
line breaks were becoming <br>.
Even if there are several (duplicate) notes in the collection that
match, only send the message once to avoid making it look like multiple
dupes have been added.
This change keeps drag-and-drop behavior the same except for displaying
an error if an otherwise acceptable move would nest anything underneath
a filtered deck.
Dvi isn't compatible with quite a few Latex packages. I have been trying to include chemical formulas with the chemfig package. Exposing the tool chain to plugins would be very useful. For the record, I'm currently using:
´´´python
latexCmds = [
["pdflatex", "-interaction=nonstopmode", "tmp.tex"],
["pdflatex", "-interaction=nonstopmode", "tmp.tex"],
["pdfcrop", "tmp.pdf"],
["convert", "-density", "300", "tmp-crop.pdf", "tmp.png"]
]
´´´
The 64 bit built of portaudio on OSX seems to generate a wav
file that says it's 44100 but is actually the default rate, leading
to samples playing too fast or slow.
This allows {{kana:cloze:Text}} to work. May allow users to
shoot themselves it the foot - will see how it goes in the wild
and reconsider if necessary
The SuperMemo XML importer assumed that the A-factors used by
SuperMemo map 1-1 with E-factors (which correspond to Ease in
Anki). This resulted in too large E-factors for imported items.
This change adds an A-factor to E-factor conversion to the
importer.
When importing SuperMemo XML files, indicate to the BeautifulSoup
XML parser that the <br> tag is self-closing. This prevents it
from adding a matching </br> for every <br> tag. These extraneous
tags resulted in extra newlines in items imported from SuperMemo.
While we're at it, fix the same bug for a couple of other
self-closing HTML tags.
commit 79ed57a445 prevented reschedule
on cards in a filtered deck, but it is more user friendly to
automatically move back to the home deck instead. we also don't need
to removeLrn() for review cards, because we're updating type+queue+odue
ourselves
if not, removeLrn() resets due=odue and odue=0, leading to an invalid
delay calculation when they're later reviewed in the filtered deck
to fix this we'll need to make the same changes required to support
learning cards retaining their state when being emptied from a
filtered deck
we want to be able to log the initial automatic sync, which
happens before the debug logging was set up in ankiqt
also skip the flush, as it should eventually get written
- tweak sync code so that a failure in loading the collection
won't leave the app with an unopen collection
- don't show corrupt collection message when the error is not
a db error
- catch the temp folder issue when loading the collection. i suspect
this was the issue that was causing some people to end up with
an open anki instance with no collection loaded
in the upcoming daily unburying, this could lead to a state
where the remote end unburies just at the start of sync
and clobbers more recent changes made on the local end
This reverts commit 2d4e88afbd.
On second thought, this change is likely to mask the error in most cases, and
we want add-on authors to update their add-ons anyway as they would not be
handling non-latin text in 2.0.12.
- /sync/meta now returns a dictionary
- it includes the following extra fields
- msg: if non-empty, show this message at the end of the sync
- cont: if false, show above message and abort sync
- uname: the user's email address, so it can be stored by the local client to
show users who have forgotten which email address they used. in the future
this will be saved only when logging in, so do a conditional access on it
- always store media references in fields in NFC form
- always encode filenames on disk in NFC form on machines other than macs
- use relevant encoding when placing files in the media folder during syncs
and apkg imports as well
- rename 'unused media' back to 'check media'
- check media can now automatically change media references and filename
encodings to the correct format
First, burying changes:
- unburying now happens on day rollover, or when manually unburying from
overview screen
- burying is not performed when returning to deck list, or when closing
collection, so burying now must mark cards as modified to ensure sync
consistent
- because they're no longer temporary to a session, make sure we exclude them
in filtered decks in -is:suspended
Sibling spacing changes:
- core behaviour now based on automatically burying related cards when we
answer a card
- applies to reviews, optionally to new cards, and never to cards in the
learning queue (partly because we can't suspend/bury cards in that queue at
the moment)
- this means spacing works consistently in filtered decks now, works on
reviews even when user is late to review, and provides better separation of
new cards
- if burying new cards disabled, we just discard them from the current queue.
an option to set due=ord*space+due would be nicer, but would require
changing a lot of code and is more appropriate for a future major version
change. discarding from queue suffers from the same issue as the new card
cycling in that queue rebuilds may cause cards to be shown close together,
so the default burying behaviour is preferable
- refer to them as 'related cards' rather than 'siblings'
These changes don't require any changes to the database format, so they
should hopefully coexist with older clients without issue.
- add writeData() so we can add files to media folder without having to
save them in an intermediate folder first
- we were stripping or checking for illegal filename characters in
multiple places; factor those checks out into separate routines
- add * to invalid char list, and disallow both forward and backslash
- remove size checks in syncAdd(); is handled server-side