Commit Graph

1205 Commits

Author SHA1 Message Date
Damien Elmes
4037a034aa fix inconsistent indentation 2019-03-04 16:54:22 +10:00
Damien Elmes
5185e817fc move from deprecated optparse to argparse 2019-03-04 16:45:29 +10:00
Damien Elmes
f6b2135129 fix some warnings 2019-03-04 16:01:10 +10:00
Damien Elmes
7755eb408c fix incorrect qt constructor call 2019-03-04 15:59:53 +10:00
Damien Elmes
e91901911f WindowsError may not be defined 2019-03-04 12:29:55 +10:00
Damien Elmes
919738a9d7 print warning when add-ons access _ without importing it 2019-03-04 12:08:48 +10:00
Damien Elmes
da2ddcc6e2 explicitly import _ and ngettext 2019-03-04 11:58:34 +10:00
Damien Elmes
3721cc4604 silence some spurious errors and remove some unused code 2019-03-04 11:22:40 +10:00
Glutanimate
58d0955392 Refactor: re.match --> re.fullmatch 2019-03-03 17:04:01 +01:00
Glutanimate
5e90758f39 Allow add-on authors to set a whitelist of webview-accessible files
Extends the AddonManager API with two new methods, setWebExports and
getWebExports. setWebExports expects an add-on module name and a
valid RegEx pattern to match subpaths in the add-on folder against.

Any matching subpaths will be accessible in Anki's web views by
referencing them with /_addons/{addon_id}/{subpath}.

For instance, to allow access to .css and .png files in your add-on's
user_files directory you would call:

> mw.addonManager.setWebExports(__name__, r"user_files/.+(\.png|\.css)")

You could then reference these files in web views as such:

> <img src="/_addons/{addon_id}/user_files/test.png">

Please note that this bypasses the default security policies used
in Anki webviews. You should take care to construct your RegEx
patterns specific enough so that they do not match any sensitive
files of our add-on.
2019-03-02 18:57:51 +01:00
Damien Elmes
a389b8b4a0 move versionWithBuild into anki module 2019-02-28 08:37:42 +10:00
Damien Elmes
d6915ff6e8 avoid traceback when network offline in add-on check 2019-02-27 14:18:16 +10:00
Damien Elmes
2e70c56248 fix regression in showInfo() et al 2019-02-27 14:16:35 +10:00
Damien Elmes
66cbc87580 ensure progress window cleared if error on add-on import 2019-02-27 14:08:20 +10:00
Damien Elmes
444abfff94 avoid nbsp for single spaces when pasting text
https://anki.tenderapp.com/discussions/ankidesktop/32823-all-spaces-are-being-replaced-with-nbsp-when-pasting-219-linux
2019-02-27 13:54:50 +10:00
Glutanimate
1fb6123f5a Extend mediasrv to also serve media files in addons directory
RequestsHandler now rewrites "/_addons" references to addons folder.
2019-02-26 13:08:15 +01:00
Damien Elmes
fed15f5b90 include note id in state
to make sure we refresh when multiple notes have same mod time
2019-02-26 11:21:25 +10:00
Damien Elmes
c07f2d0747 avoid refreshing preview when nothing has changed
fixes visible redraw when:
- opening preview screen while cursor in field (as editTimer
fires even if note has not changed)
- moving between cards (as loadNote and rowChanged hooks are both
fired)
2019-02-26 11:18:32 +10:00
Damien Elmes
4116ab65b0 improve add-on downloading error readability 2019-02-26 09:36:20 +10:00
Damien Elmes
139e04c7c3 be explicit about text format when showing add-on errors
fixes br codes showing in error messages
2019-02-26 09:36:02 +10:00
Damien Elmes
188d822d09
Merge pull request #287 from glutanimate/fix-subpixel-antialiasing
Fix subpixel font anti-aliasing
2019-02-26 08:01:35 +10:00
Glutanimate
ac53a0852e Set webview bg to system default window color instead of Qt.transparent
Qt.transparent prevents subpixel anti-aliasing from working, resulting
in slightly blurry fonts on non-retina displays.
(The window background color is not determined correctly on macOS, so
we hardcode it.)

