Commit Graph

184 Commits

Author SHA1 Message Date
Damien Elmes
f7062ff0c6 user-friendly warning when mpv missing 2017-10-05 13:48:24 +10:00
Damien Elmes
e1a4c52175 pass opts to main window; force zoom factor to 1 on lodpi 2017-10-03 12:12:57 +10:00
Damien Elmes
7dc8f82906 mpv support 2017-09-30 19:29:48 +10:00
Damien Elmes
0c80b5454f use separate .colpkg extension for collection exports
- allows translations of filename
- allows users to keep multiple collection exports in the same folder
- provides a clearer distinction between deck and collection packages
- the collection/backup .apkg special cases will continue to work in
future 2.1.x releases
2017-09-10 16:58:55 +10:00
Damien Elmes
d3d96222bc prefs and dialog tweaks
- manage prefs window so it only opens once, and gets closed properly
- provide silentlyClose shortcut to dialogmanager windows
2017-09-10 15:15:12 +10:00
Damien Elmes
a5bbdf0c5f fix backups failing to complete
the behaviour of daemon=True was the opposite of what I expected
2017-09-10 13:17:56 +10:00
Damien Elmes
c5188d9f3a fix backup rotation
add missing d and make pattern more specific
2017-09-10 12:56:27 +10:00
Damien Elmes
90a5a48d6c fix silentlyClose check 2017-09-08 18:42:26 +10:00
Damien Elmes
3faa82571c warn about subfolders 2017-08-28 22:01:13 +10:00
Damien Elmes
737a8d934e persistent add-on configuration
- add-ons can ship default config in a config.json file
- users can edit the config in the add-ons dialog, easily syntax-check
the json, and restore it to the defaults
- an optional config.md contains instructions to the user in markdown
format
- config will be preserved when add-on is updated, instead of being
overwritten as is the case when users are required to edit the source
files

A simple example: in config.json:

{"myvar": 5}

In your add-on's code:

from aqt import mw
config = mw.addonManager.getConfig(__name__)
print("var is", config['myvar'])

Add-ons that manage options in their own GUI can have that GUI
displayed when the config button is clicked:

mw.addonManager.setConfigAction(__name__, myOptionsFunc)
2017-08-28 20:51:43 +10:00
Damien Elmes
7b1747d650 don't throw an error when closing with tooltip or debug window open 2017-08-25 12:14:59 +10:00
Damien Elmes
194c02ed16 make sure we swallow the exception when closing
otherwise the main window sticks around with no collection
2017-08-16 21:06:50 +10:00
Damien Elmes
a66c5f555f revamp profile manager
- use a main window instead of a dialog, so the menu items of the main
window don't appear while the profile window is active on OS X
- the profile manager now has a button to automatic restoring from
backup, which will prevent old backups from being clobbered
- drop support for profile passwords
- do the right thing when user quits from the menu in profile manager
mode
2017-08-16 19:45:39 +10:00
Damien Elmes
489d16ed14 refactor profile and collection loading/unloading
- unloadCollection() now waits for all collection windows to
indicate they've closed, and calls a callback when it's done
- autosync runs when the collection is unloaded, and is no longer
responsible for reloading it
- make sure backup thread runs until completion
- ensure we return to profile manager when collection can't be loaded
- don't run the profile manager with exec_(), or opening+closing a
broken profile ends up nesting runloops
- warn if a window wasn't cleaned up as part of collection unloading
2017-08-16 17:39:37 +10:00
Damien Elmes
8ab5a3a176 use callback when closing windows
remove the old forceClose hack in favour of a callback when closing, so
all windows have a chance to save properly before the collection is
unloaded

also:

- fix a warning shown when opening about screen
- require a call to editor.cleanup() when closing a window, to make sure
 any pending js callbacks don't try to fire on a deleted object
