Commit Graph

490 Commits

Author SHA1 Message Date
Arthur Milchior
c722b5bd2c PreviewerListCards can take cids and class
This allow to avoid recomputing a card if it is known, while allowing
to compute it until it's actually displayed
2020-04-02 17:44:06 +02:00
Arthur Milchior
b76ee6f8e5 ListCardsPreviewer 2020-04-02 17:44:06 +02:00
Arthur Milchior
c4a38c5e36 Split PreviewerBrowser into a hierarchy
A part in common to see multiple cards. And a part specific for the browser
2020-04-02 17:44:06 +02:00
Arthur Milchior
727b7fb6e5 split onPreview Prev/Next 2020-04-02 17:44:06 +02:00
Arthur Milchior
79dece3124 split _updatePreviewButtons
This will allow to create a hierarchy in this class
2020-04-02 17:44:06 +02:00
Arthur Milchior
f42c164999 add a class to preview a single card 2020-04-02 17:44:06 +02:00
Arthur Milchior
944e82211f Class PreviewerBrowser
This let a previewer class which can be used to display a single card,
and a previewer for the browser
2020-04-02 17:44:06 +02:00
Arthur Milchior
0a3d68a565 split = None 2020-04-02 17:44:06 +02:00
Arthur Milchior
6d98063ac3 vbox and bbox are attribute 2020-04-02 17:44:06 +02:00
Arthur Milchior
95e020f743 use card method 2020-04-02 17:44:06 +02:00
Arthur Milchior
179ba87ce4 previewer: create gui in a distinct function 2020-04-02 17:44:06 +02:00
Arthur Milchior
45ccd4aa3c move previewer to a different class.
This uses exactly the same code, with one exception. In the previewer
`self` became `self.parent` in order to have action on the
browser. And in the browser, some `self` become `self.previewer` to
access the previewer. (Some function having an action on the previewer
starting from the browser now are separated in two. One version in the
previewer doing the same thing. One version in the browser, calling
the version in the previewer if it exists.)

Preview dialog now takes a QWidget in general, not necesarrily a
Browser. The parameter is called parent
2020-04-02 17:44:06 +02:00
Damien Elmes
b5f0f459ce ignore row change events that arrive after browser closed
https://anki.tenderapp.com/discussions/ankidesktop/40148-bug-when-suspending-cards
2020-04-02 19:44:51 +10:00
Damien Elmes
634931cf9e tweak hook name 2020-04-01 17:13:08 +10:00
Damien Elmes
28380d4183
Merge pull request #534 from Arthur-Milchior/tags_hook
hook tag_editor_received_a_key
2020-04-01 17:10:31 +10:00
Damien Elmes
5fe747f14a left-align tags
https://anki.tenderapp.com/discussions/ankidesktop/40068-tags-column-in-browser-is-centered
2020-04-01 13:29:42 +10:00
Damien Elmes
c050833aba always position selection in center after search
https://anki.tenderapp.com/discussions/beta-testing/1888-retaining-position-when-searching
2020-04-01 11:01:20 +10:00
Damien Elmes
c9da4bc1a6 allow aborting a media sync while http req in flight
The progress handling code needs a rethink, as we now have two separate
ways to flag that the media sync should abort. In the future, it may
make sense to switch to polling the backend for progress, instead of
passing a callback in.
2020-04-01 09:49:25 +10:00
Arthur Milchior
4b34e71030 hook tag_editor_received_a_key
I expect it to be useful for add-ons such as
https://github.com/fonol/anki-search-inside-add-card which interact
with the tag line
2020-03-31 15:05:41 +02:00
zjosua
bfdb5d01b5 Use double quotes in taglimit queries 2020-03-30 10:12:47 +02:00
Damien Elmes
ef79f7d676
Merge pull request #531 from Arthur-Milchior/browser_will_show_context_menu
hook browser_header_will_show_context_menu
2020-03-28 14:50:02 +10:00
Damien Elmes
47bd6264bd Revert "Merge pull request #527 from Arthur-Milchior/explode_on_bridge_cmd"
This reverts commit 2264fe3f66, reversing
changes made to 84b84ae31c.

