mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 14:02:21 -04:00
update platform checks (eg isWin -> is_win) + devMode
This commit is contained in:
parent
9d444b40e0
commit
ebad6ad379
24 changed files with 121 additions and 120 deletions
|
@ -13,7 +13,7 @@ import anki
|
|||
from anki import card_rendering_pb2, hooks
|
||||
from anki.models import NotetypeDict
|
||||
from anki.template import TemplateRenderContext, TemplateRenderOutput
|
||||
from anki.utils import call, isMac, namedtmp, tmpdir
|
||||
from anki.utils import call, is_mac, namedtmp, tmpdir
|
||||
|
||||
pngCommands = [
|
||||
["latex", "-interaction=nonstopmode", "tmp.tex"],
|
||||
|
@ -29,7 +29,7 @@ svgCommands = [
|
|||
build = True # pylint: disable=invalid-name
|
||||
|
||||
# add standard tex install location to osx
|
||||
if isMac:
|
||||
if is_mac:
|
||||
os.environ["PATH"] += ":/usr/texbin:/Library/TeX/texbin"
|
||||
|
||||
|
||||
|
|
|
@ -212,7 +212,7 @@ def no_bundled_libs() -> Iterator[None]:
|
|||
def call(argv: list[str], wait: bool = True, **kwargs: Any) -> int:
|
||||
"Execute a command. If WAIT, return exit code."
|
||||
# ensure we don't open a separate window for forking process on windows
|
||||
if isWin:
|
||||
if is_win:
|
||||
info = subprocess.STARTUPINFO() # type: ignore
|
||||
try:
|
||||
info.dwFlags |= subprocess.STARTF_USESHOWWINDOW # type: ignore
|
||||
|
@ -245,10 +245,11 @@ def call(argv: list[str], wait: bool = True, **kwargs: Any) -> int:
|
|||
# OS helpers
|
||||
##############################################################################
|
||||
|
||||
isMac = sys.platform.startswith("darwin")
|
||||
isWin = sys.platform.startswith("win32")
|
||||
isLin = not isMac and not isWin
|
||||
devMode = os.getenv("ANKIDEV", "")
|
||||
is_mac = sys.platform.startswith("darwin")
|
||||
is_win = sys.platform.startswith("win32")
|
||||
# also covers *BSD
|
||||
is_lin = not is_mac and not is_win
|
||||
dev_mode = os.getenv("ANKIDEV", "")
|
||||
|
||||
INVALID_FILENAME_CHARS = ':*?"<>|'
|
||||
|
||||
|
@ -257,9 +258,9 @@ def invalid_filename(str: str, dirsep: bool = True) -> str | None:
|
|||
for char in INVALID_FILENAME_CHARS:
|
||||
if char in str:
|
||||
return char
|
||||
if (dirsep or isWin) and "/" in str:
|
||||
if (dirsep or is_win) and "/" in str:
|
||||
return "/"
|
||||
elif (dirsep or not isWin) and "\\" in str:
|
||||
elif (dirsep or not is_win) and "\\" in str:
|
||||
return "\\"
|
||||
elif str.strip().startswith("."):
|
||||
return "."
|
||||
|
@ -272,9 +273,9 @@ def plat_desc() -> str:
|
|||
for _ in range(100):
|
||||
try:
|
||||
system = platform.system()
|
||||
if isMac:
|
||||
if is_mac:
|
||||
theos = f"mac:{platform.mac_ver()[0]}"
|
||||
elif isWin:
|
||||
elif is_win:
|
||||
theos = f"win:{platform.win32_ver()[0]}"
|
||||
elif system == "Linux":
|
||||
import distro # pytype: disable=import-error # pylint: disable=import-error
|
||||
|
|
|
@ -10,7 +10,7 @@ from anki.collection import Collection as aopen
|
|||
from anki.dbproxy import emulate_named_args
|
||||
from anki.lang import TR, without_unicode_isolation
|
||||
from anki.stdmodels import _legacy_add_basic_model, get_stock_notetypes
|
||||
from anki.utils import isWin
|
||||
from anki.utils import is_win
|
||||
from tests.shared import assertException, getEmptyCol
|
||||
|
||||
|
||||
|
@ -34,7 +34,7 @@ def test_create_open():
|
|||
col.close()
|
||||
|
||||
# non-writeable dir
|
||||
if isWin:
|
||||
if is_win:
|
||||
dir = "c:\root.anki2"
|
||||
else:
|
||||
dir = "/attachroot.anki2"
|
||||
|
|
|
@ -6,7 +6,7 @@ import time
|
|||
|
||||
from anki.consts import MODEL_CLOZE
|
||||
from anki.errors import NotFoundError
|
||||
from anki.utils import isWin, strip_html
|
||||
from anki.utils import is_win, strip_html
|
||||
from tests.shared import getEmptyCol
|
||||
|
||||
|
||||
|
@ -329,7 +329,7 @@ def test_modelChange():
|
|||
assert note.cards()[0].id == c1.id
|
||||
# delete first card
|
||||
map = {0: None, 1: 1}
|
||||
if isWin:
|
||||
if is_win:
|
||||
# The low precision timer on Windows reveals a race condition
|
||||
time.sleep(0.05)
|
||||
col.models.change(basic, [note.id], basic, noop, map)
|
||||
|
|
|
@ -33,7 +33,7 @@ from anki._backend import RustBackend
|
|||
from anki.buildinfo import version as _version
|
||||
from anki.collection import Collection
|
||||
from anki.consts import HELP_SITE
|
||||
from anki.utils import checksum, isLin, isMac
|
||||
from anki.utils import checksum, is_lin, is_mac
|
||||
from aqt import gui_hooks
|
||||
from aqt.qt import *
|
||||
from aqt.utils import TR, tr
|
||||
|
@ -238,7 +238,7 @@ def setupLangAndBackend(
|
|||
# load qt translations
|
||||
_qtrans = QTranslator()
|
||||
|
||||
if isMac and getattr(sys, "frozen", False):
|
||||
if is_mac and getattr(sys, "frozen", False):
|
||||
qt_dir = os.path.join(sys.prefix, "../Resources/qt_translations")
|
||||
else:
|
||||
if qtmajor == 5:
|
||||
|
@ -331,7 +331,7 @@ def parseArgs(argv: list[str]) -> tuple[argparse.Namespace, list[str]]:
|
|||
"Returns (opts, args)."
|
||||
# py2app fails to strip this in some instances, then anki dies
|
||||
# as there's no such profile
|
||||
if isMac and len(argv) > 1 and argv[1].startswith("-psn"):
|
||||
if is_mac and len(argv) > 1 and argv[1].startswith("-psn"):
|
||||
argv = [argv[0]]
|
||||
parser = argparse.ArgumentParser(description=f"Anki {appVersion}")
|
||||
parser.usage = "%(prog)s [OPTIONS] [file to import/add-on to install]"
|
||||
|
@ -353,13 +353,13 @@ def parseArgs(argv: list[str]) -> tuple[argparse.Namespace, list[str]]:
|
|||
|
||||
|
||||
def setupGL(pm: aqt.profiles.ProfileManager) -> None:
|
||||
if isMac:
|
||||
if is_mac:
|
||||
return
|
||||
|
||||
driver = pm.video_driver()
|
||||
|
||||
# work around pyqt loading wrong GL library
|
||||
if isLin:
|
||||
if is_lin:
|
||||
import ctypes
|
||||
|
||||
ctypes.CDLL("libGL.so.1", ctypes.RTLD_GLOBAL)
|
||||
|
@ -412,11 +412,11 @@ def setupGL(pm: aqt.profiles.ProfileManager) -> None:
|
|||
if driver == VideoDriver.OpenGL:
|
||||
pass
|
||||
else:
|
||||
if isWin:
|
||||
if is_win:
|
||||
os.environ["QT_OPENGL"] = driver.value
|
||||
elif isMac:
|
||||
elif is_mac:
|
||||
QCoreApplication.setAttribute(Qt.ApplicationAttribute.AA_UseSoftwareOpenGL)
|
||||
elif isLin:
|
||||
elif is_lin:
|
||||
os.environ["QT_XCB_FORCE_SOFTWARE_OPENGL"] = "1"
|
||||
|
||||
|
||||
|
@ -521,7 +521,7 @@ def _run(argv: Optional[list[str]] = None, exec: bool = True) -> Optional[AnkiAp
|
|||
QCoreApplication.setAttribute(Qt.ApplicationAttribute.AA_UseSoftwareOpenGL)
|
||||
|
||||
if (
|
||||
isWin
|
||||
is_win
|
||||
and qtmajor == 5
|
||||
and (qtminor == 14 or (qtminor == 15 and qtpoint == 0))
|
||||
and "QT_QPA_PLATFORM" not in os.environ
|
||||
|
@ -545,11 +545,11 @@ def _run(argv: Optional[list[str]] = None, exec: bool = True) -> Optional[AnkiAp
|
|||
return None
|
||||
|
||||
# disable icons on mac; this must be done before window created
|
||||
if isMac:
|
||||
if is_mac:
|
||||
app.setAttribute(Qt.ApplicationAttribute.AA_DontShowIconsInMenus)
|
||||
|
||||
# disable help button in title bar on qt versions that support it
|
||||
if isWin and qtmajor == 5 and qtminor >= 10:
|
||||
if is_win and qtmajor == 5 and qtminor >= 10:
|
||||
QApplication.setAttribute(Qt.AA_DisableWindowContextHelpButton) # type: ignore
|
||||
|
||||
# proxy configured?
|
||||
|
@ -606,7 +606,7 @@ def _run(argv: Optional[list[str]] = None, exec: bool = True) -> Optional[AnkiAp
|
|||
backend = setupLangAndBackend(pm, app, opts.lang, pmLoadResult.firstTime)
|
||||
|
||||
driver = pm.video_driver()
|
||||
if isLin and driver == VideoDriver.OpenGL:
|
||||
if is_lin and driver == VideoDriver.OpenGL:
|
||||
from aqt.utils import gfxDriverIsBroken
|
||||
|
||||
if gfxDriverIsBroken():
|
||||
|
|
|
@ -10,7 +10,7 @@ from anki.collection import OpChanges, SearchNode
|
|||
from anki.decks import DeckId
|
||||
from anki.models import NotetypeId
|
||||
from anki.notes import Note, NoteFieldsCheckResult, NoteId
|
||||
from anki.utils import html_to_text_line, isMac
|
||||
from anki.utils import html_to_text_line, is_mac
|
||||
from aqt import AnkiQt, gui_hooks
|
||||
from aqt.deckchooser import DeckChooser
|
||||
from aqt.notetypechooser import NotetypeChooser
|
||||
|
@ -101,7 +101,7 @@ class AddCards(QMainWindow):
|
|||
bb.addButton(self.helpButton, QDialogButtonBox.ButtonRole.HelpRole)
|
||||
# history
|
||||
b = bb.addButton(f"{tr.adding_history()} {downArrow()}", ar)
|
||||
if isMac:
|
||||
if is_mac:
|
||||
sc = "Ctrl+Shift+H"
|
||||
else:
|
||||
sc = "Ctrl+H"
|
||||
|
|
|
@ -31,7 +31,7 @@ from aqt.utils import (
|
|||
askUser,
|
||||
disable_help_button,
|
||||
getFile,
|
||||
isWin,
|
||||
is_win,
|
||||
openFolder,
|
||||
openLink,
|
||||
restoreGeom,
|
||||
|
@ -1528,7 +1528,7 @@ class ConfigEditor(QDialog):
|
|||
)
|
||||
text = gui_hooks.addon_config_editor_will_display_json(text)
|
||||
self.form.editor.setPlainText(text)
|
||||
if isMac:
|
||||
if is_mac:
|
||||
self.form.editor.repaint()
|
||||
|
||||
def onClose(self) -> None:
|
||||
|
|
|
@ -15,7 +15,7 @@ from anki.errors import NotFoundError
|
|||
from anki.lang import without_unicode_isolation
|
||||
from anki.notes import NoteId
|
||||
from anki.tags import MARKED_TAG
|
||||
from anki.utils import isMac
|
||||
from anki.utils import is_mac
|
||||
from aqt import AnkiQt, gui_hooks
|
||||
from aqt.editor import Editor
|
||||
from aqt.exporting import ExportDialog
|
||||
|
@ -177,7 +177,7 @@ class Browser(QMainWindow):
|
|||
qconnect(f.actionRedo.triggered, self.redo)
|
||||
qconnect(f.actionInvertSelection.triggered, self.table.invert_selection)
|
||||
qconnect(f.actionSelectNotes.triggered, self.selectNotes)
|
||||
if not isMac:
|
||||
if not is_mac:
|
||||
f.actionClose.setVisible(False)
|
||||
qconnect(f.actionCreateFilteredDeck.triggered, self.createFilteredDeck)
|
||||
f.actionCreateFilteredDeck.setShortcuts(["Ctrl+G", "Ctrl+Alt+G"])
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
# Copyright: Ankitects Pty Ltd and contributors
|
||||
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||
from anki.utils import isMac
|
||||
from anki.utils import is_mac
|
||||
from aqt.theme import theme_manager
|
||||
|
||||
|
||||
def _want_right_border() -> bool:
|
||||
return not isMac or theme_manager.night_mode
|
||||
return not is_mac or theme_manager.night_mode
|
||||
|
||||
|
||||
from .item import SidebarItem, SidebarItemType
|
||||
|
|
|
@ -10,7 +10,7 @@ from anki.cards import Card, CardId
|
|||
from anki.collection import Collection, Config, OpChanges
|
||||
from anki.consts import *
|
||||
from anki.notes import Note, NoteId
|
||||
from anki.utils import isWin
|
||||
from anki.utils import is_win
|
||||
from aqt import colors, gui_hooks
|
||||
from aqt.browser.table import Columns, ItemId, SearchContext
|
||||
from aqt.browser.table.model import DataModel
|
||||
|
@ -375,7 +375,7 @@ class Table:
|
|||
def _setup_headers(self) -> None:
|
||||
vh = self._view.verticalHeader()
|
||||
hh = self._view.horizontalHeader()
|
||||
if not isWin:
|
||||
if not is_win:
|
||||
vh.hide()
|
||||
hh.show()
|
||||
hh.setHighlightSections(False)
|
||||
|
|
|
@ -29,7 +29,7 @@ from anki.consts import MODEL_CLOZE
|
|||
from anki.hooks import runFilter
|
||||
from anki.httpclient import HttpClient
|
||||
from anki.notes import Note, NoteFieldsCheckResult
|
||||
from anki.utils import checksum, isLin, isWin, namedtmp
|
||||
from anki.utils import checksum, is_lin, is_win, namedtmp
|
||||
from aqt import AnkiQt, colors, gui_hooks
|
||||
from aqt.operations import QueryOp
|
||||
from aqt.operations.note import update_note
|
||||
|
@ -331,7 +331,7 @@ noteEditorPromise.then(noteEditor => noteEditor.toolbar.toolbar.appendGroup({{
|
|||
parent=self.parentWindow,
|
||||
fill_empty=False,
|
||||
)
|
||||
if isWin:
|
||||
if is_win:
|
||||
self.parentWindow.activateWindow()
|
||||
|
||||
# JS->Python bridge
|
||||
|
@ -988,7 +988,7 @@ noteEditorPromise.then(noteEditor => noteEditor.toolbar.toolbar.appendGroup({{
|
|||
# choose new colour
|
||||
@deprecated(info=_js_legacy)
|
||||
def onChangeCol(self) -> None:
|
||||
if isLin:
|
||||
if is_lin:
|
||||
new = QColorDialog.getColor(
|
||||
QColor(self.fcolour),
|
||||
None,
|
||||
|
@ -1277,7 +1277,7 @@ class EditorWebView(AnkiWebView):
|
|||
# add a comment in the clipboard html so we can tell text is copied
|
||||
# from us and doesn't need to be stripped
|
||||
clip = self.editor.mw.app.clipboard()
|
||||
if not isMac and not clip.ownsClipboard():
|
||||
if not is_mac and not clip.ownsClipboard():
|
||||
return
|
||||
mime = clip.mimeData()
|
||||
if not mime.hasHtml():
|
||||
|
|
|
@ -31,7 +31,7 @@ from anki.decks import DeckDict, DeckId
|
|||
from anki.hooks import runHook
|
||||
from anki.notes import NoteId
|
||||
from anki.sound import AVTag, SoundOrVideoTag
|
||||
from anki.utils import devMode, ids2str, int_time, isLin, isMac, isWin, split_fields
|
||||
from anki.utils import dev_mode, ids2str, int_time, is_lin, is_mac, is_win, split_fields
|
||||
from aqt import gui_hooks
|
||||
from aqt.addons import DownloadLogEntry, check_and_prompt_for_updates, show_log_to_user
|
||||
from aqt.dbcheck import check_db
|
||||
|
@ -125,7 +125,7 @@ class AnkiQt(QMainWindow):
|
|||
self.onAppMsg(args[0])
|
||||
# Load profile in a timer so we can let the window finish init and not
|
||||
# close on profile load error.
|
||||
if isWin:
|
||||
if is_win:
|
||||
fn = self.setupProfileAfterWebviewsLoaded
|
||||
else:
|
||||
fn = self.setupProfile
|
||||
|
@ -194,7 +194,7 @@ class AnkiQt(QMainWindow):
|
|||
|
||||
def setup_shortcuts(self) -> None:
|
||||
QShortcut(
|
||||
QKeySequence("Ctrl+Meta+F" if isMac else "F11"),
|
||||
QKeySequence("Ctrl+Meta+F" if is_mac else "F11"),
|
||||
self,
|
||||
self.on_toggle_fullscreen,
|
||||
).setContext(Qt.ShortcutContext.ApplicationShortcut)
|
||||
|
@ -557,7 +557,7 @@ class AnkiQt(QMainWindow):
|
|||
corrupt = False
|
||||
try:
|
||||
self.maybeOptimize()
|
||||
if not devMode:
|
||||
if not dev_mode:
|
||||
corrupt = self.col.db.scalar("pragma quick_check") != "ok"
|
||||
except:
|
||||
corrupt = True
|
||||
|
@ -611,7 +611,7 @@ class AnkiQt(QMainWindow):
|
|||
assert not self.col or not self.col.db
|
||||
|
||||
nbacks = self.pm.profile["numBackups"]
|
||||
if not nbacks or devMode:
|
||||
if not nbacks or dev_mode:
|
||||
return
|
||||
dir = self.pm.backupFolder()
|
||||
path = self.pm.collectionPath()
|
||||
|
@ -845,7 +845,7 @@ title="{}" {}>{}</button>""".format(
|
|||
self.form.centralwidget.setLayout(self.mainLayout)
|
||||
|
||||
# force webengine processes to load before cwd is changed
|
||||
if isWin:
|
||||
if is_win:
|
||||
for webview in self.web, self.bottomWeb:
|
||||
webview.force_load_hack()
|
||||
|
||||
|
@ -1005,7 +1005,7 @@ title="{}" {}>{}</button>""".format(
|
|||
|
||||
def setupStyle(self) -> None:
|
||||
theme_manager.apply_style()
|
||||
if isLin:
|
||||
if is_lin:
|
||||
# On Linux, the check requires invoking an external binary,
|
||||
# which we don't want to be doing frequently
|
||||
interval_secs = 300
|
||||
|
@ -1260,7 +1260,7 @@ title="{}" {}>{}</button>""".format(
|
|||
aqt.update.showMessages(self, data)
|
||||
|
||||
def clockIsOff(self, diff: int) -> None:
|
||||
if devMode:
|
||||
if dev_mode:
|
||||
print("clock is off; ignoring")
|
||||
return
|
||||
diffText = tr.qt_misc_second(count=diff)
|
||||
|
@ -1560,14 +1560,14 @@ title="{}" {}>{}</button>""".format(
|
|||
|
||||
def setupSystemSpecific(self) -> None:
|
||||
self.hideMenuAccels = False
|
||||
if isMac:
|
||||
if is_mac:
|
||||
# mac users expect a minimize option
|
||||
self.minimizeShortcut = QShortcut("Ctrl+M", self)
|
||||
qconnect(self.minimizeShortcut.activated, self.onMacMinimize)
|
||||
self.hideMenuAccels = True
|
||||
self.maybeHideAccelerators()
|
||||
self.hideStatusTips()
|
||||
elif isWin:
|
||||
elif is_win:
|
||||
# make sure ctypes is bundled
|
||||
from ctypes import windll, wintypes # type: ignore
|
||||
|
||||
|
@ -1627,7 +1627,7 @@ title="{}" {}>{}</button>""".format(
|
|||
)
|
||||
return None
|
||||
# raise window
|
||||
if isWin:
|
||||
if is_win:
|
||||
# on windows we can raise the window by minimizing and restoring
|
||||
self.showMinimized()
|
||||
self.setWindowState(Qt.WindowState.WindowActive)
|
||||
|
|
|
@ -30,7 +30,7 @@ from anki.collection import GraphPreferences, OpChanges
|
|||
from anki.decks import UpdateDeckConfigs
|
||||
from anki.models import NotetypeNames
|
||||
from anki.scheduler.v3 import NextStates
|
||||
from anki.utils import devMode, from_json_bytes
|
||||
from anki.utils import dev_mode, from_json_bytes
|
||||
from aqt.changenotetype import ChangeNotetypeDialog
|
||||
from aqt.deckoptions import DeckOptionsDialog
|
||||
from aqt.operations.deck import update_deck_configs
|
||||
|
@ -87,7 +87,7 @@ class MediaServer(threading.Thread):
|
|||
|
||||
def run(self) -> None:
|
||||
try:
|
||||
if devMode:
|
||||
if dev_mode:
|
||||
# idempotent if logging has already been set up
|
||||
logging.basicConfig()
|
||||
logging.getLogger("waitress").setLevel(logging.ERROR)
|
||||
|
@ -100,7 +100,7 @@ class MediaServer(threading.Thread):
|
|||
port=desired_port,
|
||||
clear_untrusted_proxy_headers=True,
|
||||
)
|
||||
if devMode:
|
||||
if dev_mode:
|
||||
print(
|
||||
"Serving on http://%s:%s"
|
||||
% (self.server.effective_host, self.server.effective_port) # type: ignore
|
||||
|
@ -163,7 +163,7 @@ class MediaServer(threading.Thread):
|
|||
return 0
|
||||
# https://github.com/Pylons/webtest/blob/4b8a3ebf984185ff4fefb31b4d0cf82682e1fcf7/webtest/http.py#L123-L132
|
||||
for index in range(retries):
|
||||
if devMode or index > 0:
|
||||
if dev_mode or index > 0:
|
||||
print(
|
||||
f"{datetime.datetime.now()} awaiting media server on {host}:{port}..."
|
||||
)
|
||||
|
@ -236,7 +236,7 @@ def _handle_local_file_request(request: LocalFileRequest) -> Response:
|
|||
)
|
||||
|
||||
except Exception as error:
|
||||
if devMode:
|
||||
if dev_mode:
|
||||
print(
|
||||
"Caught HTTP server exception,\n%s"
|
||||
% "".join(traceback.format_exception(*sys.exc_info())),
|
||||
|
@ -260,7 +260,7 @@ def _builtin_data(path: str) -> bytes:
|
|||
with open(full_path, "rb") as f:
|
||||
return f.read()
|
||||
else:
|
||||
if isWin and not getattr(sys, "frozen", False):
|
||||
if is_win and not getattr(sys, "frozen", False):
|
||||
# default Python resource loader expects backslashes on Windows
|
||||
path = path.replace("/", "\\")
|
||||
reader = aqt.__loader__.get_resource_reader("aqt") # type: ignore
|
||||
|
@ -281,7 +281,7 @@ def _handle_builtin_file_request(request: BundledFileRequest) -> Response:
|
|||
HTTPStatus.NOT_FOUND,
|
||||
)
|
||||
except Exception as error:
|
||||
if devMode:
|
||||
if dev_mode:
|
||||
print(
|
||||
"Caught HTTP server exception,\n%s"
|
||||
% "".join(traceback.format_exception(*sys.exc_info())),
|
||||
|
@ -299,7 +299,7 @@ def _handle_builtin_file_request(request: BundledFileRequest) -> Response:
|
|||
@app.route("/<path:pathin>", methods=["GET", "POST"])
|
||||
def handle_request(pathin: str) -> Response:
|
||||
request = _extract_request(pathin)
|
||||
if devMode:
|
||||
if dev_mode:
|
||||
print(f"{time.time():.3f} {flask.request.method} /{pathin}")
|
||||
|
||||
if isinstance(request, NotFound):
|
||||
|
@ -383,7 +383,7 @@ def _extract_addon_request(path: str) -> LocalFileRequest | NotFound | None:
|
|||
try:
|
||||
manager = aqt.mw.addonManager
|
||||
except AttributeError as error:
|
||||
if devMode:
|
||||
if dev_mode:
|
||||
print(f"_redirectWebExports: {error}")
|
||||
return None
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ from distutils.spawn import ( # pylint: disable=import-error,no-name-in-module
|
|||
from queue import Empty, Full, Queue
|
||||
from typing import Optional
|
||||
|
||||
from anki.utils import isWin
|
||||
from anki.utils import is_win
|
||||
|
||||
|
||||
class MPVError(Exception):
|
||||
|
@ -65,7 +65,7 @@ class MPVTimeoutError(MPVError):
|
|||
pass
|
||||
|
||||
|
||||
if isWin:
|
||||
if is_win:
|
||||
# pylint: disable=import-error
|
||||
import pywintypes
|
||||
import win32file # pytype: disable=import-error
|
||||
|
@ -142,7 +142,7 @@ class MPVBase:
|
|||
"""Create a random socket filename which we pass to mpv with the
|
||||
--input-unix-socket option.
|
||||
"""
|
||||
if isWin:
|
||||
if is_win:
|
||||
self._sock_filename = "ankimpv"
|
||||
return
|
||||
fd, self._sock_filename = tempfile.mkstemp(prefix="mpv.")
|
||||
|
@ -157,7 +157,7 @@ class MPVBase:
|
|||
while self.is_running() and time.time() < start + 10:
|
||||
time.sleep(0.1)
|
||||
|
||||
if isWin:
|
||||
if is_win:
|
||||
# named pipe
|
||||
try:
|
||||
self._sock = win32file.CreateFile(
|
||||
|
@ -228,7 +228,7 @@ class MPVBase:
|
|||
"""
|
||||
buf = b""
|
||||
while not self._stop_event.is_set():
|
||||
if isWin:
|
||||
if is_win:
|
||||
try:
|
||||
(n, b) = win32file.ReadFile(self._sock, 4096)
|
||||
buf += b
|
||||
|
@ -327,7 +327,7 @@ class MPVBase:
|
|||
raise MPVTimeoutError("unable to put request")
|
||||
|
||||
# Write the message data to the socket.
|
||||
if isWin:
|
||||
if is_win:
|
||||
win32file.WriteFile(self._sock, data)
|
||||
else:
|
||||
while data:
|
||||
|
|
|
@ -40,14 +40,14 @@ import anki.sync
|
|||
import anki.rsbackend
|
||||
|
||||
# platform-specifics
|
||||
from anki.utils import isLin, isMac, isWin
|
||||
from anki.utils import is_lin, is_mac, is_win
|
||||
|
||||
if isWin:
|
||||
if is_win:
|
||||
# external module access
|
||||
import pythoncom
|
||||
import pywintypes
|
||||
import win32com
|
||||
|
||||
if isLin:
|
||||
if is_lin:
|
||||
# file locking
|
||||
import fcntl
|
||||
|
|
|
@ -11,12 +11,12 @@ import sys
|
|||
from ctypes import CDLL
|
||||
|
||||
import aqt.utils
|
||||
from anki.utils import isLin, isMac, isWin
|
||||
from anki.utils import is_lin, is_mac, is_win
|
||||
|
||||
|
||||
def get_windows_dark_mode() -> bool:
|
||||
"True if Windows system is currently in dark mode."
|
||||
if not isWin:
|
||||
if not is_win:
|
||||
return False
|
||||
|
||||
from winreg import ( # pylint: disable=import-error
|
||||
|
@ -34,7 +34,7 @@ def get_windows_dark_mode() -> bool:
|
|||
|
||||
def set_macos_dark_mode(enabled: bool) -> bool:
|
||||
"True if setting successful."
|
||||
if not isMac:
|
||||
if not is_mac:
|
||||
return False
|
||||
try:
|
||||
_ankihelper().set_darkmode_enabled(enabled)
|
||||
|
@ -47,7 +47,7 @@ def set_macos_dark_mode(enabled: bool) -> bool:
|
|||
|
||||
def get_macos_dark_mode() -> bool:
|
||||
"True if macOS system is currently in dark mode."
|
||||
if not isMac:
|
||||
if not is_mac:
|
||||
return False
|
||||
try:
|
||||
return _ankihelper().system_is_dark()
|
||||
|
@ -60,7 +60,7 @@ def get_macos_dark_mode() -> bool:
|
|||
def get_linux_dark_mode() -> bool:
|
||||
"""True if Linux system is in dark mode.
|
||||
This only works if the GTK theme name contains '-dark'"""
|
||||
if not isLin:
|
||||
if not is_lin:
|
||||
return False
|
||||
try:
|
||||
process = subprocess.run(
|
||||
|
|
|
@ -295,12 +295,12 @@ def video_driver_name_for_platform(driver: VideoDriver) -> str:
|
|||
if driver == VideoDriver.ANGLE:
|
||||
return tr.preferences_video_driver_angle()
|
||||
elif driver == VideoDriver.Software:
|
||||
if isMac:
|
||||
if is_mac:
|
||||
return tr.preferences_video_driver_software_mac()
|
||||
else:
|
||||
return tr.preferences_video_driver_software_other()
|
||||
else:
|
||||
if isMac:
|
||||
if is_mac:
|
||||
return tr.preferences_video_driver_opengl_mac()
|
||||
else:
|
||||
return tr.preferences_video_driver_opengl_other()
|
||||
|
|
|
@ -20,7 +20,7 @@ from anki.collection import Collection
|
|||
from anki.db import DB
|
||||
from anki.lang import without_unicode_isolation
|
||||
from anki.sync import SyncAuth
|
||||
from anki.utils import int_time, isMac, isWin
|
||||
from anki.utils import int_time, is_mac, is_win
|
||||
from aqt import appHelpSite
|
||||
from aqt.qt import *
|
||||
from aqt.theme import Theme
|
||||
|
@ -39,20 +39,20 @@ class VideoDriver(Enum):
|
|||
|
||||
@staticmethod
|
||||
def default_for_platform() -> VideoDriver:
|
||||
if isMac:
|
||||
if is_mac:
|
||||
return VideoDriver.OpenGL
|
||||
else:
|
||||
return VideoDriver.Software
|
||||
|
||||
def constrained_to_platform(self) -> VideoDriver:
|
||||
if self == VideoDriver.ANGLE and not isWin:
|
||||
if self == VideoDriver.ANGLE and not is_win:
|
||||
return VideoDriver.Software
|
||||
return self
|
||||
|
||||
def next(self) -> VideoDriver:
|
||||
if self == VideoDriver.Software:
|
||||
return VideoDriver.OpenGL
|
||||
elif self == VideoDriver.OpenGL and isWin:
|
||||
elif self == VideoDriver.OpenGL and is_win:
|
||||
return VideoDriver.ANGLE
|
||||
else:
|
||||
return VideoDriver.Software
|
||||
|
@ -60,7 +60,7 @@ class VideoDriver(Enum):
|
|||
@staticmethod
|
||||
def all_for_platform() -> list[VideoDriver]:
|
||||
all = [VideoDriver.OpenGL]
|
||||
if isWin:
|
||||
if is_win:
|
||||
all.append(VideoDriver.ANGLE)
|
||||
all.append(VideoDriver.Software)
|
||||
return all
|
||||
|
@ -340,11 +340,11 @@ class ProfileManager:
|
|||
self.ensureBaseExists()
|
||||
|
||||
def _defaultBase(self) -> str:
|
||||
if isWin:
|
||||
if is_win:
|
||||
from aqt.winpaths import get_appdata
|
||||
|
||||
return os.path.join(get_appdata(), "Anki2")
|
||||
elif isMac:
|
||||
elif is_mac:
|
||||
return os.path.expanduser("~/Library/Application Support/Anki2")
|
||||
else:
|
||||
dataDir = os.environ.get(
|
||||
|
|
|
@ -20,7 +20,7 @@ else:
|
|||
from . import qt5_compat # needs to be imported first
|
||||
from .qt6 import *
|
||||
|
||||
from anki.utils import isMac, isWin
|
||||
from anki.utils import is_mac, is_win
|
||||
|
||||
# fix buggy ubuntu12.04 display of language selector
|
||||
os.environ["LIBOVERLAY_SCROLLBAR"] = "0"
|
||||
|
|
|
@ -23,7 +23,7 @@ import aqt
|
|||
from anki import hooks
|
||||
from anki.cards import Card
|
||||
from anki.sound import AV_REF_RE, AVTag, SoundOrVideoTag
|
||||
from anki.utils import isLin, isMac, isWin, namedtmp
|
||||
from anki.utils import is_lin, is_mac, is_win, namedtmp
|
||||
from aqt import gui_hooks
|
||||
from aqt.mpv import MPV, MPVBase, MPVCommandError
|
||||
from aqt.qt import *
|
||||
|
@ -235,7 +235,7 @@ def _packagedCmd(cmd: list[str]) -> tuple[Any, dict[str, str]]:
|
|||
if "LD_LIBRARY_PATH" in env:
|
||||
del env["LD_LIBRARY_PATH"]
|
||||
|
||||
packaged_path = Path(sys.prefix) / "audio" / (cmd[0] + (".exe" if isWin else ""))
|
||||
packaged_path = Path(sys.prefix) / "audio" / (cmd[0] + (".exe" if is_win else ""))
|
||||
if packaged_path.exists():
|
||||
cmd[0] = str(packaged_path)
|
||||
|
||||
|
@ -359,7 +359,7 @@ class SimpleMpvPlayer(SimpleProcessPlayer, VideoPlayer):
|
|||
|
||||
class SimpleMplayerPlayer(SimpleProcessPlayer, SoundOrVideoPlayer):
|
||||
args, env = _packagedCmd(["mplayer", "-really-quiet", "-noautosub"])
|
||||
if isWin:
|
||||
if is_win:
|
||||
args += ["-ao", "win32"]
|
||||
|
||||
|
||||
|
@ -369,7 +369,7 @@ class SimpleMplayerPlayer(SimpleProcessPlayer, SoundOrVideoPlayer):
|
|||
|
||||
class MpvManager(MPV, SoundOrVideoPlayer):
|
||||
|
||||
if not isLin:
|
||||
if not is_lin:
|
||||
default_argv = MPVBase.default_argv + [
|
||||
"--input-media-keys=no",
|
||||
]
|
||||
|
@ -801,7 +801,7 @@ def setup_audio(taskman: TaskManager, base_folder: str) -> None:
|
|||
if mpvManager is not None:
|
||||
av_player.players.append(mpvManager)
|
||||
|
||||
if isWin:
|
||||
if is_win:
|
||||
mpvPlayer = SimpleMpvPlayer(taskman, base_folder)
|
||||
av_player.players.append(mpvPlayer)
|
||||
else:
|
||||
|
@ -809,11 +809,11 @@ def setup_audio(taskman: TaskManager, base_folder: str) -> None:
|
|||
av_player.players.append(mplayer)
|
||||
|
||||
# tts support
|
||||
if isMac:
|
||||
if is_mac:
|
||||
from aqt.tts import MacTTSPlayer
|
||||
|
||||
av_player.players.append(MacTTSPlayer(taskman))
|
||||
elif isWin:
|
||||
elif is_win:
|
||||
from aqt.tts import WindowsTTSPlayer
|
||||
|
||||
av_player.players.append(WindowsTTSPlayer(taskman))
|
||||
|
|
|
@ -8,8 +8,8 @@ import platform
|
|||
from dataclasses import dataclass
|
||||
|
||||
import aqt
|
||||
from anki.utils import isMac
|
||||
from aqt import QApplication, colors, gui_hooks, isWin
|
||||
from anki.utils import is_mac
|
||||
from aqt import QApplication, colors, gui_hooks, is_win
|
||||
from aqt.platform import (
|
||||
get_linux_dark_mode,
|
||||
get_macos_dark_mode,
|
||||
|
@ -65,7 +65,7 @@ class ThemeManager:
|
|||
|
||||
def macos_dark_mode(self) -> bool:
|
||||
"True if the user has night mode on, and has forced native widgets."
|
||||
if not isMac:
|
||||
if not is_mac:
|
||||
return False
|
||||
|
||||
if not self._night_mode_preference:
|
||||
|
@ -128,9 +128,9 @@ class ThemeManager:
|
|||
def body_class(self, night_mode: bool | None = None) -> str:
|
||||
"Returns space-separated class list for platform/theme."
|
||||
classes = []
|
||||
if isWin:
|
||||
if is_win:
|
||||
classes.append("isWin")
|
||||
elif isMac:
|
||||
elif is_mac:
|
||||
classes.append("isMac")
|
||||
else:
|
||||
classes.append("isLin")
|
||||
|
@ -164,9 +164,9 @@ class ThemeManager:
|
|||
elif theme == Theme.DARK:
|
||||
return True
|
||||
else:
|
||||
if isWin:
|
||||
if is_win:
|
||||
return get_windows_dark_mode()
|
||||
elif isMac:
|
||||
elif is_mac:
|
||||
return get_macos_dark_mode()
|
||||
else:
|
||||
return get_linux_dark_mode()
|
||||
|
@ -192,7 +192,7 @@ class ThemeManager:
|
|||
def _apply_style(self, app: QApplication) -> None:
|
||||
buf = ""
|
||||
|
||||
if isWin and platform.release() == "10":
|
||||
if is_win and platform.release() == "10":
|
||||
# day mode is missing a bottom border; background must be
|
||||
# also set for border to apply
|
||||
buf += f"""
|
||||
|
|
|
@ -41,7 +41,7 @@ from typing import Any, cast
|
|||
import anki
|
||||
from anki import hooks
|
||||
from anki.sound import AVTag, TTSTag
|
||||
from anki.utils import checksum, isWin, tmpdir
|
||||
from anki.utils import checksum, is_win, tmpdir
|
||||
from aqt import gui_hooks
|
||||
from aqt.sound import OnDoneCallback, SimpleProcessPlayer
|
||||
from aqt.utils import tooltip, tr
|
||||
|
@ -264,7 +264,7 @@ class WindowsVoice(TTSVoice):
|
|||
handle: Any
|
||||
|
||||
|
||||
if isWin:
|
||||
if is_win:
|
||||
import win32com.client # pylint: disable=import-error
|
||||
|
||||
# language ID map from https://github.com/sindresorhus/lcid/blob/master/lcid.json
|
||||
|
|
|
@ -14,8 +14,8 @@ from anki.collection import Collection, HelpPage
|
|||
from anki.lang import TR, tr_legacyglobal # pylint: disable=unused-import
|
||||
from anki.utils import (
|
||||
invalid_filename,
|
||||
isMac,
|
||||
isWin,
|
||||
is_mac,
|
||||
is_win,
|
||||
no_bundled_libs,
|
||||
version_with_build,
|
||||
)
|
||||
|
@ -509,7 +509,7 @@ def getSaveFile(
|
|||
|
||||
def saveGeom(widget: QWidget, key: str) -> None:
|
||||
key += "Geom"
|
||||
if isMac and (widget.windowState() & Qt.WindowState.WindowFullScreen):
|
||||
if is_mac and (widget.windowState() & Qt.WindowState.WindowFullScreen):
|
||||
geom = None
|
||||
else:
|
||||
geom = widget.saveGeometry()
|
||||
|
@ -522,7 +522,7 @@ def restoreGeom(
|
|||
key += "Geom"
|
||||
if aqt.mw.pm.profile.get(key):
|
||||
widget.restoreGeometry(aqt.mw.pm.profile[key])
|
||||
if isMac and offset:
|
||||
if is_mac and offset:
|
||||
if qtmajor > 5 or qtminor > 6:
|
||||
# bug in osx toolkit
|
||||
s = widget.size()
|
||||
|
@ -659,7 +659,7 @@ def mungeQA(col: Collection, txt: str) -> str:
|
|||
|
||||
|
||||
def openFolder(path: str) -> None:
|
||||
if isWin:
|
||||
if is_win:
|
||||
subprocess.run(["explorer", f"file://{path}"], check=False)
|
||||
else:
|
||||
with no_bundled_libs():
|
||||
|
@ -667,20 +667,20 @@ def openFolder(path: str) -> None:
|
|||
|
||||
|
||||
def shortcut(key: str) -> str:
|
||||
if isMac:
|
||||
if is_mac:
|
||||
return re.sub("(?i)ctrl", "Command", key)
|
||||
return key
|
||||
|
||||
|
||||
def maybeHideClose(bbox: QDialogButtonBox) -> None:
|
||||
if isMac:
|
||||
if is_mac:
|
||||
b = bbox.button(QDialogButtonBox.StandardButton.Close)
|
||||
if b:
|
||||
bbox.removeButton(b)
|
||||
|
||||
|
||||
def addCloseShortcut(widg: QDialog) -> None:
|
||||
if not isMac:
|
||||
if not is_mac:
|
||||
return
|
||||
shortcut = QShortcut(QKeySequence("Ctrl+W"), widg)
|
||||
qconnect(shortcut.activated, widg.reject)
|
||||
|
@ -688,7 +688,7 @@ def addCloseShortcut(widg: QDialog) -> None:
|
|||
|
||||
|
||||
def downArrow() -> str:
|
||||
if isWin:
|
||||
if is_win:
|
||||
return "▼"
|
||||
# windows 10 is lacking the smaller arrow on English installs
|
||||
return "▾"
|
||||
|
@ -853,9 +853,9 @@ def supportText() -> str:
|
|||
|
||||
from aqt import mw
|
||||
|
||||
if isWin:
|
||||
if is_win:
|
||||
platname = f"Windows {platform.win32_ver()[0]}"
|
||||
elif isMac:
|
||||
elif is_mac:
|
||||
platname = f"Mac {platform.mac_ver()[0]}"
|
||||
else:
|
||||
platname = "Linux"
|
||||
|
|
|
@ -9,7 +9,7 @@ from typing import Any, Callable, Optional, Sequence, cast
|
|||
|
||||
import anki
|
||||
from anki.lang import is_rtl
|
||||
from anki.utils import isLin, isMac, isWin
|
||||
from anki.utils import is_lin, is_mac, is_win
|
||||
from aqt import colors, gui_hooks
|
||||
from aqt.qt import *
|
||||
from aqt.theme import theme_manager
|
||||
|
@ -265,7 +265,7 @@ class AnkiWebView(QWebEngineView):
|
|||
isinstance(evt, QMouseEvent)
|
||||
and evt.type() == QEvent.Type.MouseButtonRelease
|
||||
):
|
||||
if evt.button() == Qt.MouseButton.MiddleButton and isLin:
|
||||
if evt.button() == Qt.MouseButton.MiddleButton and is_lin:
|
||||
self.onMiddleClickPaste()
|
||||
return True
|
||||
return False
|
||||
|
@ -356,7 +356,7 @@ class AnkiWebView(QWebEngineView):
|
|||
if webscale:
|
||||
return float(webscale)
|
||||
|
||||
if qtmajor > 5 or isMac:
|
||||
if qtmajor > 5 or is_mac:
|
||||
return 1
|
||||
screen = QApplication.desktop().screen() # type: ignore
|
||||
if screen is None:
|
||||
|
@ -364,7 +364,7 @@ class AnkiWebView(QWebEngineView):
|
|||
|
||||
dpi = screen.logicalDpiX()
|
||||
factor = dpi / 96.0
|
||||
if isLin:
|
||||
if is_lin:
|
||||
factor = max(1, factor)
|
||||
return factor
|
||||
return 1
|
||||
|
@ -388,7 +388,7 @@ class AnkiWebView(QWebEngineView):
|
|||
def get_window_bg_color(self, night_mode: bool) -> QColor:
|
||||
if night_mode:
|
||||
return QColor(colors.WINDOW_BG[1])
|
||||
elif isMac:
|
||||
elif is_mac:
|
||||
# standard palette does not return correct window color on macOS
|
||||
return QColor("#ececec")
|
||||
else:
|
||||
|
@ -398,13 +398,13 @@ class AnkiWebView(QWebEngineView):
|
|||
palette = theme_manager.default_palette
|
||||
color_hl = palette.color(QPalette.ColorRole.Highlight).name()
|
||||
|
||||
if isWin:
|
||||
if is_win:
|
||||
# T: include a font for your language on Windows, eg: "Segoe UI", "MS Mincho"
|
||||
family = tr.qt_misc_segoe_ui()
|
||||
button_style = "button { font-family:%s; }" % family
|
||||
button_style += "\n:focus { outline: 1px solid %s; }" % color_hl
|
||||
font = f"font-size:12px;font-family:{family};"
|
||||
elif isMac:
|
||||
elif is_mac:
|
||||
family = "Helvetica"
|
||||
font = f'font-size:15px;font-family:"{family}";'
|
||||
button_style = """
|
||||
|
|
Loading…
Reference in a new issue