- make sure we gc webview when closing editcurrent
- main.py still needs refactoring to make use of the change
2017-08-16 12:48:15 +10:00
Damien Elmes
8e2154dfbf change backup filename
- embed date in name to make it easier for people to locate correct
backup
- move old backups to the trash instead of deleting outright
- backups in the old format will not be rotated, and will need to be
deleted by the user - if we just deleted them at the start of  the
rotation it could lead to data loss for users moving back and forth
between 2.1 and 2.0
2017-08-14 18:53:39 +10:00
Damien Elmes
3be43c2309 use ip for loopback, as localhost is wrong on some machines 2017-08-11 20:37:04 +10:00
Damien Elmes
f3f90842dc move the inline css and some more js into separate files
- stdHtml() css= arg now takes a list of files like js=
- the files are loaded in the head of the document so that styling
that comes later in the document can easily override it

fixes:
https://anki.tenderapp.com/discussions/beta-testing/661-anki-210-beta-7/page/1#comment_43164447
https://anki.tenderapp.com/discussions/beta-testing/661-anki-210-beta-7#comment_43177130
2017-08-10 19:02:32 +10:00
Damien Elmes
c74cbf6108 fix media server port allocation
the old code was allowing the main thread to read .port before it had
been updated, and was binding to sockets that were already in use on
Windows. instead, we use a system-assigned free port and block the main
thread until it's been allocated
2017-08-08 14:56:34 +10:00
Damien Elmes
bee6931dc9 fix issues with media server not going away
- use a non-daemonized python thread
- shut the server down on exit, including from profile manager
- use a timeout on requests, or the connection that webengine holds open
will block the thread and prevent it from exiting when anki closes
2017-08-08 12:55:30 +10:00
Damien Elmes
cfb50fa03c add hook for overriding state shortcuts 2017-08-08 10:09:12 +10:00
Damien Elmes
21b770cb10 explictly exit
let's see if this helps with https://anki.tenderapp.com/discussions/beta-testing/631-anki-210-beta-4/page/2#comment_43137707
2017-08-06 14:10:51 +10:00
Damien Elmes
9958dd57a4 remove superfluous lambda arg 2017-08-02 11:34:49 +10:00
Damien Elmes
0543a4533b add devMode flag to utils
also remove the extra toolbar call in loadProfile(), as we require a
restart to update the translations anyway
2017-08-01 14:28:13 +10:00
Damien Elmes
a5997e400b fix focus setting in resume screen 2017-08-01 13:57:15 +10:00
Damien Elmes
7ad6966943 split js code out into separate files, mathjax improvements
- js code that was previously bundled in .py files is now in the
web folder
- add helpers to create links to bundled files, and update
stdHtml() to accept a list of javascript files to include
instead of text
- render MathJax in card layout and preview screens - these should be
updated in the future to update the document dynamically like the
reviewer does
- start media server earlier so it can be used to serve content for
the toolbar, etc
- work around a bug in WebEngine on Windows that could cause the
media server to hang
2017-07-28 16:35:45 +10:00
Damien Elmes
2d25069936 run garbage collector after webengine window
we GC on autosave, but doing an explicit GC prevents excess memory
consumption when rapidly opening and closing windows using
webengine
2017-07-08 12:28:11 +10:00
Damien Elmes
1fe86e1bde about tweaks
- fix sort order
- treat as a collection window so it's only opened once, and is
closed on quit
- use our standard font
2017-06-26 13:05:11 +10:00
Damien Elmes
90f7038109 fix exit code 120 when quitting in python 3.6 2017-06-26 13:03:05 +10:00
Damien Elmes
a3bdd04d42 set bgcol in ankiwebview 2017-06-23 13:07:59 +10:00
Damien Elmes
aeaf9df32f ensure only one copy of stats shown, and close with collection 2017-06-22 16:51:54 +10:00
Damien Elmes
34dcf64d76 another attempt at fixing key handling
we can't use an event filter on the top level webview, because it
ignores the return value of the filter and leads to Anki thinking
keys have been pressed twice

and if we use an event filter on the focusProxy(), the
keypress/release events are sent even when a text field is currently
focused, leading to shortcuts being triggered when typing in the answer