Causes a traceback when opening the add screen, clicking on Type,
and choosing a note type.

  File "/Users/dae/Work/code/dtop/qt/aqt/webview.py", line 31, in cmd
    return json.dumps(self.onCmd(str))
  File "/Users/dae/Work/code/dtop/qt/aqt/webview.py", line 97, in _onCmd
    return self._onBridgeCmd(str)
  File "/Users/dae/Work/code/dtop/qt/aqt/webview.py", line 500, in _onBridgeCmd
    return self.onBridgeCmd(cmd)
  File "/Users/dae/Work/code/dtop/qt/aqt/editor.py", line 374, in onBridgeCmd
    self._links[cmd](self, *args)  # type: ignore
  File "/Users/dae/Work/code/dtop/qt/aqt/editor.py", line 404, in onBlur
    if gui_hooks.editor_did_unfocus_field(False, self.note, int(ord)):
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
2020-03-28 13:35:05 +10:00
Arthur Milchior
4bb49d404e hook browser_header_will_show_context_menu 2020-03-27 23:06:22 +01:00
Damien Elmes
d81c725b46
Merge pull request #529 from Arthur-Milchior/load_note_once_on_note_type_change
Ensuring "setNote" is called only once during changing of note type
2020-03-27 15:28:49 +10:00
Damien Elmes
2264fe3f66
Merge pull request #527 from Arthur-Milchior/explode_on_bridge_cmd
Explode on bridge cmd
2020-03-27 15:22:14 +10:00
Arthur Milchior
0b633dbf40 Ensuring "setNote" is called only once during changing of note type
Initially, I wanted to solve the bug reported on
https://github.com/Arthur-Milchior/anki-html-src-in-field/issues/1

After some research, I finally discovered that the trouble was that,
when we change the note type in add card, the method
`aqt.editor.Editor.loadNote` is called twice. In itself, it would not
be a problem, but given the way callback works, its call back is
called twice on the last version of the webview. Which means that
`gui_hooks.editor_did_load_note` is called twice, which breaks this
add-on.

The reason why loadNote is called twice is because `setNote` is called
twice in `aqt.modelchooser.onModelChange`. The first time through
`gui_hooks.current_note_type_did_change` which calls
`addcards.AddCards.onModelChange` which calls `loadNote`, the second
time through `self.mw.reset()` which calls
`gui_hooks.state_did_reset()` which calls `addcards.AddCards.onReset`
which calls `setAndFocusNote` which calls `setNote`.

I should note furthermore that currently,
`gui_hooks.current_note_type_did_change` is called only when the model
chooser change a model. And `addCards.onModelChange` is never called,
only added to the hook `gui_hooks.current_note_type_did_change`. So
removing the line of code removed in this commit will have no side
effect in Anki itself. It will only affect the fact that this method
is called twice.

I do not know of any add-on calling `onModelChange` or
`gui_hooks.current_note_type_did_change`, but it means little, so of
course, it may always mean an add-on will break because of this
change. No way of being sure.
2020-03-26 21:26:13 +01:00
Arthur Milchior
c9496ef095 Ensure that focus, key and blur are treated as other commands
The reason to do that is that I can then call blur/key from other
method in add-on.

More precisely, I expect to create a method which captures the blur
command, ask anki to execute the standard version of the command, and
then execute more code once the note contains the new field value.

I should note that the code executed during blur/key/focus itself
didn't change. It's only it's location which changed.
2020-03-26 15:42:27 +01:00
Damien Elmes
fe327e32ca fix progress dialog preventing schema mod
https://anki.tenderapp.com/discussions/beta-testing/1868-anki-2124-beta#comment_48183062

