https://github.com/mnemosyne-proj/mnemosyne/issues/241

- force reupload logs?
- pip install support
- replace setup.py.
- migrate from nose
- put all of Mnemosyne in a separate thread?

- more Azure plugins?
- postpone indefinitely/stop scheduling/postpone 100 years/remove from learning process?
Android:

- better way to use sdcard
- look into fixes reported by dashboard
- check 'redraw now'
- setting to allow choosing the database location?
- revisit multiple database option?
- 'sync' button should sync directly without going through the sync settings
 dialog. Put the settings in a settings window instead.
 http://alvinalexander.com/android/android-tutorial-preferencescreen-preferenceactivity-preferencefragment
-make sure Android uploads logs as well
-set default grade?
-plugin to hide card, i.e. no longer show it?
-video
-gestures?
-option to globally increase / decrease font size with respect to desktop
-custom fonts?


Minor bugs / issues:

- change colour of divider if the background is black
- handle to change Q/A split?
- make QA in one window default
- replace size heuristic by off-screen rendering again? https://stackoverflow.com/questions/53524652/is-it-possible-to-render-qwebenginepage-qwebengineview-offscreen
- Kamil Jońca: https://mnemosyne-proj.org/cards/latin. Make sure to Export 1::foo before 1::foo::bar
- better checkmack icon in stylesheet for learning modes in menu
- no sync conflicts between edit and review
- renaming saved sets only changing case does not work.
- datetime.datetime.now() does not seem to respect DST inside Mnemosyne, but it does work in a standalone Python programme.
-saving of folded tree state also from 'activate cards' dialog
-test speed of new cheroot
-editing a tag by clicking in the tree does not get saved
- wheelock anki deck:
  - where does div on import appear? e.g. numerus
  - searching for div turns up wrong results?
  - empty ()
- checking for unused tags scales badly when deleting 1500 cards
- can result in deleting same tag twice?
-Are the configuration settings properly synced? Especially when creating a new clone.
-Better video support?
-Delete current card which is sentence card with only a sentence field does not
 seem to work.
-when saving the position and the selection in the card browser, would it be
 better to store ids rather than row numbers? This affects the case where
 there are filters active, whose state changes due to the edit. But what
 then if the edit removes the current selection from the filter?
-Adding the "enabled" tag does not automatically get rid of the cross-out in the
 card browser.
-Prevent commas in tag names also when using 'create_new_cards' in script.
-Incoming sync when card browser is open does not work.
-Add cloze from card browser, preview does not update correctly
 to show new number of cards
-If there are more than 200 failed words, they are always taken at random, rather than x at a time. 
-For Latex on OSX: try and have OSX search system paths, or otherwise edit config.py
 latex = "/Library/TeX/texbin/latex -output-format=dvi -interaction=nonstopmode"
 dvipng = "/Library/TeX/texbin/dvipng -D 200 -T tight tmp.dvi"
-Anki: Q and A align top, no boundaries around content: document how to add CSS
 to fix this?
-sometimes scheduled counter goes negative? Hard to reproduce...
-migrate sync server / web server / sync dialog to qt_worker_thread
 infrastructure.
-strip HTML when doing rlt check?
-decrease size of installer by seeing if more libraries can be removed.
-example plugin for new learning modes
-run tests in different threads
-keeping a key pressed after 'grade answer' proceeds to show the question
-RTL still does not work for first cloze, in the case the sentence is more than
 1 line
 http://dotancohen.com/howto/rtl_right_to_left.html
-after sync, a cloze card type displays all hints
-sister card not automatically updated when pg-dwn through card browser
-"A <audio> B" displays only "A"
-test if initial sync on Android download archive files download, using a custom
 dot_test directory
-merge and edit dialog: if the cards contain too much info, the window is so
 large that the buttons are not visible.
-edit card to update a media file, sync with 'check for updated media files on
 client fails'
-server.py imports from libmnemosyne.utils
-import/export dialog alignment does not look nice
-Select saved set, switch tab to other criterion (deselects set) and switch
 back to original one.The set should then be autoselected again.