Credits for discovering this issue go to the unknown author of
https://ankiweb.net/shared/info/94394764
2019-02-25 11:44:27 +01:00
Glutanimate
4fd5a9c176 Add a button to copy debug information to About dialog
Supplies information on platform, app, toolkit, and installed add-ons.
Should come in useful to troubleshoot issues that do not produce an
error message, especially for add-on developers.
2019-02-24 14:55:55 +01:00
Glutanimate
c45ea26cd6 Move annotatedName to AddonManager to allow outside access 2019-02-24 14:51:19 +01:00
Glutanimate
569f42c0f5 Move supportText() to utils in order to allow use outside of errors 2019-02-24 14:50:39 +01:00
Damien Elmes
86b3657969 clear selection when deleting add-on(s)
fixes error when deleting last, and wrong selection
otherwise
2019-02-24 15:24:31 +10:00
Glutanimate
195ca93cfe Preserve selected add-ons 2019-02-23 10:10:05 +01:00
Glutanimate
15a83df126 Colour disabled add-ons gray 2019-02-23 10:04:45 +01:00
Glutanimate
8725583c97 Add tooltip feedback for restoring defaults
Changes might not always be apparent, so a tooltip might help.
2019-02-23 09:39:49 +01:00
Glutanimate
1080ae10f9 Store addonconf geom and splitter. Tweak font sizes and margins. 2019-02-23 09:39:49 +01:00
Aristotelis
ff7b06fbda
Merge branch 'master' into install-local-addons 2019-02-23 09:27:17 +01:00
Glutanimate
512be4fc2c Implement add-on conflict handling via manifests "conflicts" value
Only enabled for locally installed packages for now
2019-02-22 21:14:42 +01:00
Glutanimate
8fceccf4b7 Refactor: Add manifest schema, unify install paths, use context manager
Sets the foundation for more elaborate additions to the manifest.

Manifest files are still only being read for local imports, but with
this commit that could be easily changed in the future.
2019-02-22 17:04:07 +01:00
Glutanimate
2ed61c9c99 Rename .apkx to .ankiaddon 2019-02-22 10:17:56 +01:00
Damien Elmes
ae67c97610 remember add-ons window geometry 2019-02-20 14:38:22 +10:00
Damien Elmes
a0b9b6c0f3
Merge pull request #284 from Arthur-Milchior/ErrorInCaseOfMissimngMod
Tolerate manually installed add-ons with numeric ids
2019-02-19 10:30:04 +10:00
Damien Elmes
819d0bdaf3 fix editcurrent not freeing webview on close 2019-02-19 08:01:11 +10:00
Arthur-Milchior
c670dd65b4 Correct a bug during add-on update
If an add-on folder contains only number, but does not contains a
meta.json file, or if this file does not contains a "mod" value, then
the following uninformative message error occur:
```Python
  File "aqt/addons.py", line 387, in onCheckForUpdates
  File "aqt/addons.py", line 183, in checkForUpdates
  File "aqt/addons.py", line 199, in _updatedIds
<class 'TypeError'>: '<' not supported between instances of 'NoneType' and 'int'
```

This is because there is a .get in a code while the None value makes
no sens. Thus, I replaced None by a 0 value. Which ensure that, if the
last modification time is missing, the update will be done. Three case
may occur:
* either the addon is already up to date, and it's only a waste of
  bandwidth
* either the add-on is not up to date, and updating was the initial
  goal anyway