This is an ugly hack - in the future the calling code should be updated
to perform the check prior to starting the operation instead.
2020-03-26 21:07:53 +10:00
Damien Elmes
65b8988817 reduce the chances of add-ons preventing collections from loading
https://anki.tenderapp.com/discussions/ankidesktop/39953-sync-fail-with-images#comment_48182205
2020-03-26 09:53:15 +10:00
Arthur Milchior
9f4c4ea355 Explode onBridgeCmd
This way, an add-on can catch a blur command, do its change and then
call self.blur
2020-03-25 08:17:48 +01:00
Damien Elmes
818b9193a8
Merge pull request #523 from Arthur-Milchior/hook_note_will_load
Hook editor_note_will_load
2020-03-25 09:43:16 +10:00
Arthur Milchior
3799b8504f strip to test whether field is empty 2020-03-24 11:55:55 +01:00
Arthur Milchior
31f18e3c94 Hook editor_note_will_load
A current problem I have is that there is nothing similar to hook
inside of javascript. It seems that it would be easier to be able to
add other methods in javascript and call them in loadNote. Currently I
simply redefined loadNote, which is far from perfect
2020-03-24 10:17:01 +01:00
Damien Elmes
6143a7e218
Merge pull request #525 from Hk-tang/change-to-more-pythonic
Change not not to bool
2020-03-24 16:01:15 +10:00
Damien Elmes
a51dba7255
Merge pull request #524 from Arthur-Milchior/indet_html
Ident html in editor
2020-03-24 16:00:57 +10:00
Damien Elmes
483d50cba8
Merge pull request #522 from Arthur-Milchior/editor_did_init
editor_did_init
2020-03-24 15:52:50 +10:00
evandrocoan
b1b3e5b87c Merge remote-tracking branch 'danielelmes/master' into fix_tests_on_windows
# Conflicts:
#	.github/scripts/trailing-newlines.sh
2020-03-23 18:44:11 -03:00
Hk-tang
521b0e9e14 Change not not to bool 2020-03-23 11:16:39 -06:00
Damien Elmes
b1a8107aa1 formatting 2020-03-23 19:54:01 +10:00
Damien Elmes
84eaf43525 reduce the chances of a race condition in mplayer code
Not perfect, it may still happen.

https://anki.tenderapp.com/discussions/ankidesktop/39832-an-error-occurred-audio
2020-03-23 19:15:32 +10:00
Damien Elmes
f889616ef1 don't pop up network errors for media sync
log them instead
2020-03-23 19:06:13 +10:00
Damien Elmes
f429986246 fix collection_did_load() not being called, and remove dead code
https://anki.tenderapp.com/discussions/ankidesktop/39765-_colloadingstate-is-never-run-thus-collection_did_load-hook-is-never-triggered
2020-03-23 18:57:23 +10:00
Damien Elmes
7d94465256 cache dark mode value so UI doesn't break when it changes
https://anki.tenderapp.com/discussions/ankidesktop/39550-cant-deactivate-night-mode-on-2121-for-mac
2020-03-23 18:39:37 +10:00
Damien Elmes
7a4f3d0318 dump more info in card()/bcard() 2020-03-23 18:39:00 +10:00
Arthur Milchior
349d145014 Ident html in editor
Sometime I like to print html to understand why it bugs. And I really
prefer to have html indented if it's okay with you. There is no change
appart from the identation and quotes
2020-03-23 08:15:48 +01:00
Damien Elmes
c615342130 fix English being shown in prefs for fully qualified langs like zh-CN
https://anki.tenderapp.com/discussions/ankidesktop/39845-a-new-bug-has-been-found
2020-03-23 16:08:06 +10:00
Damien Elmes
75b7ebb156 add back new_timezone_enabled(), as it's used in the prefs screen 2020-03-23 07:40:50 +10:00
Arthur Milchior
f2f92fb0c3 editor_did_init
That would be useful to add elements in the editor, such as in multi
column editor
2020-03-22 17:15:47 +01:00
Damien Elmes
99416477ac allow customizing search order 2020-03-21 17:38:09 +10:00
Damien Elmes
dfa7f5e142 fix reversing sort order 2020-03-21 16:57:33 +10:00
Damien Elmes
9afbcd4178 remove old finder code; add search hooks to browser & remove old one 2020-03-21 16:38:46 +10:00
Damien Elmes
63ce44aaa7 enable sorting on the extra browser columns 2020-03-21 07:55:53 +10:00
Damien Elmes
9ee82d55b1 disable word wrap in browser rows 2020-03-20 21:15:23 +10:00
Damien Elmes
13f3719650 ensure endReset() is called even if an exception is raised 2020-03-20 21:15:23 +10:00
Damien Elmes
1318118461 flush config on sort order change 2020-03-20 21:15:23 +10:00
Damien Elmes
55c9f5dbeb wait for media sync to complete before unloading collection 2020-03-20 21:15:23 +10:00
Damien Elmes
d03e13a1bd reuse the existing backend instead of creating a new one 2020-03-20 21:15:23 +10:00
Damien Elmes
ba17567617 drop the separate i18n backend 2020-03-20 21:15:23 +10:00
Damien Elmes
8d429cd192 import .colpkg in a background thread 2020-03-20 21:15:23 +10:00
Damien Elmes
ad9dad8748 import .apkg files in a background thread 2020-03-20 21:15:23 +10:00
Damien Elmes
231fa30a86 import mapped files like csv in a background thread 2020-03-20 21:15:23 +10:00
Damien Elmes
53952ba131 export in a background thread 2020-03-20 21:15:23 +10:00
Damien Elmes
fa12213e98 move .reopen() to mw; fix exporting 2020-03-20 21:15:23 +10:00
Damien Elmes
fe59d11047 fix mypy warning 2020-03-20 21:15:23 +10:00
Damien Elmes
0f38514ad7 drop the DB progress handler code
This code was an awful hack to provide some semblance of UI
responsiveness while executing DB statements on the main thread.
Instead, we can just run DB statements in a background thread now,
keeping the UI responsive.
2020-03-20 21:15:23 +10:00
Damien Elmes
90d4d62c48 use a timer to automatically show progress window
We were previously relying on the DB progress hook to cause the
progress window to display.