to solve this, we move away from handling the key press events
directly, and instead install shortcuts for the events we want to
trigger. in addition to the global shortcuts, each state can install
its own shortcuts, which we remove when transitioning to a new state

also remove the unused canFocus argument to ankiwebview, and accept a parent
argument as required by the code in forms/
2017-06-22 16:39:31 +10:00
Damien Elmes
017984c15c fix crash when opening profile from profile manager 2017-06-06 16:09:15 +10:00
Damien Elmes
76e508e25d various key handling fixes
- key presses while a webview is focused no longer make it to the
main window's keyPressEvent() routine, so AnkiWebView now uses its
event filter to pass the key events to the main window
- move the shared key handling out of keyPressEvent into
globalKeyHandler()
- make sure all key handling routines return true or false to
indicate if an event was handled or not
- remove focus when esc hit in the main window, to retain old
behaviour of allowing esc to clear focus from the type answer box
2017-06-06 15:56:21 +10:00
Damien Elmes
ca08b742fa Revert "work around https://bugreports.qt.io/browse/QTBUG-54755"
This reverts commit 0bd79abe11.
2017-06-05 16:52:22 +10:00
Damien Elmes
5bf0040838 fix errors when closing the main window with browser still open
onClose() was calling closeAllWindows(), which sends a close signal
to dialogs without force=True, causing them to fire an asynchronous
save event that calls back after the collection has been closed

instead we just rely on the fact that unloadCollection() closes all
collection windows
2017-04-26 11:22:17 +10:00
Dmitry Mikheev
69fd37a5c4 2make top webview accessable
as well as main and bottom
2017-04-21 22:21:05 +05:00
Damien Elmes
745108bffd make sure we close all windows prior to unloading the collection 2017-02-19 15:13:58 +10:00
Illia Volochii
13b7e01044 Stop inheriting from object
It is not needed in Python 3.
2017-02-07 00:21:33 +02:00
Damien Elmes
b81998a374 stop logging gc 2017-01-20 15:12:48 +10:00
Damien Elmes
9761e88ce5 ensure bottomWeb shown again when exiting resetRequired 2017-01-17 14:05:05 +10:00
Damien Elmes
c382a83395 stop forcing XP mode on windows
IIRC we were doing it to work around an issue in an older qt
2017-01-17 13:53:02 +10:00
Damien Elmes
864fbdf469 turn off buffering on crash log, and log gc start/finish 2017-01-13 20:56:24 +10:00
Damien Elmes
a05ebdbefb do GC on autosave
- ensures we're not called as part of the db progress callback
- minimises the chance of data loss if a gc causes a crash
2017-01-13 16:20:39 +10:00
Damien Elmes
0dc08bbacc fix error appearing when undo shortcut pressed when nothing to undo 2017-01-08 20:47:26 +10:00
Damien Elmes
e2573d6a1a fix error when writing to deleted.txt 2017-01-08 20:44:52 +10:00
Damien Elmes
259023f369 write backups in thread; remove strip html & compress options
we do the backup compression/writing in a separate thread so it
doesn't slow down profile switching/syncing, and remove the option
to write uncompressed backups

the strip html option is no longer used, so remove it from preferences
2017-01-08 19:29:57 +10:00
Damien Elmes
147e09a6cb run the gc only in the main thread
if it fires in the mediasrv/sync thread it could cause a crash
2017-01-08 14:42:50 +10:00
Damien Elmes
9f28d5a638 set up fault handler 2017-01-08 13:39:57 +10:00
Damien Elmes
7871949a6a fix window not resizing properly
#12 of https://anki.tenderapp.com/discussions/beta-testing/203-anki-210-alpha-5#comment_41542208
2016-12-19 10:18:47 +10:00
Damien Elmes
0bd79abe11 work around https://bugreports.qt.io/browse/QTBUG-54755 2016-12-15 21:12:51 +10:00
Damien Elmes
fb81f63fe3 work around broken debug console shortcut
this will likely break the shortcut on keyboards where : is not a
shifted ;. can revert when qt fixes the issue
2016-12-15 21:00:59 +10:00
Damien Elmes
a8e2f992c8 image support 2016-07-07 23:39:48 +10:00
Damien Elmes
258a10edc7 add titles to various webviews to make them easy to locate 2016-07-07 17:23:13 +10:00
Damien Elmes
94463991bc basic sync support
currently no progress shown on large uploads/downloads
2016-07-04 15:45:53 +10:00
Damien Elmes
a1caa93054 fix mem leaks in dialogs
- ensure we're cleaning them up after they're rejected
- run the garbage collector afterwards so the qwebengineprocess
  instances get cleaned up