-layout of "add clone" is not optimal under Windows
-select saved set, delete that set: set name is still visible in windows header
-sync of changed saved set does not update title on target machine
-colon in filename https://github.com/mnemosyne-proj/mnemosyne/issues/195
-creating a new clone does not generate appearance setting events for sync
-Related: create a new cardtype through *.cards import, setting font, does not
 seem to sync across?
-if the sync changed the appearance settings, the current card's question still
 shows the old appearance
-underline and overline don't work together in review window. 
-note: sync from a to b and then to c adds latex files to the media table. Is
 this aproblem? Can the table become corrupt?
-heartbeat in headless server: if a sync request comes in while this is running,
 it will fail because of threading issues.
-Michael Campbell: I changed the background color of Mnemosyne to something
 other than white, and I noticed that it uses that color when adding new
 content. However, when that window does not have focus, it turns white again.
-tag on client, same tag on server, then sync.
 Tag names get renamed, but original tag is set inactive.
-cloze deletion in combination with latex or html does not pick up any open
 environments
-don't switch to text entry field when changing card type with the keys.
-when the server thread hangs and the main program is terminated, the cleanup
 code gets called from the main thread as opposed to from the server thread,
 and will therefore fail. (The server thread should release its connection
 itself)
-if last card had unequal split, learn ahead of schedule message does not go
 back to 50/50 split.
-webserver: map card type does not really hide the question box, just blanks the
 question
-corner case: If M > 0 and k < 0 then (a,b) is a local maximum
If M > 0 and k > 0 then (a,b) is a local minimum: eats < ... >
-move button group in review widget to designer code after pyqt upgrade.
 Also possible in add cards?
*These were all reported using Qt4, and probably no longer apply:
-Qt bug? different font size in edit box and in css
-Qt bug? Cannot restore scroll_to column in card browser after tag rename.
-Qt bug? Cntl+a select all in card browser only selects all the prefetched
 entries
-Qt bug? insertAtTop on tags combobox in add_cards does not seem to work
-Qt bug? cursor is always black, also on a black background
 https://bugreports.qt.nokia.com/browse/QTBUG-52
-Qt bug? error dialogs don't allow copying the text from it on all platforms
-Qt bug? svg Mnemosyne watermark for tip and getting started does not work under
 Linux
-Qt bug? review widget: frame.scroll does not seem to work reliably for PageUp
-Qt bug? clicking on web widget in preview dialog eats escape keypress
-Qt bug? QGraphicsWebView.loadFinished sometimes fires before images are loaded?
-Qt bug? bulleted lists: bullets are always aligned left, not centered:
Milesteiner
<ul><li>Focuses 20 to 30cm away</li>
  <li>Eyes wander and occasionally cross</li>
</ul>
-Qt bug? text + linebreak + video + linebreak + text2 does not show text2
-Qt bug? Windows titles not shown?
-Qt bug? When setting Arial as initial font to the FontDialog, it is always
 made bold.
-Qt bug? In default_criterion_widget, need to reinitialise text of label
-Qt bug? When installing the translator, need to reset window title manually.
-Qt bug? keypressEvent for 'yet to learn' works for enter, return, y, but not
 0 or 1.
-Qt bug? main_widget.set_window_title seems to work only if no title was
 defined in the ui file.
-Qt bug? cannot define sq escape character to search for literal _
-Qt bug? Kanji does not scale, but latin does
  åŽ³é‡?ã?ªè­¦æˆ’<span style="font-size:24pt;">test åŽ³é‡?ã?ªè­¦æˆ’</span>
-Qt bug
1. Add new card
2. Enter "test" on front
3. Enter "« test »" (alt+174, alt+175) on back
The card gets closed the moment one has hit the alt+..5 key and a new card is
created with just the "»" symbol.
-Qt bug: enabling word wrap on tag label breaks setting of stretch factors in
 q and a
-Qt issue: toggling a tag in the card browser using 'space' does not update the
 card list. Catched itemChanged instead of itemClicked would solve this in
 theory, but this would cause a lot of spurious updates if you toggle the parent
 of a big hierarchy. ItemActivated only seems to catch double clicks