* Or some change did occur in the add-on folder (which is actually
  probably, since it would explain the "missing mod problem"; in this
  case this change may be lost, but thout would be the same problem
  if the mod number was still there.

Other solutions which I could implement would be:
* asking for the user whether they want to update
* considering that it's not an ankiweb related add-on anymore, and
  ignore it.
2019-02-18 12:29:08 +01:00
Glutanimate
280da9aee4 Fix linebreaks in add-on installation tooltips and warnings 2019-02-18 07:18:14 +01:00
Glutanimate
cc0dc812ad Implement drag-and-drop support for installing APKX-packaged add-ons 2019-02-18 07:17:53 +01:00
Glutanimate
4a21c2013f Ability to install add-ons from local add-on packages
Adds a new button to the add-on dialog that allows users to select
and install add-ons from local files.
Introduces APKX, a zip-based and manifest-backed filetype for
Anki add-on packages.
2019-02-18 07:17:14 +01:00
Glutanimate
85955722c7 Extend getFile with support for multi-file selection 2019-02-18 07:10:43 +01:00
Damien Elmes
bca31bf38b send build hash in update check so broken betas can be notified 2019-02-18 14:07:43 +10:00
Damien Elmes
dcec361410 wording tweak 2019-02-18 13:07:20 +10:00
Damien Elmes
d8f059b570 style and arg order fix 2019-02-18 12:44:04 +10:00
Damien Elmes
da64f2d7c8
Merge pull request #282 from glutanimate/error-dialog-tweaks
Error dialog tweaks
2019-02-18 12:39:18 +10:00
Damien Elmes
3f72978535
Merge pull request #280 from Arthur-Milchior/CorrectBranchInCardPreview
Correct Deck in card preview
2019-02-18 12:38:32 +10:00
Arthur-Milchior
95a475472c Merge branch 'master' of https://github.com/dae/anki into CorrectBranchInCardPreview 2019-02-17 19:33:05 +01:00
Arthur-Milchior
6532023c3e Correcting a small bug
I though «addMode» meant «call from addcard window». Instead, to know
whether parent is addcard, I check whether it has attribute deckChooser
2019-02-17 19:26:31 +01:00
Glutanimate
5bfdc740f5 Show a list of potentially affected add-ons when raising error 2019-02-17 00:35:44 +01:00
Glutanimate
5deb905b27 Extend showInfo with ability to copy text to clipboard
Use this in error dialog
2019-02-16 23:05:06 +01:00
Arthur-Milchior
20ff61e59e Show deck of the addCard window 2019-02-16 12:25:22 +01:00
Glutanimate
fd4b5c1169 Print-wrap current line rather than the entire field
Also: Avoid duplicate wraps, retain cursor position, and preserve
undo history.
2019-02-16 12:23:31 +01:00
Glutanimate
0b2869660e Add hotkeys to clear debug log and entry (Ctrl+L / Ctrl+Shift+L) 2019-02-16 12:21:52 +01:00
Arthur-Milchior
e22f691ae0 Adding Arthur Milchior to contributors 2019-02-16 11:28:02 +01:00
Glutanimate
d629ceb3b5 Use system-default fixed font for debug entry and log 2019-02-16 10:26:49 +01:00
Damien Elmes
3037bf6ef8
Merge pull request #279 from glutanimate/tweak-addonconf-ui
Tweak Add-on Config Dialog UI
2019-02-16 13:05:59 +10:00
Damien Elmes
63061f087e
Merge pull request #278 from glutanimate/pyqt512-packaging-changes
Address PyPI PyQt 5.12 packaging changes
2019-02-16 13:04:31 +10:00
Glutanimate
11f3d77eb1 Switch to the system default monospaced font for the config editor area 2019-02-15 14:15:54 +01:00
Glutanimate
ff74c51d9f Explicitly import all QtWebEngineWidgets
Seems to be necessary for pyqt 5.12+ builds from pypi.
2019-02-15 13:55:35 +01:00
Damien Elmes
8e944c6a02 fix schema not being modified on backup import 2019-02-14 15:22:57 +10:00
Damien Elmes
4acebfdf52 ensure full window is on screen when restoring 2019-02-14 13:47:44 +10:00
Damien Elmes
ca710ab3f1 allow running with pyaudio missing 2019-02-13 09:36:39 +10:00
Damien Elmes
7f8b4b89ae experimental fix for qt placing windows off screen
https://anki.tenderapp.com/discussions/ankidesktop/32402-issues-when-using-anki-on-system-with-multi-monitor
2019-02-12 07:49:35 +10:00
Damien Elmes
c8c55c893d tooltip timer doesn't need collection 2019-02-07 13:59:24 +10:00
Damien Elmes
b06b70f721 avoid running timers after collection unload
fixes:
- onRefreshTimer() firing when collection is in the process of
unloading
- saveNow() in the no changes case, which fires a timer 10ms later
2019-02-06 12:03:14 +10:00
Damien Elmes
080118876a preserve whitespace when pasting text 2019-02-06 12:00:50 +10:00
Damien Elmes
288ab2f8bf focus web area after delay in editcurrent
if fired immediately, web area fails to gain focus, leading to
a jumping cursor when clicking on a field for the first time
https://anki.tenderapp.com/discussions/beta-testing/1348-anki-217-beta#comment_46821120
2019-02-06 10:09:05 +10:00
Damien Elmes
aff810c18a make sure add-on list updates when toggling on qt 5.12/mac 2019-02-06 09:19:20 +10:00
Damien Elmes
bf6e10ec88 catch profile rename error in non-English locales 2019-02-06 09:02:56 +10:00
Damien Elmes
1e9fb6ab29 turn local port message into a tooltip and automatically reload
Since we're automatically disabling proxies now, the main remaining
issue seems to be Windows users resuming their machine from sleep -
for some reason localhost is inaccessible during the resume process.
2019-02-06 07:55:34 +10:00
Damien Elmes
1603a5224e fix context menu in editor, and move workaround into shared function 2019-02-05 14:37:07 +10:00
Damien Elmes
372d5ed6e8 update copyright and clarify licenses 2019-02-05 14:01:33 +10:00
Damien Elmes
488c867afb info/warning/etc need to be be application modal
WindowModal was allowing multiple popups in the browser on Windows:
https://anki.tenderapp.com/discussions/beta-testing/1378-error-does-not-go-away
2019-02-04 07:32:49 +10:00
Damien Elmes
6b24b61999 skip the webview reload when undoing reviews 2019-01-29 09:35:46 +10:00
Damien Elmes
318765cb2e remove another newline case from empty fields
thanks to dlon: https://github.com/dae/anki/pull/273
2019-01-29 08:29:01 +10:00
Damien Elmes
57d566d670
Merge pull request #273 from zjosua/reinstate-mungehtml
Reinstate mungeHTML in editor.py
2019-01-29 08:26:47 +10:00
Damien Elmes
c8b5ce1b66
Merge pull request #275 from glutanimate/editor-addbutton-qrc-support
Add support for button icons stored in Qt resource system
2019-01-29 08:26:07 +10:00
Glutanimate
709bfa4a11 Add support for button icons stored in Qt resource system 2019-01-26 20:42:56 +01:00
David Lönnhager
106134be33 Fix crash caused by cutting and copying 2019-01-26 04:29:05 +01:00
zjosua
4981fa187a Reinstate mungeHTML in editor.py
The removal of this function in #270 causes <br> to remain in seemingly
empty editor fields, which in turn wrongly prompts the "Close and lose
current input?" dialog.
2019-01-25 23:12:48 +01:00
Damien Elmes
3c96492a1a
Merge pull request #270 from dlon/br-improve
Remove <br> from empty fields.
2019-01-21 14:26:12 +10:00
David Lönnhager
4ca2220117 Remove <br> from empty fields. 2019-01-19 19:36:55 +01:00
Damien Elmes
e41c399954 Revert "default to GL mode auto on qt 5.12"
This reverts commit d7760d9831.

unfortunately there still appear to be widespread issues on qt 5.12
2019-01-06 09:59:25 +10:00
Damien Elmes
f91e30a2c1 fix field content showing in top button area 2018-12-22 13:27:12 +10:00
Damien Elmes
4c6c0d428b detect and refuse to run on nouveau 2018-12-18 19:29:34 +10:00
Damien Elmes
a6c34fd79f ignore broken reset hooks in database check
ideally the original code should be correctly cleaning up the hooks,
but if it does not, then we don't want to repeatedly present the user
with confusing errors when they try to check their database is ok.
2018-12-15 13:14:33 +10:00
Damien Elmes
d6d5677fa8 remove unused ref 2018-12-15 12:45:38 +10:00
Damien Elmes
ba9ebcf8f9 make sure change note type clears up hooks
if an error occurred after QDialog.accept() had been called,
the hook was left lying around and caused errors when reset later
fired

File "aqt\main.py", line 1028, in onCheckDB
  File "aqt\main.py", line 516, in reset
  File "anki\hooks.py", line 28, in runHook
  File "aqt\modelchooser.py", line 47, in onReset
  File "aqt\modelchooser.py", line 82, in updateModels
<class 'RuntimeError'>: wrapped C/C++ object of type QPushButton has been deleted
2018-12-15 12:45:17 +10:00
Damien Elmes
748f362695 fix the other json.dumps call
previous change was in the wrong place
33ae6404f1
2018-12-15 09:15:43 +10:00
Damien Elmes
0769bf7ac9 apply stylesheet app wide, and add border to win10 menu
the night mode add-on may need updating with this change, but with
a global stylesheet it may be easier to style widgets in the future

menu bar issue:

https://anki.tenderapp.com/discussions/beta-testing/1313-anki-216-beta-1#comment_46664932
2018-12-14 20:35:12 +10:00
Damien Elmes
9e4730f9dd add file to track pinned modules 2018-12-14 20:32:53 +10:00
Damien Elmes
33ae6404f1 don't escape unicode characters in add-on json
https://anki.tenderapp.com/discussions/ankidesktop/31423-configuration-module-of-addons-is-not-allowing-pt-br-accent
2018-12-13 21:34:55 +10:00
Damien Elmes
053b286398 include git hash in version info 2018-12-13 20:59:06 +10:00
Damien Elmes
d7760d9831 default to GL mode auto on qt 5.12 2018-12-10 15:17:21 +10:00
Damien Elmes
2131c0049f restore tooltips for fields/cards 2018-12-07 08:33:47 +10:00
Damien Elmes
a2b8d24352
Merge pull request #265 from Arthur-Milchior/reopenEdit
The note in curentEdit is not changed until the window is closed.
2018-12-03 16:41:56 +10:00
Damien Elmes
2c30ad9593 fix editor buttons overlapping field content
https://anki.tenderapp.com/discussions/ankidesktop/31235-editor-second-row-for-buttons-feature-request
2018-12-03 09:54:51 +10:00
Damien Elmes
429cb2ce7f fix import screen appearing before progress dialog closes 2018-12-01 13:37:26 +10:00
Arthur-Milchior
b8523944ff The note in curentEdit is not changed until the window is closed.
https://anki.tenderapp.com/discussions/ankidesktop/31105-reopening-an-edit-window
I added a «reopen» method, which I believe may be useful in other
cases too. I check whether the method exists before calling it, so
there should be no compatibility problem.
2018-11-28 10:24:59 +01:00