2016-07-04 13:22:35 +10:00
Damien Elmes
a4cab1d8f2 remove setupFonts(), disable syncing 2016-06-23 12:06:16 +10:00
Damien Elmes
4e2bd3f739 resize toolbars to fit content 2016-06-07 14:27:33 +10:00
Damien Elmes
9abc9fde9f use a channel for bridge
acceptNavRequest was not being called for rapid updates, so it's not
usable
2016-06-06 15:50:03 +10:00
Damien Elmes
de7e40537d port majority of code to qt5.5+
- a few issues to work out still, and editor changes not done yet
- for communication between webengine and python code, we set window
.location to 'http://anki/<something>' - the leading http is
necessary for qt to call the link handler, which was introduced
in qt5.5
- the designer files now use a promoted qobject to create instances
of AnkiWebView
- we use the css zoom property to alter webengine font size based on
system dpi
- prefs and addons folder stored in new location (at least for now)
2016-05-31 18:51:40 +10:00
Damien Elmes
15b349e3a8 start port to python 3
unit tests pass and main screens of GUI load
2016-05-12 14:45:35 +10:00
Damien Elmes
1dce3eaaff drop anki1 upgrade code 2016-05-12 14:20:59 +10:00
Damien Elmes
6e7e08ebd0 be explicit about modSchema()'s check flag
- remove gui code that adds exceptions for syncing
- use check=False for all syncing and upgrade code
2014-11-03 16:28:12 +09:00
Damien Elmes
ece78a7d11 allow all ankiwebview instances to take focus
the canFocus/canCopy separate variables was silly, as we ended up
with text that could be copied from the context menu but not with
a shortcut key. also we default to allowing focus now, since that's
the more sensible default. fixes copy issues with card info dialog and
some addons
2014-09-15 15:04:14 +09:00
Damien Elmes
e5a2a9c3f8 make sure users can unload corrupt collection to create new profile 2014-07-02 06:29:53 +09:00
Damien Elmes
61b0072dcc fix handling of corrupt collections on windows
- advise user to create new profile, which prevents restores from
  backup overwriting old backups
- don't rename the collection file, as it's no longer necessary,
  and it fixes a windows bug where the main window would be left
  open due to a failure to rename the locked collection file
2014-06-27 04:25:40 +09:00
dae
1933779fa6 Merge branch 'master' of github.com:dae/anki 2014-06-26 08:58:22 +09:00
dae
48dbc48b65 provide debug info when collection corrupt 2014-06-26 07:37:16 +09:00
Soren I. Bjornstad
5b61db7d0a make sure unused media exist before deleting them 2014-06-20 19:41:56 -05:00
Soren I. Bjornstad
5f94d92f78 Merge branch 'geom_saverestore' 2014-06-20 10:36:31 -05:00
Soren I. Bjornstad
436f257e36 dialog box size and position improvements
- keep track of size and position for a number of dialogs
- make sure addons dialog opens at an appropriate size for the system
  font size
- add optional argument to showText to restore geom on creation and save
  on reject (other buttons, if used, need to be programmed to save
  individually)