-Qt issue: font size is rounded up to the nearest default integer in font
 selection dialog.
-component_manager:deactivate_all: https://bugreports.qt.io/browse/QTBUG-52988
-tag browser editor of tag names does not capture focus out event, so card
 count is not redrawn.
-Qt performance problem with selectRow
-Qt bug: cntro-Tabbing to different windows eats keyboard shortcuts: *-Tab to
 "Current card", *-Tab stops working and the Statistics window will not close
 with Escape.

-grep through TODO's in source code
-flake8



Other features:

- https://github.com/open-spaced-repetition/fsrs4anki
- 'not' operator in searches
- switch to PyOxidizer when it supports PyQt?

-check for required fields when using the Anki card type.

-first doing a count and then the actual a query is not a good idea:?
time 'number_of_log_entries_to_sync_for' vs 'number_of_log_entries'

-don't generate card edited logs when importing a card and no change occurs
 in a card
  #if (eval(log_entry["extra"]) == orig_card.extra_data) && \
  # tags, unless extra tags on import
  # card type
  # factview
  # Important: fact,
media, tag (check all 'already_imported' statements)

- broccoli integration? https://github.com/epfl-dlab/broccoli-plugin


-status bar: scheduled: x / not memorised: x / goal new cards: x/y
-new cards goal can overshoot, e.g. 7/5
-save state upon exit, reset at midnight
-config: goal_new_cards, new_cards_today
-Android

Other learning modes:
-add 'difficult' tag, and add 'cram difficult?'
-mixture of learn new / cram recent?
   -config: cram recent: X days, only new cards vs new + relearned cards,
    ratio between new and recent
   -for 'cramming' cards, show yes/no buttons instead of 0-5
    as visual indicator
   -log that the card is crammed
   -Unify review controllers and widgets, taking cramming buttons into account?
-forgotten only?

-generate end message for new learning modes. (learn ahead of schedule is not
always relevant)

-new scheduler Bayesian: https://github.com/fasiha/ebisu

- Mandarin / Chinese
- merge http://abananablog.com/2016/12/31/anki-trace/
- pretty HSK charts, html here  https://hanzicraft.com/lists/freque

-type answer

-option to search in tag tree?

-new learning modes for initial learning of tag? multiple choice? Select audio?

-gamification? userinfuser, habitica

-dropbox integration

-mplayer to mpv?

-Improve tag completion box: does not work when clicking in the box, and does
 not work when going back to a previous tag, e.g. if you have a,b,c and want
 to go back to an expansion on a

-daily goals: memorise x, review y, streak chart, ...

-add creation date / modification date to current card statistics

-duplicate check on answer too? Needs to check whether all necessary fields are
 marked as unique, also in F2B and B2F, vocabulary

-profile testsuite
-increase coverage
-disable latex version check in testsuite

-rework make windows-installer so as not to require keypress, so that it can be
 used from qtconsole

-option to turn off card count per tag?

-do create_database in a separate thread (see compact_database_dlg.py)

-factor out duplication of threaded UI stuff in sync and compact

-merging cards: should give an option to go back and edit?

-add login to webserver?

-clickable links in card browser (difficult, as after drawing Q or A, only the
 bitmap is saved,not the browser widget)

-settings in config.py don't play well with syncing: if the user does not
 update config.py on the target machine as well, these settings will get reset
 by the default config.py there. So, get rid of config.py and move it to an
 advanced settings plugin?

-activate cards: 'having any of these tags:' is not aligned with tag with tag
 tree

-command line switch for headless server not to check for updated card types.

-option to move dividers in edit field (e.g. for large font sizes)

-for the sentence card type without hints, use the 'meaning' font for Q in
 production, instead of the sentence font?

-optimisation: change card type for many facts which calls
 'delete_facts_and_their_data' does checking for unused tags multiple times.

-fine tuning: when merging a database, merge also the 'active' tag instead of
 just looking at the deactivated fact views? Probably more general and also
 more future proof in case of new criteria.

-menu option to copy database to USB key?

