anki-word-query/addons/fastwq/query/__init__.py
2018-08-09 19:34:49 +08:00

117 lines
3.1 KiB
Python

#-*- coding:utf-8 -*-
#
# Copyright (C) 2018 sthoo <sth201807@gmail.com>
#
# Support: Report an issue at https://github.com/sth2018/FastWordQuery/issues
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# any later version; http://www.gnu.org/copyleft/gpl.html.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from collections import defaultdict
import os
import shutil
import unicodedata
from aqt import mw
from aqt.utils import showInfo, showText, tooltip
from .worker import QueryWorkerManager
from .common import promot_choose_css, inspect_note
from ..constants import Endpoint, Template
from ..context import config
from ..lang import _
from ..gui import ProgressWindow
from ..service import service_manager, service_pool, QueryResult, copy_static_file
from ..service.base import LocalService
from ..utils import Empty, MapDict, Queue, wrap_css
__all__ = ['query_from_browser', 'query_from_editor_all_fields']
def query_from_browser(browser):
"""
Query word from Browser
"""
if not browser:
return
notes = [browser.mw.col.getNote(note_id)
for note_id in browser.selectedNotes()]
if len(notes) == 1:
query_from_editor_all_fields(browser.editor)
else:
query_all(notes)
# browser.model.reset()
def query_from_editor_all_fields(editor):
"""
Query word fileds from Editor
"""
if not editor or not editor.note:
return
word_ord, word, maps = inspect_note(editor.note)
nomaps = True
for each in maps:
dict_unique = each.get('dict_unique', '').strip()
ignore = each.get('ignore', True)
if dict_unique and not ignore:
nomaps = False
break
if nomaps:
from ..gui import show_options
tooltip(_('PLS_SET_DICTIONARY_FIELDS'))
show_options(
editor.parentWindow,
editor.note.model()['id'],
query_from_editor_all_fields,
editor
)
else:
query_all([editor.note])
editor.setNote(editor.note, focus=True)
editor.saveNow()
def query_all(notes):
"""
Query maps word fileds
"""
if len(notes) == 0:
return
work_manager = QueryWorkerManager()
#work_manager.reset()
#progress.start(max=len(notes), min=0, immediate=True)
queue = work_manager.queue
for note in notes:
queue.put(note)
work_manager.start()
work_manager.join()
#progress.finish()
promot_choose_css(work_manager.missed_css)
tooltip(u'{0} {1} {2}, {3} {4}'.format(_('UPDATED'), work_manager.counter, _(
'CARDS'), work_manager.fields, _('FIELDS')))
#work_manager.clean()
service_pool.clean()