sth2018 / FastWordQuery

Query words definitions or examples etc. from local or web dictionaries to fill into Anki cards.
https://ankiweb.net/shared/info/1807206748
GNU General Public License v3.0
276 stars 84 forks source link

mac 13.0上出现问题 #252

Open alex404notfound opened 2 years ago

alex404notfound commented 2 years ago

错误 发生了一个错误。请在启动Anki时按住「Shift」键临时禁用插件加载。 如仅在插件启用时出错,请使用「工具」>「插件」功能禁用部分插件后重启Anki, 请重复上述步骤直至找到引起错误的插件。 找到引起错误的插件后,请反馈给插件作者。 调试信息: Anki 2.1.54 (b6a7760c) Python 3.9.7 Qt 6.3.1 PyQt 6.3.1 Platform: Mac 13.0 Flags: frz=True ao=True sv=2 Add-ons, last update check: 2022-08-23 11:04:56 相关插件:⁨Fast Word Query Multi-threaded queries for words from local or web dictionaries⁩

Caught exception: Traceback (most recent call last): File "/Users/404notfound/Library/Application Support/Anki2/addons21/1807206748/gui/foldermanager.py", line 89, in accept self.save() File "/Users/404notfound/Library/Application Support/Anki2/addons21/1807206748/gui/foldermanager.py", line 99, in save config.update(data) File "/Users/404notfound/Library/Application Support/Anki2/addons21/1807206748/context.py", line 60, in update with open(self.path, 'w', encoding='utf-8') as f: OSError: [Errno 30] Read-only file system: '_fastwqcfg.json'

我用的词典文件是: http://louischeung.top:225/mdict%E8%AF%8D%E5%85%B8%E5%8C%85/%E7%89%9B%E6%B4%A5%E9%AB%98%E9%98%B6%E8%8B%B1%E6%B1%89%E5%8F%8C%E8%A7%A3%E8%AF%8D%E5%85%B8%EF%BC%88%E7%AC%AC10%E7%89%88%EF%BC%89V3/

Buliet commented 2 years ago

Mac M1 遇到同样的问题,临时解决 修改文件:/Users/abc123/Library/Application Support/Anki2/addons21/1807206748/context.py 其中 abc123 是我的用户名,需要改成你自己的

找到下面这一行,我的在文件 第 42 行 self.path = u'_' + self._CONFIG_FILENAME

改成下面这样 self.path = os.environ.get("HOME") + u'/Library/Application Support/Anki2/' + os.environ.get("USER") + u'/collection.media/' + u'_' + self._CONFIG_FILENAME

Buliet commented 2 years ago

另外 还遇到 录入后不能正常播放音频,查了下发现是文件不在对应的文件夹,每次需要手动调整下 用的 LDOCE6.mdd 和 LDOCE6.mdx 故 临时解决 修改文件:/Users/abc123/Library/Application Support/Anki2/addons21/1807206748/service/dict/LDOCE6.py 同样,路径中的用户名需要改成自己的

找到下面这段,我的在文件 第 47 行 - 第 57 行,整段覆盖后,重新

def _fld_voice(self, html, voice):
    """获取发音字段"""
    for regexp in LANG_TO_REGEXPS[voice]:
        match = regexp.search(html)
        if match:
            val = '/' + match.group(1)
            name = get_hex_name('mdx-'+self.unique.lower(), val, 'mp3')
            tmpfname = os.environ.get("HOME") + u'/Library/Application Support/Anki2/' + os.environ.get("USER") + u'/collection.media/' + name
            # name = self.save_file(val, name)
            tmpfname = self.save_file(val, tmpfname)
            if tmpfname:
            # if name:
                return self.get_anki_label(name, 'audio')
    return ''
samon127 commented 2 years ago

另外 还遇到 录入后不能正常播放音频,查了下发现是文件不在对应的文件夹,每次需要手动调整下 用的 LDOCE6.mdd 和 LDOCE6.mdx 故 临时解决 修改文件:/Users/abc123/Library/Application Support/Anki2/addons21/1807206748/service/dict/LDOCE6.py 同样,路径中的用户名需要改成自己的

找到下面这段,我的在文件 第 47 行 - 第 57 行,整段覆盖后,重新

def _fld_voice(self, html, voice):
    """获取发音字段"""
    for regexp in LANG_TO_REGEXPS[voice]:
        match = regexp.search(html)
        if match:
            val = '/' + match.group(1)
            name = get_hex_name('mdx-'+self.unique.lower(), val, 'mp3')
            tmpfname = os.environ.get("HOME") + u'/Library/Application Support/Anki2/' + os.environ.get("USER") + u'/collection.media/' + name
            # name = self.save_file(val, name)
            tmpfname = self.save_file(val, tmpfname)
            if tmpfname:
            # if name:
                return self.get_anki_label(name, 'audio')
    return ''

I use Youdao, here is my fix in /Users/abc123/Library/Application Support/Anki2/addons21/1807206748/service/dict/youdao.py:


    def fld_american_audio(self):
        audio_url = u'http://dict.youdao.com/dictvoice?audio={}&type=2'.format(self.quote_word)
        if youdao_download_mp3:
            filename = get_hex_name(self.unique.lower(), audio_url, 'mp3')

            tmpfname = os.environ.get("HOME") + u'/Library/Application Support/Anki2/User 1/' + u'/collection.media/' + filename
            tmpfname = self.download(audio_url, tmpfname)
            if tmpfname:
                return self.get_anki_label(filename, 'audio')

            # if os.path.exists(filename) or self.download(audio_url, filename):
            #    return self.get_anki_label(filename, 'audio')
        return audio_url```