-Database locking mechanism can be circumvented if the first Mnemosyne copy
 is in the browser (or apparently has just done file-new) (Scott Youngman)
-replace locking mechanism by switching to running instance of Mnemosyne?

-do honour delete media events under sync, by checking if there are no later
 'added_media' events with the same file.

-when converting f2b to map through the card browser 'change card type',
 check if it's at all possible to convert (enough fields), before showing
 correspondence dialog.

-with full sync, option to skip media sync

-Possible to get rid of unloading in python / reloading in Qt?

-speed up science log parser?
 http://lesswrong.com/r/discussion/lw/ivw/what_should_normal_people_do/9yuy
suggests that there's some SQLite3 functionality relating to the
'union' operator which could massively speed up insertion, pointing to
http://stackoverflow.com/questions/1609637/is-it-possible-to-insert-multiple-rows-at-a-time-in-an-sqlite-database_is_

-optimise away DISTINCT and do it at the python level
-more sqlite profiling
 !./bin/python /home/pbienst/apswtrace.py ./bin/nosetests -v tests/test_sync.py:TestSync.test_add_tag
-archive old learning data, check interplay with sync
-index on cards._fact_id to speed up e.g. sister_card_count_scheduled_between?
-profile different versions of sister_card_count_scheduled_between
-try apsw again, but make sure every statement is inside a transaction

-save cookies
 http://stackoverflow.com/questions/3382640/how-can-i-load-session-information-into-qtwebkit

-Jiri Palacek: conflict resolution at card level, e.g. if 1 card causes
 conflict, but both database a and b have different non-conflicting new cards,
 merge the non-conflicting cards ond keep one of the conflicting version.

-add debug information for conflict detection?

-automatic font size adjustment:
  http://www.spookandpuff.com/examples/dynamicTextSize.html

-synonym checking just like duplicate checking?

-option to pick location of backups in config? Also shows you where the datadir
 is. Backup config too? Or explicit 'backup' option?

-bundle grades criterion? add criterion names i.e. type. Fix bug saving sets.
 Other mechanism to skip scheduled cards? What happens to saved set after
 disabling plugin?

-integrate with forvo

-insert latex tags shortcut and menu (phyTech)

-plugin for interval multiplication factor

-when exporting, progress bar when creating latex?

-add up and down arrows on browsing through the preview window?

-remove TMP adding of default o_id in sync

-circadian rythm plugin

-bundle more of the example plugins?

-'duplicate card' option in menu and browser? Or as plugin?

-default input method/keyboard layout per field?

-remove hack to preview cloze cards in card type appearance.

-plugin to reset active cards to unlearned

-make statistics refer to active cards only. Profile. (Dan Schmidt)

-add plugin example on card type specific renderer

-add doc on how to write plugin to sfinx doc

-leech detection

-Faq about how to pronounce Mnemosyne

-Optimisation: Adding a tag to a set of cards which already have this tag
 generates unneccesary log events

-card appearance: show preview live?

-store all xml as debug information during sync?

-find and replace in card browser

-way to escape [] in latex cloze cards, so as not be interpreted as cloze?

-docs on dealing with synonyms and words which have multiple meanings
 (if implemented, update card converter too) check fonts for new meanings,
 check decorators

-removing plugin with criterion should not happen if it is in use.
-warn when syncing and the other criterion plugin is not present?
-make 'grade activity criterion' an official plugin? Add tests?

-hook up all dialogs in UDP

-pinyin sort

-scrape from websites: https://bitbucket.org/nosklo/supymemo/downloads

-also allow scrolling webview widgets using up and down keys? Will probably
 require global event filter and slow everything down

-install kde translator to translate file dialogs and color dialogs
-different translators for different users?

-drag and drop in card browser, within tag tree

-worthwhile to apply same tricks from card browser to criterion applier, i.e.
 inverting selection to go from 'in large set' to 'not in small set'?
 Max time 0.6 secs, so perhaps not needed that much

-condition coverage
 http://lautaportti.wordpress.com/2011/05/07/test-coverage-analysis/

-have hierarchy in plugin names