Qt's progress dialogs do have built in support for automatically
showing, but it's easier to add a timer than change the existing
code to use it.
2020-03-20 21:15:23 +10:00
Damien Elmes
32555b2857 run Check DB in a background thread
Since the DB is now stored behind a mutex, we're no longer limited
to accessing the database on the main thread.
2020-03-20 21:15:23 +10:00
Damien Elmes
ae06b9e446 add Collection struct, and get media check working again
- media check no longer needs collection to be closed
- use savepoints for operations initiated by Rust, so they are
atomic without forcing a commit
2020-03-20 21:15:23 +10:00
Damien Elmes
6db4418f05 drop log= argument from Collection 2020-03-20 21:15:23 +10:00
Damien Elmes
f4d4078537 drop named sql arguments 2020-03-20 21:15:23 +10:00
Damien Elmes
c8b9afac0c drop progress handler and timeout arg 2020-03-20 21:15:23 +10:00
Damien Elmes
0d43e9dca3 tweak add-on wording 2020-03-20 21:00:21 +10:00
Damien Elmes
b7c64aaf39
Merge pull request #517 from Arthur-Milchior/backup_is_done
hook backup_is_done
2020-03-20 20:56:33 +10:00
Damien Elmes
f274e85edf
Merge pull request #470 from Arthur-Milchior/accept_card
Hook to decide whether a note should be added.
2020-03-20 20:56:04 +10:00
Damien Elmes
b2aa0756c9
Merge pull request #516 from Arthur-Milchior/hook_models_advanced_will_show
Hook models_advanced_will_show
2020-03-20 20:42:14 +10:00
Arthur Milchior
97225a0364 Browser introduce method time_format
I expect to use this in my add-on 1243668133 (by monkey patching in
this case) where it would allow to show hours/minutes/seconds... in browser
2020-03-19 22:59:59 +01:00
Arthur Milchior
bfc305fa26 hook backup_is_done
I expect to use this hook in add-on 529955533. It'll serve me to
create long term backup at the same time than your backup
2020-03-19 13:21:00 +01:00
Arthur Milchior
b73507344c Hook models_advanced_will_show
This will be useful for add-on 1863928230. I want to let users change
the LaTeX footer/header everywhere.
2020-03-19 12:03:09 +01:00
Arthur Milchior
e4ae41340f Hook to decide whether a note should be added. 2020-03-19 03:39:53 +01:00
evandrocoan
1ade1a1a0f Fixed moved comment line on qt/aqt/main.py, long variables names on
pylib/Makefile and qt/Makefile, and rg --version not going to /dev/null
on .github/scripts/trailing-newlines.sh
2020-03-18 11:36:50 -03:00
evandrocoan
034ac10cf4 Fixed error: Incompatible types in assignment on qt/aqt/main.py
aqt\main.py:1437: error: Incompatible types in assignment (expression has type Module, variable has type "LibraryLoader[WinDLL]")  [assignment]
                _dummy = wintypes
                         ^