2014-06-20 10:31:52 -05:00
Soren I. Bjornstad
b4784b7437 add "export" button to deck menus 2014-06-19 19:13:12 -05:00
Adam Mesha
5629533b38 Add hooks before and after a state change.
Useful for plugin authors.
2014-04-22 01:20:48 +03:00
Damien Elmes
28b2f8fe03 allow main webview to focus, which may fix shortcut issues
some users reported plugins that define reviewer shortcuts broke
2014-04-16 01:43:33 +09:00
Damien Elmes
b99e349695 fix copy not appearing when reviewing 2014-04-14 15:32:30 +09:00
Damien Elmes
5044089d42 Revert "tweak heights and font sizes"
This reverts commit 9beed20dc0.

beta testers all seem to prefer the original smaller size
2014-03-27 14:02:55 +09:00
Damien Elmes
5cc8e9b7d3 show main window on startup on mac
this causes a visible resize, but seems to fix the intermittent
beachball on startup issue
2014-03-20 08:00:02 +09:00
Damien Elmes
9beed20dc0 tweak heights and font sizes 2014-03-07 10:16:38 +09:00
Damien Elmes
96cc486528 editor needs to accept focus; rename cardViewer to canFocus 2014-02-18 15:13:59 +09:00
Houssam Salem
a12e6f6b65 Issue #998: Allow copy/paste and context menu in all card windows. 2014-02-15 17:26:03 +11:00
Damien Elmes
227c5cbc94 rename corrupt collection (#999)
if we don't do this, the user can never get back into the profile
in order to overwrite it with a backup
2014-01-14 15:24:42 +09:00
Damien Elmes
cc98ef3763 tweak imports to work around tooling incorrectly finding module unused
fixes 'quit' from the profile menu, etc
2013-12-19 07:41:29 +09:00
Damien Elmes
f057242da1 typo in clock off msg 2013-12-09 15:45:39 +09:00
Damien Elmes
647ca8bffa option to disable backup compression 2013-12-06 13:35:31 +09:00
Damien Elmes
46a771def3 fix clock off message 2013-12-06 13:27:13 +09:00
Damien Elmes
ae8074ec01 make sure we reset odue when rescheduling as new
if we fail to do this for a relearning card, it sticks around
until it causes problems later
2013-11-17 16:03:58 +09:00
Damien Elmes
f6b9dadf13 catch invalid file encodings in media check & sync 2013-11-13 17:19:25 +09:00
Damien Elmes
ef9157a8ee don't open log for export or upgrade, only regular+sync 2013-11-13 16:48:22 +09:00
Damien Elmes
5dfe95aa67 move debug logging into libanki
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
2013-11-04 23:04:27 +09:00
Damien Elmes
2e22b6218b don't close log on profile close
we want the log to stick around for syncs, and if the user
changes to another profile the log will be closed then
2013-11-04 06:35:30 +09:00
Damien Elmes
1d2ef1dbfb seeking on win32 is slow, so keep file handle around 2013-11-03 18:39:03 +09:00
Damien Elmes
1fe04a29b2 change env var name 2013-10-23 16:04:44 +09:00
Damien Elmes
82a54c780f catch invalid temp folder and other tweaks
- 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
2013-10-22 15:30:53 +09:00
Damien Elmes
553a908839 skip startup sync when restoring from backup 2013-10-22 14:57:56 +09:00
Damien Elmes
004998c8ec env var to skip expensive closing during dev 2013-10-22 14:28:17 +09:00
Piotr Kubowicz
b0a24a14ff Fixed the translation in the warning about system clock 2013-10-21 09:52:54 +02:00
Damien Elmes
184ea3503a use file system encoding for cmdline args
thanks to to wlhunag for the initial patch!
2013-10-21 09:22:14 +09:00
Damien Elmes
58f13f1e9a display time difference & more info in clock off msg; i18n it 2013-10-20 10:26:11 +09:00
Damien Elmes
0ac8789ad5 encode to utf8 before writing log 2013-10-18 15:21:54 +09:00
Damien Elmes
0fbc94c186 more logging tweaks
- disable in browser, note.cards()
- in getCard() we want the calling frame, not us
- log current day
- show card/note id in card info stat
2013-10-18 14:20:20 +09:00