-heising card type (radical, number of strokes)

-http://www.mblondel.org/journal/2008/08/01/web-canvas/

-infrastructure to make it easier to type certain symbols

-zooming on statistics?

-minimalist mode, without toolbar, extra text in review window.
 F11 to move fullscreen

-partial implementation of type answer (none/all/special tag? Db Attribute?
 Button?)
-draw answer, make configurable by card type

-more plugin examples: file format, custom tag, activate all cards,
 last grade filter

-if dialog like edit card or browse cards is open on server, try to close it
 when sync comes in?

-when pasting from a webpage, font formatting in 'add cards' is inconsistent.

-copy card and create a new one that way

-explain license on our website

-make filters more efficients by using regex instead of loops.

-easier function to do tag detection in plugin

-join add tags/remove tags in a single dialog? http://bit.ly/oOK27n

-Cramming scheduler changes card on heartbeart. Make something like
 'reset_and_add_current_card_to_queue_if_needed'?

-when deleting cards, only mention sister cards if there are actually sister
 cards

-allow users to show/hide/rearrange columns

-show full text on mouseover in case text does not fit in column

-integrate sqlite with ICU for unicode/chinese sorting:
http://stackoverflow.com/questions/611459/how-to-sort-text-in-sqlite3-with-specified-locale

-ellisis in QTextDocument in card browser?

-rewrite card browser in C++, or at least delegate? In that case, move
 question and answer gettingto data, and eliminate the text colors at selection
 using Qt.

-inline editing in card browser?

-editing names of card type clones, also in browser

-"Browse Cards" dialog box. "Preview card" option should have a keyboard
 shortcut.

-option purge history, refactor logging test. Should only happen in no other
 sync partners are interested in it

-synchronise history folder to guard against mobile clients not uploading their
 logs, even though they set upload_logs=True?

-skritter/cpod interop mail

-better supermemo import

-API for statusbar widgets

-detect wrong current date (last review in the future or way past)

-improve sphinxdocs: autoclass='both', document module members

-show latex errors in GUI?

-hover over extra hanzi information, hanzi statistics

-plugin for midi files

-chinese pod plugin

-"reschedule" cheating plugin

-improve learn ahead, by learing ahead per day and prioritising within each day

-http://lost-theory.org/python/ltchinese/

-download media files when giving URL

-synonym handling plugin?

-regular expression search?

-add 'add card' option to deck manager?

-animated strokes: http://lost-theory.org/ocrat/

-congratulations screen

-scheduler with minute granularity?

-change file suffix when changing export format

-sound recorder

-store _fact_ids_learned in config, such that they persist over sessions?

-paste from clipboard

-font and color comboboxes instead of dialogs in card appearance?

-preselect all in some text fields, so that the users can start typing
 immediately

-feedback about uploads in GUI / add time-out

-drag and drop of pictures, sound files

-autoupgrade, or at least notify of available upgrade (needs a separate thread)

-undo last grade + keyboard shortcut. Disable undo after logs have been purged.
 or through SQL checkpointing after changing isolation level?

-http://labs.trolltech.com/blogs/2009/03/12/wysiwyg-html-editor/

-research papers: http://act-r.psy.cmu.edu/people/index.php?id=11

-Refactor build process so that all files/directories created by
  `make setup`, `make`, `make test`, and `make coverage`, etc, all
  end up under a single 'build' directory. See https://goo.gl/Nrd5nz



Multiuser statistics analysis:

-break out card id strings to a different table and use integer _id in the
 rest of the database to save space
-move times from a later start date to save space?
-investigate origin of ._ logs
-don't do card checks for post 2.0


Design warts:

- config storage, is now scattered over 3 places (config.db, config.py,
  database.db). At least config.py should go and be replaced by an
  advanced settings menu. Document a standard way for plugins to
  save settings. Rework everything better in the sync protocol.
  Other issue related to storage is that built-in CardTypes like Sentence cannot store extra_data, so we resorted to e.g.
  storing the language info in config.db
- related: config().card_type_property(): refactor to be members of card_type as
  opposed to of config.py