2020-03-17 19:48:16 -03:00
Damien Elmes
dfa10f5a1c
Merge pull request #509 from Arthur-Milchior/type_queue_in_browser
adding missing constants in browser file
2020-03-17 21:33:08 +10:00
Damien Elmes
acd3eb9058
Merge pull request #506 from Arthur-Milchior/editor_web_view_did_init
Hook editor_web_view_did_init
2020-03-17 20:53:20 +10:00
Arthur Milchior
e7ea8f412f adding missing constants in browser file 2020-03-17 06:32:46 +01:00
evandrocoan
4bb0a75fe7 Give the 'typearrow' id to the type answer arrow 2020-03-16 00:42:08 -03:00
Arthur Milchior
89bb5fe79b Hook editor_web_view_did_init
I hope to use this in oder to had features to the web view. In
particular, I expect the "spell checking" feature to use it
hopefully. Because currently it's incompatible with other add-on
dealing with the editor
2020-03-16 04:37:07 +01:00
Damien Elmes
0ecc189a9b fix audio getting stuck (2/2) 2020-03-15 09:34:04 +10:00
Damien Elmes
f30853f5ed fix audio getting stuck (1/2)
The problem was caused by stop() doing a spin loop on the main
thread waiting for the completion signal. This prevented Qt's run
loop from executing, and so the completion signal was never delivered,
meaning longer files would time out.

Fixed by reworking the code so that stop() does not block at all -
instead it just sets the termination flag, and AVPlayer does not
unset current_player. Then when the completion callback fires, it
can advance to the next file.

TTS code still needs updating, and the lock should be safe to remove
as the start/stop logic is all on the main thread.
2020-03-15 09:26:31 +10:00
Damien Elmes
e7452300a2 imports 2020-03-14 22:10:27 +10:00
Damien Elmes
8845b05933 make sure audio queue is cleared when transitioning between cards
https://anki.tenderapp.com/discussions/beta-testing/1846-anki-2122-beta#comment_48150139
2020-03-14 20:04:40 +10:00
Damien Elmes
522ee8fca7 drop the deck count warning 2020-03-14 19:41:33 +10:00
Damien Elmes
d9923b12ba fix play icons not appearing in browser preview when autoplay off 2020-03-14 19:29:11 +10:00
Damien Elmes
aad491dbb9 possible fix for invalid handle issue
https://anki.tenderapp.com/discussions/ankidesktop/39346-cant-add-audio-on-flash-drive
2020-03-14 18:53:43 +10:00
Damien Elmes
33f312315e must close progress before displaying error, or user can't click it away 2020-03-14 18:42:03 +10:00
evandrocoan
2e54d315e1 Fixed BeautifulSoup breaking string paths
https://anki.tenderapp.com/discussions/ankidesktop/39543-anki-is-replacing-the-character-by-when-i-exit-the-html-edit-mode-ctrlshiftx
2020-03-12 21:19:09 -03:00
Damien Elmes
f0be553e09 add media check window title, use consistent formatting in template 2020-03-12 18:02:22 +10:00
Damien Elmes
2f02867840
Merge pull request #503 from Arthur-Milchior/error_msg_in_schema
Error msg in schema
2020-03-11 16:00:47 +10:00
Damien Elmes
fd81fca4aa fix wrong language selected in prefs screen 2020-03-11 14:58:57 +10:00
Arthur Milchior
5482cafef2 Allow add-on dev to show personalized message.
The error should be in "error_msg"

They can show:
* the original error message with {problem}
* the path of the error with {path},
* the value which does not match against the subchema with {error}
* the subschema against which the error occurs with {schema}

Thanks to Glutanimate for the idea https://github.com/ankitects/anki/pull/495#issuecomment-596685227
2020-03-11 01:39:39 +01:00
Arthur Milchior
0b04da6419 snake case for addon_schema 2020-03-11 00:56:14 +01:00