From cd2c58a38abecd525d53b855a42ae8b2fee4ae28 Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Sun, 5 Apr 2015 17:10:31 -0500 Subject: [PATCH] Re-org file structure, make PI work with it, CLI & web service currently broken. --- .gitignore | 2 + calibre-plugin/__init__.py | 14 +- calibre-plugin/common_utils.py | 27 +- calibre-plugin/config.py | 46 +- calibre-plugin/dialogs.py | 16 +- calibre-plugin/ffdl_plugin.py | 69 +- calibre-plugin/ffdl_util.py | 6 +- calibre-plugin/images/icon.png | Bin 24649 -> 23025 bytes calibre-plugin/images/icon2.xcf | Bin 0 -> 82745 bytes calibre-plugin/images/old icon.png | Bin 0 -> 24649 bytes calibre-plugin/jobs.py | 14 +- .../plugin-defaults.ini | 4006 +++++++-------- .../plugin-example.ini | 244 +- ... plugin-import-name-fanficfare_plugin.txt} | 0 calibre-plugin/prefs.py | 4 +- calibre-plugin/translations/messages.pot | 326 +- defaults.ini => cli/defaults.ini | 0 downloader.py => cli/downloader.py | 28 +- example.ini => cli/example.ini | 0 delete_fic.py | 59 - epubmerge.py | 25 - .../BeautifulSoup.py | 0 .../HtmlTagStack.py | 0 .../__init__.py | 2 +- .../adapters/__init__.py | 2 +- .../adapters/adapter_adastrafanficcom.py | 0 .../adapters/adapter_archiveofourownorg.py | 6 +- .../adapters/adapter_archiveskyehawkecom.py | 0 .../adapter_ashwindersycophanthexcom.py | 0 .../adapters/adapter_asr3slashzoneorg.py | 0 .../adapters/adapter_bdsmgeschichten.py | 0 .../adapters/adapter_bloodshedversecom.py | 0 .../adapters/adapter_bloodtiesfancom.py | 0 .../adapters/adapter_buffynfaithnet.py | 0 .../adapters/adapter_chaossycophanthexcom.py | 0 .../adapters/adapter_checkmatedcom.py | 0 .../adapters/adapter_csiforensicscom.py | 0 .../adapters/adapter_darksolaceorg.py | 2 +- .../adapters/adapter_destinysgatewaycom.py | 0 .../adapters/adapter_devianthearts.py | 0 .../adapters/adapter_dokugacom.py | 0 .../adapters/adapter_dotmoonnet.py | 0 .../adapters/adapter_dracoandginnycom.py | 0 .../adapters/adapter_dramioneorg.py | 0 .../adapters/adapter_efictionestelielde.py | 0 .../adapters/adapter_efpfanficnet.py | 0 .../adapter_erosnsapphosycophanthexcom.py | 0 .../adapters/adapter_fanficcastletvnet.py | 0 .../adapters/adapter_fanfichu.py | 0 .../adapters/adapter_fanfictioncsodaidokhu.py | 0 .../adapters/adapter_fanfictionjunkiesde.py | 0 .../adapters/adapter_fanfictionnet.py | 0 .../adapters/adapter_fanfiktionde.py | 0 .../adapters/adapter_fannation.py | 0 .../adapters/adapter_fhsarchivecom.py | 0 .../adapters/adapter_ficbooknet.py | 0 .../adapters/adapter_fictionalleyorg.py | 0 .../adapters/adapter_fictionmaniatv.py | 0 .../adapters/adapter_fictionpadcom.py | 2 +- .../adapters/adapter_fictionpresscom.py | 0 .../adapters/adapter_ficwadcom.py | 0 .../adapters/adapter_fimfictionnet.py | 4 +- .../adapters/adapter_finestoriescom.py | 0 .../adapters/adapter_grangerenchantedcom.py | 0 .../adapter_harrypotterfanfictioncom.py | 0 .../adapters/adapter_hennethannunnet.py | 0 .../adapters/adapter_hlfictionnet.py | 0 .../adapters/adapter_hpfandomnet.py | 0 .../adapters/adapter_hpfanficarchivecom.py | 0 .../adapters/adapter_iketernalnet.py | 0 .../adapters/adapter_imagineeficcom.py | 0 .../adapters/adapter_indeathnet.py | 0 .../adapters/adapter_ksarchivecom.py | 0 .../adapters/adapter_libraryofmoriacom.py | 0 .../adapters/adapter_literotica.py | 0 .../adapters/adapter_lotrfanfictioncom.py | 0 .../adapters/adapter_lumossycophanthexcom.py | 0 .../adapters/adapter_mediaminerorg.py | 0 .../adapters/adapter_merlinficdtwinscouk.py | 0 .../adapters/adapter_midnightwhispersca.py | 0 .../adapters/adapter_mugglenetcom.py | 0 .../adapters/adapter_nationallibrarynet.py | 0 .../adapters/adapter_ncisficcom.py | 0 .../adapters/adapter_ncisfictionnet.py | 0 .../adapters/adapter_netraptororg.py | 0 .../adapters/adapter_nfacommunitycom.py | 0 .../adapters/adapter_nhamagicalworldsus.py | 0 .../adapters/adapter_nickandgregnet.py | 0 .../adapters/adapter_nocturnallightnet.py | 0 .../adapter_occlumencysycophanthexcom.py | 0 .../adapter_onedirectionfanfictioncom.py | 0 .../adapters/adapter_phoenixsongnet.py | 0 .../adapters/adapter_pommedesangcom.py | 0 .../adapters/adapter_ponyfictionarchivenet.py | 0 .../adapters/adapter_portkeyorg.py | 2 +- .../adapters/adapter_potionsandsnitches.py | 0 .../adapters/adapter_potterficscom.py | 0 .../adapter_potterheadsanonymouscom.py | 0 .../adapters/adapter_pretendercentrecom.py | 0 .../adapters/adapter_psychficcom.py | 0 .../adapters/adapter_qafficcom.py | 0 .../adapters/adapter_restrictedsectionorg.py | 4 +- .../adapters/adapter_samandjacknet.py | 0 .../adapters/adapter_samdeanarchivenu.py | 0 .../adapters/adapter_scarheadnet.py | 0 .../adapters/adapter_scarvesandcoffeenet.py | 0 .../adapters/adapter_sg1heliopoliscom.py | 0 .../adapters/adapter_sheppardweircom.py | 0 .../adapters/adapter_simplyundeniablecom.py | 0 .../adapters/adapter_sinfuldesireorg.py | 0 .../adapters/adapter_siyecouk.py | 0 .../adapters/adapter_spikeluvercom.py | 0 .../adapters/adapter_squidgeorgpeja.py | 0 .../adapters/adapter_stargateatlantisorg.py | 0 .../adapters/adapter_storiesofardacom.py | 0 .../adapters/adapter_storiesonlinenet.py | 0 .../adapters/adapter_tenhawkpresentscom.py | 0 .../adapters/adapter_test1.py | 0 .../adapters/adapter_thealphagatecom.py | 0 .../adapters/adapter_thehexfilesnet.py | 0 .../adapters/adapter_thehookupzonenet.py | 0 .../adapters/adapter_themaplebookshelf.py | 0 .../adapters/adapter_themasquenet.py | 0 .../adapters/adapter_thepetulantpoetesscom.py | 0 .../adapters/adapter_thequidditchpitchorg.py | 0 .../adapters/adapter_tokrafandomnetcom.py | 0 .../adapters/adapter_tolkienfanfiction.py | 0 .../adapters/adapter_trekiverseorg.py | 0 .../adapters/adapter_tthfanficorg.py | 0 .../adapters/adapter_twcslibrarynet.py | 0 .../adapters/adapter_twilightarchivescom.py | 0 .../adapters/adapter_twilightednet.py | 0 .../adapters/adapter_twiwritenet.py | 0 .../adapters/adapter_voracity2eficcom.py | 0 .../adapters/adapter_walkingtheplankorg.py | 0 .../adapters/adapter_whoficcom.py | 0 .../adapters/adapter_wizardtalesnet.py | 0 .../adapters/adapter_wolverineandroguecom.py | 0 .../adapters/adapter_wraithbaitcom.py | 0 .../adapters/base_adapter.py | 0 .../adapters/base_efiction_adapter.py | 0 .../configurable.py | 0 .../epubutils.py | 0 .../exceptions.py | 0 .../geturls.py | 0 .../gziphttp.py | 0 {fanficdownloader => fff_internals}/html.py | 0 .../html2text.py | 0 .../htmlcleanup.py | 0 .../htmlheuristics.py | 0 {fanficdownloader => fff_internals}/mobi.py | 0 {fanficdownloader => fff_internals}/story.py | 0 .../translit.py | 0 .../writers/__init__.py | 0 .../writers/base_writer.py | 0 .../writers/writer_epub.py | 8 +- .../writers/writer_html.py | 0 .../writers/writer_mobi.py | 0 .../writers/writer_txt.py | 0 .../bs4}/COPYING.txt | 0 .../bs4}/__init__.py | 0 .../bs4}/builder/__init__.py | 0 .../bs4}/builder/_html5lib.py | 0 .../bs4}/builder/_htmlparser.py | 0 .../bs4}/builder/_lxml.py | 0 {bs4 => included_dependencies/bs4}/dammit.py | 0 .../bs4}/diagnose.py | 0 {bs4 => included_dependencies/bs4}/element.py | 0 .../chardet}/__init__.py | 0 .../chardet}/big5freq.py | 0 .../chardet}/big5prober.py | 0 .../chardet}/chardetect.py | 0 .../chardet}/chardistribution.py | 0 .../chardet}/charsetgroupprober.py | 0 .../chardet}/charsetprober.py | 0 .../chardet}/codingstatemachine.py | 0 .../chardet}/compat.py | 0 .../chardet}/constants.py | 0 .../chardet}/cp949prober.py | 0 .../chardet}/escprober.py | 0 .../chardet}/escsm.py | 0 .../chardet}/eucjpprober.py | 0 .../chardet}/euckrfreq.py | 0 .../chardet}/euckrprober.py | 0 .../chardet}/euctwfreq.py | 0 .../chardet}/euctwprober.py | 0 .../chardet}/gb2312freq.py | 0 .../chardet}/gb2312prober.py | 0 .../chardet}/hebrewprober.py | 0 .../chardet}/jisfreq.py | 0 .../chardet}/jpcntx.py | 0 .../chardet}/langbulgarianmodel.py | 0 .../chardet}/langcyrillicmodel.py | 0 .../chardet}/langgreekmodel.py | 0 .../chardet}/langhebrewmodel.py | 0 .../chardet}/langhungarianmodel.py | 0 .../chardet}/langthaimodel.py | 0 .../chardet}/latin1prober.py | 0 .../chardet}/mbcharsetprober.py | 0 .../chardet}/mbcsgroupprober.py | 0 .../chardet}/mbcssm.py | 0 .../chardet}/sbcharsetprober.py | 0 .../chardet}/sbcsgroupprober.py | 0 .../chardet}/sjisprober.py | 0 .../chardet}/universaldetector.py | 0 .../chardet}/utf8prober.py | 0 .../html5lib}/LICENSE | 0 .../html5lib}/__init__.py | 0 .../html5lib}/constants.py | 0 .../html5lib}/filters/__init__.py | 0 .../html5lib}/filters/_base.py | 0 .../filters/alphabeticalattributes.py | 0 .../html5lib}/filters/inject_meta_charset.py | 0 .../html5lib}/filters/lint.py | 0 .../html5lib}/filters/optionaltags.py | 0 .../html5lib}/filters/sanitizer.py | 0 .../html5lib}/filters/whitespace.py | 0 .../html5lib}/html5parser.py | 0 .../html5lib}/ihatexml.py | 0 .../html5lib}/inputstream.py | 0 .../html5lib}/sanitizer.py | 0 .../html5lib}/serializer/__init__.py | 0 .../html5lib}/serializer/htmlserializer.py | 0 .../html5lib}/tokenizer.py | 0 .../html5lib}/treeadapters/__init__.py | 0 .../html5lib}/treeadapters/sax.py | 0 .../html5lib}/treebuilders/__init__.py | 0 .../html5lib}/treebuilders/_base.py | 0 .../html5lib}/treebuilders/dom.py | 0 .../html5lib}/treebuilders/etree.py | 0 .../html5lib}/treebuilders/etree_lxml.py | 0 .../html5lib}/treewalkers/__init__.py | 0 .../html5lib}/treewalkers/_base.py | 0 .../html5lib}/treewalkers/dom.py | 0 .../html5lib}/treewalkers/etree.py | 0 .../html5lib}/treewalkers/genshistream.py | 0 .../html5lib}/treewalkers/lxmletree.py | 0 .../html5lib}/treewalkers/pulldom.py | 0 .../html5lib}/trie/__init__.py | 0 .../html5lib}/trie/_base.py | 0 .../html5lib}/trie/datrie.py | 0 .../html5lib}/trie/py.py | 0 .../html5lib}/utils.py | 0 six.py => included_dependencies/six.py | 0 index-ajax.html | 109 - js/fdownloader.js | 116 - js/jquery-1.3.2.js | 4376 ----------------- makeplugin.py | 40 +- static/ajax-loader.gif | Bin 10819 -> 0 bytes allrecent.html => webservice/allrecent.html | 0 app.yaml => webservice/app.yaml | 4 +- cron.yaml => webservice/cron.yaml | 0 {css => webservice/css}/index.css | 0 editconfig.html => webservice/editconfig.html | 178 +- ffstorage.py => webservice/ffstorage.py | 0 index.html => webservice/index.html | 0 index.yaml => webservice/index.yaml | 56 +- login.html => webservice/login.html | 236 +- main.py => webservice/main.py | 0 queue.yaml => webservice/queue.yaml | 0 recent.html => webservice/recent.html | 0 settings.py => webservice/settings.py | 50 +- {static => webservice/static}/favicon.ico | Bin status.html => webservice/status.html | 188 +- {utils => webservice/utils}/__init__.py | 2 +- {utils => webservice/utils}/remover.py | 0 {utils => webservice/utils}/tally.py | 128 +- 267 files changed, 2891 insertions(+), 7510 deletions(-) create mode 100644 calibre-plugin/images/icon2.xcf create mode 100644 calibre-plugin/images/old icon.png rename plugin-defaults.ini => calibre-plugin/plugin-defaults.ini (97%) rename plugin-example.ini => calibre-plugin/plugin-example.ini (96%) rename calibre-plugin/{plugin-import-name-fanfictiondownloader_plugin.txt => plugin-import-name-fanficfare_plugin.txt} (100%) rename defaults.ini => cli/defaults.ini (100%) rename downloader.py => cli/downloader.py (88%) rename example.ini => cli/example.ini (100%) delete mode 100644 delete_fic.py delete mode 100644 epubmerge.py rename {fanficdownloader => fff_internals}/BeautifulSoup.py (100%) rename {fanficdownloader => fff_internals}/HtmlTagStack.py (100%) rename {fanficdownloader => fff_internals}/__init__.py (82%) rename {fanficdownloader => fff_internals}/adapters/__init__.py (96%) rename {fanficdownloader => fff_internals}/adapters/adapter_adastrafanficcom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_archiveofourownorg.py (98%) rename {fanficdownloader => fff_internals}/adapters/adapter_archiveskyehawkecom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_ashwindersycophanthexcom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_asr3slashzoneorg.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_bdsmgeschichten.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_bloodshedversecom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_bloodtiesfancom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_buffynfaithnet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_chaossycophanthexcom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_checkmatedcom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_csiforensicscom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_darksolaceorg.py (97%) rename {fanficdownloader => fff_internals}/adapters/adapter_destinysgatewaycom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_devianthearts.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_dokugacom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_dotmoonnet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_dracoandginnycom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_dramioneorg.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_efictionestelielde.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_efpfanficnet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_erosnsapphosycophanthexcom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_fanficcastletvnet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_fanfichu.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_fanfictioncsodaidokhu.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_fanfictionjunkiesde.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_fanfictionnet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_fanfiktionde.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_fannation.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_fhsarchivecom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_ficbooknet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_fictionalleyorg.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_fictionmaniatv.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_fictionpadcom.py (97%) rename {fanficdownloader => fff_internals}/adapters/adapter_fictionpresscom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_ficwadcom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_fimfictionnet.py (96%) rename {fanficdownloader => fff_internals}/adapters/adapter_finestoriescom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_grangerenchantedcom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_harrypotterfanfictioncom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_hennethannunnet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_hlfictionnet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_hpfandomnet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_hpfanficarchivecom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_iketernalnet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_imagineeficcom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_indeathnet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_ksarchivecom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_libraryofmoriacom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_literotica.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_lotrfanfictioncom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_lumossycophanthexcom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_mediaminerorg.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_merlinficdtwinscouk.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_midnightwhispersca.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_mugglenetcom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_nationallibrarynet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_ncisficcom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_ncisfictionnet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_netraptororg.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_nfacommunitycom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_nhamagicalworldsus.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_nickandgregnet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_nocturnallightnet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_occlumencysycophanthexcom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_onedirectionfanfictioncom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_phoenixsongnet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_pommedesangcom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_ponyfictionarchivenet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_portkeyorg.py (97%) rename {fanficdownloader => fff_internals}/adapters/adapter_potionsandsnitches.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_potterficscom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_potterheadsanonymouscom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_pretendercentrecom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_psychficcom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_qafficcom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_restrictedsectionorg.py (96%) rename {fanficdownloader => fff_internals}/adapters/adapter_samandjacknet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_samdeanarchivenu.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_scarheadnet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_scarvesandcoffeenet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_sg1heliopoliscom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_sheppardweircom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_simplyundeniablecom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_sinfuldesireorg.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_siyecouk.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_spikeluvercom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_squidgeorgpeja.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_stargateatlantisorg.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_storiesofardacom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_storiesonlinenet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_tenhawkpresentscom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_test1.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_thealphagatecom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_thehexfilesnet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_thehookupzonenet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_themaplebookshelf.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_themasquenet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_thepetulantpoetesscom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_thequidditchpitchorg.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_tokrafandomnetcom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_tolkienfanfiction.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_trekiverseorg.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_tthfanficorg.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_twcslibrarynet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_twilightarchivescom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_twilightednet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_twiwritenet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_voracity2eficcom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_walkingtheplankorg.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_whoficcom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_wizardtalesnet.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_wolverineandroguecom.py (100%) rename {fanficdownloader => fff_internals}/adapters/adapter_wraithbaitcom.py (100%) rename {fanficdownloader => fff_internals}/adapters/base_adapter.py (100%) rename {fanficdownloader => fff_internals}/adapters/base_efiction_adapter.py (100%) rename {fanficdownloader => fff_internals}/configurable.py (100%) rename {fanficdownloader => fff_internals}/epubutils.py (100%) rename {fanficdownloader => fff_internals}/exceptions.py (100%) rename {fanficdownloader => fff_internals}/geturls.py (100%) rename {fanficdownloader => fff_internals}/gziphttp.py (100%) rename {fanficdownloader => fff_internals}/html.py (100%) rename {fanficdownloader => fff_internals}/html2text.py (100%) rename {fanficdownloader => fff_internals}/htmlcleanup.py (100%) rename {fanficdownloader => fff_internals}/htmlheuristics.py (100%) rename {fanficdownloader => fff_internals}/mobi.py (100%) rename {fanficdownloader => fff_internals}/story.py (100%) rename {fanficdownloader => fff_internals}/translit.py (100%) rename {fanficdownloader => fff_internals}/writers/__init__.py (100%) rename {fanficdownloader => fff_internals}/writers/base_writer.py (100%) rename {fanficdownloader => fff_internals}/writers/writer_epub.py (96%) rename {fanficdownloader => fff_internals}/writers/writer_html.py (100%) rename {fanficdownloader => fff_internals}/writers/writer_mobi.py (100%) rename {fanficdownloader => fff_internals}/writers/writer_txt.py (100%) rename {bs4 => included_dependencies/bs4}/COPYING.txt (100%) rename {bs4 => included_dependencies/bs4}/__init__.py (100%) rename {bs4 => included_dependencies/bs4}/builder/__init__.py (100%) rename {bs4 => included_dependencies/bs4}/builder/_html5lib.py (100%) rename {bs4 => included_dependencies/bs4}/builder/_htmlparser.py (100%) rename {bs4 => included_dependencies/bs4}/builder/_lxml.py (100%) rename {bs4 => included_dependencies/bs4}/dammit.py (100%) rename {bs4 => included_dependencies/bs4}/diagnose.py (100%) rename {bs4 => included_dependencies/bs4}/element.py (100%) rename {chardet => included_dependencies/chardet}/__init__.py (100%) rename {chardet => included_dependencies/chardet}/big5freq.py (100%) rename {chardet => included_dependencies/chardet}/big5prober.py (100%) rename {chardet => included_dependencies/chardet}/chardetect.py (100%) rename {chardet => included_dependencies/chardet}/chardistribution.py (100%) rename {chardet => included_dependencies/chardet}/charsetgroupprober.py (100%) rename {chardet => included_dependencies/chardet}/charsetprober.py (100%) rename {chardet => included_dependencies/chardet}/codingstatemachine.py (100%) rename {chardet => included_dependencies/chardet}/compat.py (100%) rename {chardet => included_dependencies/chardet}/constants.py (100%) rename {chardet => included_dependencies/chardet}/cp949prober.py (100%) rename {chardet => included_dependencies/chardet}/escprober.py (100%) rename {chardet => included_dependencies/chardet}/escsm.py (100%) rename {chardet => included_dependencies/chardet}/eucjpprober.py (100%) rename {chardet => included_dependencies/chardet}/euckrfreq.py (100%) rename {chardet => included_dependencies/chardet}/euckrprober.py (100%) rename {chardet => included_dependencies/chardet}/euctwfreq.py (100%) rename {chardet => included_dependencies/chardet}/euctwprober.py (100%) rename {chardet => included_dependencies/chardet}/gb2312freq.py (100%) rename {chardet => included_dependencies/chardet}/gb2312prober.py (100%) rename {chardet => included_dependencies/chardet}/hebrewprober.py (100%) rename {chardet => included_dependencies/chardet}/jisfreq.py (100%) rename {chardet => included_dependencies/chardet}/jpcntx.py (100%) rename {chardet => included_dependencies/chardet}/langbulgarianmodel.py (100%) rename {chardet => included_dependencies/chardet}/langcyrillicmodel.py (100%) rename {chardet => included_dependencies/chardet}/langgreekmodel.py (100%) rename {chardet => included_dependencies/chardet}/langhebrewmodel.py (100%) rename {chardet => included_dependencies/chardet}/langhungarianmodel.py (100%) rename {chardet => included_dependencies/chardet}/langthaimodel.py (100%) rename {chardet => included_dependencies/chardet}/latin1prober.py (100%) rename {chardet => included_dependencies/chardet}/mbcharsetprober.py (100%) rename {chardet => included_dependencies/chardet}/mbcsgroupprober.py (100%) rename {chardet => included_dependencies/chardet}/mbcssm.py (100%) rename {chardet => included_dependencies/chardet}/sbcharsetprober.py (100%) rename {chardet => included_dependencies/chardet}/sbcsgroupprober.py (100%) rename {chardet => included_dependencies/chardet}/sjisprober.py (100%) rename {chardet => included_dependencies/chardet}/universaldetector.py (100%) rename {chardet => included_dependencies/chardet}/utf8prober.py (100%) rename {html5lib => included_dependencies/html5lib}/LICENSE (100%) rename {html5lib => included_dependencies/html5lib}/__init__.py (100%) rename {html5lib => included_dependencies/html5lib}/constants.py (100%) rename {html5lib => included_dependencies/html5lib}/filters/__init__.py (100%) rename {html5lib => included_dependencies/html5lib}/filters/_base.py (100%) rename {html5lib => included_dependencies/html5lib}/filters/alphabeticalattributes.py (100%) rename {html5lib => included_dependencies/html5lib}/filters/inject_meta_charset.py (100%) rename {html5lib => included_dependencies/html5lib}/filters/lint.py (100%) rename {html5lib => included_dependencies/html5lib}/filters/optionaltags.py (100%) rename {html5lib => included_dependencies/html5lib}/filters/sanitizer.py (100%) rename {html5lib => included_dependencies/html5lib}/filters/whitespace.py (100%) rename {html5lib => included_dependencies/html5lib}/html5parser.py (100%) rename {html5lib => included_dependencies/html5lib}/ihatexml.py (100%) rename {html5lib => included_dependencies/html5lib}/inputstream.py (100%) rename {html5lib => included_dependencies/html5lib}/sanitizer.py (100%) rename {html5lib => included_dependencies/html5lib}/serializer/__init__.py (100%) rename {html5lib => included_dependencies/html5lib}/serializer/htmlserializer.py (100%) rename {html5lib => included_dependencies/html5lib}/tokenizer.py (100%) rename {html5lib => included_dependencies/html5lib}/treeadapters/__init__.py (100%) rename {html5lib => included_dependencies/html5lib}/treeadapters/sax.py (100%) rename {html5lib => included_dependencies/html5lib}/treebuilders/__init__.py (100%) rename {html5lib => included_dependencies/html5lib}/treebuilders/_base.py (100%) rename {html5lib => included_dependencies/html5lib}/treebuilders/dom.py (100%) rename {html5lib => included_dependencies/html5lib}/treebuilders/etree.py (100%) rename {html5lib => included_dependencies/html5lib}/treebuilders/etree_lxml.py (100%) rename {html5lib => included_dependencies/html5lib}/treewalkers/__init__.py (100%) rename {html5lib => included_dependencies/html5lib}/treewalkers/_base.py (100%) rename {html5lib => included_dependencies/html5lib}/treewalkers/dom.py (100%) rename {html5lib => included_dependencies/html5lib}/treewalkers/etree.py (100%) rename {html5lib => included_dependencies/html5lib}/treewalkers/genshistream.py (100%) rename {html5lib => included_dependencies/html5lib}/treewalkers/lxmletree.py (100%) rename {html5lib => included_dependencies/html5lib}/treewalkers/pulldom.py (100%) rename {html5lib => included_dependencies/html5lib}/trie/__init__.py (100%) rename {html5lib => included_dependencies/html5lib}/trie/_base.py (100%) rename {html5lib => included_dependencies/html5lib}/trie/datrie.py (100%) rename {html5lib => included_dependencies/html5lib}/trie/py.py (100%) rename {html5lib => included_dependencies/html5lib}/utils.py (100%) rename six.py => included_dependencies/six.py (100%) delete mode 100644 index-ajax.html delete mode 100644 js/fdownloader.js delete mode 100644 js/jquery-1.3.2.js delete mode 100644 static/ajax-loader.gif rename allrecent.html => webservice/allrecent.html (100%) rename app.yaml => webservice/app.yaml (88%) rename cron.yaml => webservice/cron.yaml (100%) rename {css => webservice/css}/index.css (100%) rename editconfig.html => webservice/editconfig.html (97%) rename ffstorage.py => webservice/ffstorage.py (100%) rename index.html => webservice/index.html (100%) rename index.yaml => webservice/index.yaml (96%) rename login.html => webservice/login.html (97%) rename main.py => webservice/main.py (100%) rename queue.yaml => webservice/queue.yaml (100%) rename recent.html => webservice/recent.html (100%) rename settings.py => webservice/settings.py (97%) rename {static => webservice/static}/favicon.ico (100%) rename status.html => webservice/status.html (97%) rename {utils => webservice/utils}/__init__.py (96%) rename {utils => webservice/utils}/remover.py (100%) rename {utils => webservice/utils}/tally.py (97%) diff --git a/.gitignore b/.gitignore index 4ae04fdb..9ed88b9b 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,5 @@ cleanup.sh FanFictionDownLoader.zip *.epub *Thumbs.db +FanFicFare.zip +output diff --git a/calibre-plugin/__init__.py b/calibre-plugin/__init__.py index 7f063e4c..f8308550 100644 --- a/calibre-plugin/__init__.py +++ b/calibre-plugin/__init__.py @@ -12,7 +12,7 @@ if sys.version_info >= (2, 7): import logging logger = logging.getLogger(__name__) loghandler=logging.StreamHandler() - loghandler.setFormatter(logging.Formatter("FFDL:%(levelname)s:%(filename)s(%(lineno)d):%(message)s")) + loghandler.setFormatter(logging.Formatter("FFF:%(levelname)s:%(filename)s(%(lineno)d):%(message)s")) logger.addHandler(loghandler) loghandler.setLevel(logging.DEBUG) logger.setLevel(logging.DEBUG) @@ -28,7 +28,7 @@ from calibre.customize import InterfaceActionBase ## Apparently the name for this class doesn't matter--it was still ## 'demo' for the first few versions. -class FanFictionDownLoaderBase(InterfaceActionBase): +class FanFicFareBase(InterfaceActionBase): ''' This class is a simple wrapper that provides information about the actual plugin class. The actual interface plugin class is called @@ -38,7 +38,7 @@ class FanFictionDownLoaderBase(InterfaceActionBase): The reason for having two classes is that it allows the command line calibre utilities to run without needing to load the GUI libraries. ''' - name = 'FanFictionDownLoader' + name = 'FanFicFare' description = _('UI plugin to download FanFiction stories from various sites.') supported_platforms = ['windows', 'osx', 'linux'] author = 'Jim Miller' @@ -48,7 +48,7 @@ class FanFictionDownLoaderBase(InterfaceActionBase): #: This field defines the GUI plugin class that contains all the code #: that actually does something. Its format is module_path:class_name #: The specified class must be defined in the specified module. - actual_plugin = 'calibre_plugins.fanfictiondownloader_plugin.ffdl_plugin:FanFictionDownLoaderPlugin' + actual_plugin = 'calibre_plugins.fanficfare_plugin.ffdl_plugin:FanFicFarePlugin' def is_customizable(self): ''' @@ -79,7 +79,7 @@ class FanFictionDownLoaderBase(InterfaceActionBase): # top of the module as importing the config class will also cause the # GUI libraries to be loaded, which we do not want when using calibre # from the command line - from calibre_plugins.fanfictiondownloader_plugin.config import ConfigWidget + from calibre_plugins.fanficfare_plugin.config import ConfigWidget return ConfigWidget(self.actual_plugin_) def save_settings(self, config_widget): @@ -107,8 +107,8 @@ class FanFictionDownLoaderBase(InterfaceActionBase): # CLI--it would load everytime anyway. from StringIO import StringIO from calibre.library import db - from calibre_plugins.fanfictiondownloader_plugin.downloader import main as ffdl_main - from calibre_plugins.fanfictiondownloader_plugin.prefs import PrefsFacade + from calibre_plugins.fanficfare_plugin.downloader import main as ffdl_main + from calibre_plugins.fanficfare_plugin.prefs import PrefsFacade from calibre.utils.config import prefs as calibre_prefs from optparse import OptionParser diff --git a/calibre-plugin/common_utils.py b/calibre-plugin/common_utils.py index 73ac823c..2210bdb7 100644 --- a/calibre-plugin/common_utils.py +++ b/calibre-plugin/common_utils.py @@ -118,7 +118,7 @@ def create_menu_item(ia, parent_menu, menu_text, image=None, tooltip=None, if len(shortcut) == 0: shortcut = () else: - shortcut = _(shortcut) + shortcut = shortcut ac = ia.create_action(spec=(menu_text, None, tooltip, shortcut), attr=menu_text) if image: @@ -155,7 +155,7 @@ def create_menu_action_unique(ia, parent_menu, menu_text, image=None, tooltip=No if len(shortcut) == 0: shortcut = None else: - shortcut = _(shortcut) + shortcut = shortcut if shortcut_name is None: shortcut_name = menu_text.replace('&','') @@ -393,9 +393,9 @@ class KeyboardConfigDialog(SizePersistedDialog): This dialog is used to allow editing of keyboard shortcuts. ''' def __init__(self, gui, group_name): - SizePersistedDialog.__init__(self, gui, 'Keyboard shortcut dialog') + SizePersistedDialog.__init__(self, gui, 'FanFicFare plugin:Keyboard shortcut dialog') self.gui = gui - self.setWindowTitle('Keyboard shortcuts') + self.setWindowTitle(_('Keyboard shortcuts')) layout = QVBoxLayout(self) self.setLayout(layout) @@ -461,8 +461,8 @@ class DateDelegate(QStyledItemDelegate): class PrefsViewerDialog(SizePersistedDialog): def __init__(self, gui, namespace): - SizePersistedDialog.__init__(self, gui, 'Prefs Viewer dialog') - self.setWindowTitle('Preferences for: '+namespace) + SizePersistedDialog.__init__(self, gui, _('Prefs Viewer dialog')) + self.setWindowTitle(_('Preferences for: ')+namespace) self.gui = gui self.db = gui.current_db @@ -494,9 +494,9 @@ class PrefsViewerDialog(SizePersistedDialog): button_box = QDialogButtonBox(QDialogButtonBox.Ok) button_box.accepted.connect(self.accept) - self.clear_button = button_box.addButton('Clear', QDialogButtonBox.ResetRole) + self.clear_button = button_box.addButton(_('Clear'), QDialogButtonBox.ResetRole) self.clear_button.setIcon(get_icon('trash.png')) - self.clear_button.setToolTip('Clear all settings for this plugin') + self.clear_button.setToolTip(_('Clear all settings for this plugin')) self.clear_button.clicked.connect(self._clear_settings) layout.addWidget(button_box) @@ -523,10 +523,9 @@ class PrefsViewerDialog(SizePersistedDialog): def _clear_settings(self): from calibre.gui2.dialogs.confirm_delete import confirm - message = '

Are you sure you want to clear your settings in this library for this plugin?

' \ - '

Any settings in other libraries or stored in a JSON file in your calibre plugins ' \ - 'folder will not be touched.

' \ - '

You must restart calibre afterwards.

' + message = '

' + _('Are you sure you want to clear your settings in this library for this plugin?') + '

' \ + + '

' + _('Any settings in other libraries or stored in a JSON file in your calibre plugins folder will not be touched.') + '

' \ + + '

' + _('You must restart calibre afterwards.') + '

' if not confirm(message, self.namespace+'_clear_settings', self): return ns_prefix = self._get_ns_prefix() @@ -535,8 +534,8 @@ class PrefsViewerDialog(SizePersistedDialog): del self.db.prefs[k] self._populate_settings() d = info_dialog(self, 'Settings deleted', - '

All settings for this plugin in this library have been cleared.

' - '

Please restart calibre now.

', + '

' + _('All settings for this plugin in this library have been cleared.') + '

' \ + + '

' + _('Please restart calibre now.') + '

', show_copy_button=False) b = d.bb.addButton(_('Restart calibre now'), d.bb.AcceptRole) b.setIcon(QIcon(I('lt.png'))) diff --git a/calibre-plugin/config.py b/calibre-plugin/config.py index 3ee1579d..e3face41 100644 --- a/calibre-plugin/config.py +++ b/calibre-plugin/config.py @@ -70,18 +70,18 @@ no_trans = { 'pini':'personal.ini', 'p':'password', } -from calibre_plugins.fanfictiondownloader_plugin.prefs import prefs, PREFS_NAMESPACE -from calibre_plugins.fanfictiondownloader_plugin.dialogs \ +from calibre_plugins.fanficfare_plugin.prefs import prefs, PREFS_NAMESPACE +from calibre_plugins.fanficfare_plugin.dialogs \ import (UPDATE, UPDATEALWAYS, collision_order, save_collisions, RejectListDialog, EditTextDialog, IniTextDialog, RejectUrlEntry) -from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader.adapters \ +from calibre_plugins.fanficfare_plugin.fff_internals.adapters \ import getConfigSections -from calibre_plugins.fanfictiondownloader_plugin.common_utils \ +from calibre_plugins.fanficfare_plugin.common_utils \ import ( KeyboardConfigDialog, PrefsViewerDialog ) -from calibre_plugins.fanfictiondownloader_plugin.ffdl_util \ +from calibre_plugins.fanficfare_plugin.ffdl_util \ import (test_config) from calibre.gui2.complete2 import EditWithComplete #MultiCompleteLineEdit @@ -358,7 +358,7 @@ class BasicTab(QWidget): self.l = QVBoxLayout() groupbox.setLayout(self.l) - tooltip = _("On each download, FFDL offers an option to select the output format.
This sets what that option will default to.") + tooltip = _("On each download, FFF offers an option to select the output format.
This sets what that option will default to.") horz = QHBoxLayout() label = QLabel(_('Default Output &Format:')) label.setToolTip(tooltip) @@ -375,7 +375,7 @@ class BasicTab(QWidget): horz.addWidget(self.fileform) self.l.addLayout(horz) - tooltip = _("On each download, FFDL offers an option of what happens if that story already exists.
This sets what that option will default to.") + tooltip = _("On each download, FFF offers an option of what happens if that story already exists.
This sets what that option will default to.") horz = QHBoxLayout() label = QLabel(_('Default If Story Already Exists?')) label.setToolTip(tooltip) @@ -392,12 +392,12 @@ class BasicTab(QWidget): self.l.addLayout(horz) self.updatemeta = QCheckBox(_('Default Update Calibre &Metadata?'),self) - self.updatemeta.setToolTip(_("On each download, FFDL offers an option to update Calibre's metadata (title, author, URL, tags, custom columns, etc) from the web site.
This sets whether that will default to on or off.
Columns set to 'New Only' in the column tabs will only be set for new books.")) + self.updatemeta.setToolTip(_("On each download, FFF offers an option to update Calibre's metadata (title, author, URL, tags, custom columns, etc) from the web site.
This sets whether that will default to on or off.
Columns set to 'New Only' in the column tabs will only be set for new books.")) self.updatemeta.setChecked(prefs['updatemeta']) self.l.addWidget(self.updatemeta) self.updateepubcover = QCheckBox(_('Default Update EPUB Cover when Updating EPUB?'),self) - self.updateepubcover.setToolTip(_("On each download, FFDL offers an option to update the book cover image inside the EPUB from the web site when the EPUB is updated.
This sets whether that will default to on or off.")) + self.updateepubcover.setToolTip(_("On each download, FFF offers an option to update the book cover image inside the EPUB from the web site when the EPUB is updated.
This sets whether that will default to on or off.")) self.updateepubcover.setChecked(prefs['updateepubcover']) self.l.addWidget(self.updateepubcover) @@ -501,7 +501,7 @@ class BasicTab(QWidget): self.l.addWidget(self.includeimages) self.injectseries = QCheckBox(_("Inject calibre Series when none found?"),self) - self.injectseries.setToolTip(_("If no series is found, inject the calibre series (if there is one) so it appears on the FFDL title page(not cover).")) + self.injectseries.setToolTip(_("If no series is found, inject the calibre series (if there is one) so it appears on the FFF title page(not cover).")) self.injectseries.setChecked(prefs['injectseries']) self.l.addWidget(self.injectseries) @@ -510,7 +510,7 @@ class BasicTab(QWidget): groupbox.setLayout(self.l) self.rejectlist = QPushButton(_('Edit Reject URL List'), self) - self.rejectlist.setToolTip(_("Edit list of URLs FFDL will automatically Reject.")) + self.rejectlist.setToolTip(_("Edit list of URLs FFF will automatically Reject.")) self.rejectlist.clicked.connect(self.show_rejectlist) self.l.addWidget(self.rejectlist) @@ -610,7 +610,7 @@ class PersonalIniTab(QWidget): self.l.addWidget(label) # self.l.addSpacing(5) - label = QLabel(_("New:")+" "+_("FFDL now includes find, color coding, and error checking for personal.ini editing. Red generally indicates errors.")) + label = QLabel(_("New:")+" "+_("FFF now includes find, color coding, and error checking for personal.ini editing. Red generally indicates errors.")) label.setWordWrap(True) self.l.addWidget(label) @@ -639,7 +639,7 @@ class PersonalIniTab(QWidget): self.defaults.clicked.connect(self.show_defaults) self.l.addWidget(self.defaults) - label = QLabel(_("Changes will only be saved if you click 'OK' to leave Customize FFDL.")) + label = QLabel(_("Changes will only be saved if you click 'OK' to leave Customize FFF.")) label.setWordWrap(True) self.l.addWidget(label) @@ -744,7 +744,7 @@ class GenerateCoverTab(QWidget): except KeyError: gc_settings= [] - label = QLabel(_('The %(gc)s plugin can create cover images for books using various metadata and configurations. If you have GC installed, FFDL can run GC on new downloads and metadata updates. Pick a GC setting by site or Default.')%no_trans) + label = QLabel(_('The %(gc)s plugin can create cover images for books using various metadata and configurations. If you have GC installed, FFF can run GC on new downloads and metadata updates. Pick a GC setting by site or Default.')%no_trans) label.setWordWrap(True) self.l.addWidget(label) self.l.addSpacing(5) @@ -839,12 +839,12 @@ class CountPagesTab(QWidget): horz = QHBoxLayout() self.wordcount = QCheckBox('Word Count',self) - self.wordcount.setToolTip(tooltip+"\n"+_('Will overwrite word count from FFDL metadata if set to update the same custom column.')) + self.wordcount.setToolTip(tooltip+"\n"+_('Will overwrite word count from FFF metadata if set to update the same custom column.')) self.wordcount.setChecked('WordCount' in prefs['countpagesstats']) horz.addWidget(self.wordcount) - self.wordcountmissing = QCheckBox('Only if Word Count is Missing in FFDL Metadata',self) - self.wordcountmissing.setToolTip(_("Only run Count Page's Word Count if checked and FFDL metadata doesn't already have a word count. If this is used with one of the other Page Counts, the Page Count plugin will be called twice.")) + self.wordcountmissing = QCheckBox('Only if Word Count is Missing in FFF Metadata',self) + self.wordcountmissing.setToolTip(_("Only run Count Page's Word Count if checked and FFF metadata doesn't already have a word count. If this is used with one of the other Page Counts, the Page Count plugin will be called twice.")) self.wordcountmissing.setChecked(prefs['wordcountmissing']) self.wordcountmissing.setEnabled(self.wordcount.isChecked()) horz.addWidget(self.wordcountmissing) @@ -984,7 +984,7 @@ titleLabels = { 'formatname':_('File Format'), 'formatext':_('File Extension'), 'siteabbrev':_('Site Abbrev'), - 'version':_('FFDL Version') + 'version':_('FFF Version') } class CustomColumnsTab(QWidget): @@ -1102,7 +1102,7 @@ class StandardColumnsTab(QWidget): self.l = QVBoxLayout() self.setLayout(self.l) - label = QLabel(_("The standard calibre metadata columns are listed below. You may choose whether FFDL will fill each column automatically on updates or only for new books.")) + label = QLabel(_("The standard calibre metadata columns are listed below. You may choose whether FFF will fill each column automatically on updates or only for new books.")) label.setWordWrap(True) self.l.addWidget(label) self.l.addSpacing(5) @@ -1137,7 +1137,7 @@ class ImapTab(QWidget): self.setLayout(self.l) row=0 - label = QLabel(_('These settings will allow FFDL to fetch story URLs from your email account. It will only look for story URLs in unread emails in the folder specified below.')) + label = QLabel(_('These settings will allow FFF to fetch story URLs from your email account. It will only look for story URLs in unread emails in the folder specified below.')) label.setWordWrap(True) self.l.addWidget(label,row,0,1,-1) row+=1 @@ -1163,7 +1163,7 @@ class ImapTab(QWidget): row+=1 label = QLabel(_('IMAP User Password')) - tooltip = _("IMAP password. If left empty, FFDL will ask you for your password when you use the feature.") + tooltip = _("IMAP password. If left empty, FFF will ask you for your password when you use the feature.") label.setToolTip(tooltip) self.l.addWidget(label,row,0) self.imappass = QLineEdit(self) @@ -1174,7 +1174,7 @@ class ImapTab(QWidget): row+=1 self.imapsessionpass = QCheckBox(_('Remember Password for Session (when not saved above)'),self) - self.imapsessionpass.setToolTip(_('If checked, and no password is entered above, FFDL will remember your password until you close calibre or change Libraries.')) + self.imapsessionpass.setToolTip(_('If checked, and no password is entered above, FFF will remember your password until you close calibre or change Libraries.')) self.imapsessionpass.setChecked(prefs['imapsessionpass']) self.l.addWidget(self.imapsessionpass,row,0,1,-1) row+=1 @@ -1196,7 +1196,7 @@ class ImapTab(QWidget): row+=1 label = QLabel(_("It's safest if you create a separate email account that you use only " - "for your story update notices. FFDL and calibre cannot guarantee that " + "for your story update notices. FFF and calibre cannot guarantee that " "malicious code cannot get your email password once you've entered it. " "
Use this feature at your own risk.
")) label.setWordWrap(True) diff --git a/calibre-plugin/dialogs.py b/calibre-plugin/dialogs.py index 639b0b34..43d5ee98 100644 --- a/calibre-plugin/dialogs.py +++ b/calibre-plugin/dialogs.py @@ -60,14 +60,14 @@ try: except NameError: pass # load_translations() added in calibre 1.9 -from calibre_plugins.fanfictiondownloader_plugin.common_utils \ +from calibre_plugins.fanficfare_plugin.common_utils \ import (ReadOnlyTableWidgetItem, ReadOnlyTextIconWidgetItem, SizePersistedDialog, ImageTitleLayout, get_icon) -from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader.geturls import get_urls_from_html, get_urls_from_text -from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader.adapters import getNormalStoryURL +from calibre_plugins.fanficfare_plugin.fff_internals.geturls import get_urls_from_html, get_urls_from_text +from calibre_plugins.fanficfare_plugin.fff_internals.adapters import getNormalStoryURL -from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader.configurable \ +from calibre_plugins.fanficfare_plugin.fff_internals.configurable \ import (get_valid_sections, get_valid_entries, get_valid_keywords, get_valid_entry_keywords) @@ -243,7 +243,7 @@ class AddNewDialog(SizePersistedDialog): self.l = QVBoxLayout() self.setLayout(self.l) - self.setWindowTitle(_('FanFictionDownLoader')) + self.setWindowTitle('FanFicFare') self.setWindowIcon(icon) self.toplabel=QLabel("Toplabel") @@ -588,7 +588,7 @@ class LoopProgressDialog(QProgressDialog): self.start_time = datetime.now() # can't import at file load. - from calibre_plugins.fanfictiondownloader_plugin.prefs import prefs + from calibre_plugins.fanficfare_plugin.prefs import prefs self.show_est_time = prefs['show_est_time'] ## self.do_loop does QTimer.singleShot on self.do_loop also. @@ -686,7 +686,7 @@ class AboutDialog(QDialog): self.label = QLabel(text) self.label.setOpenExternalLinks(True) self.label.setWordWrap(True) - self.setWindowTitle(_('About FanFictionDownLoader')) + self.setWindowTitle(_('About FanFicFare')) self.setWindowIcon(icon) self.l.addWidget(self.logo, 0, 0) self.l.addWidget(self.label, 0, 1) @@ -1026,7 +1026,7 @@ class RejectListDialog(SizePersistedDialog): layout = QVBoxLayout(self) self.setLayout(layout) title_layout = ImageTitleLayout(self, icon, header, - ''+_('FFDL will remember these URLs and display the note and offer to reject them if you try to download them again later.')) + ''+_('FFF will remember these URLs and display the note and offer to reject them if you try to download them again later.')) layout.addLayout(title_layout) rejects_layout = QHBoxLayout() layout.addLayout(rejects_layout) diff --git a/calibre-plugin/ffdl_plugin.py b/calibre-plugin/ffdl_plugin.py index 48c60225..4b46c990 100644 --- a/calibre-plugin/ffdl_plugin.py +++ b/calibre-plugin/ffdl_plugin.py @@ -48,17 +48,17 @@ try: except NameError: pass # load_translations() added in calibre 1.9 -from calibre_plugins.fanfictiondownloader_plugin.common_utils import (set_plugin_icon_resources, get_icon, - create_menu_action_unique, get_library_uuid) +from calibre_plugins.fanficfare_plugin.common_utils import (set_plugin_icon_resources, get_icon, + create_menu_action_unique, get_library_uuid) -from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader import adapters, exceptions -from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader.epubutils import get_dcsource, get_dcsource_chaptercount, get_story_url_from_html -from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader.geturls import get_urls_from_page, get_urls_from_html, get_urls_from_text, get_urls_from_imap +from calibre_plugins.fanficfare_plugin.fff_internals import adapters, exceptions +from calibre_plugins.fanficfare_plugin.fff_internals.epubutils import get_dcsource, get_dcsource_chaptercount, get_story_url_from_html +from calibre_plugins.fanficfare_plugin.fff_internals.geturls import get_urls_from_page, get_urls_from_html, get_urls_from_text, get_urls_from_imap -from calibre_plugins.fanfictiondownloader_plugin.ffdl_util import (get_ffdl_adapter, get_ffdl_config, get_ffdl_personalini) -from calibre_plugins.fanfictiondownloader_plugin.config import (permitted_values, rejecturllist) -from calibre_plugins.fanfictiondownloader_plugin.prefs import prefs -from calibre_plugins.fanfictiondownloader_plugin.dialogs import ( +from calibre_plugins.fanficfare_plugin.ffdl_util import (get_ffdl_adapter, get_ffdl_config, get_ffdl_personalini) +from calibre_plugins.fanficfare_plugin.config import (permitted_values, rejecturllist) +from calibre_plugins.fanficfare_plugin.prefs import prefs +from calibre_plugins.fanficfare_plugin.dialogs import ( AddNewDialog, UpdateExistingDialog, LoopProgressDialog, UserPassDialog, AboutDialog, CollectURLDialog, RejectListDialog, EmailPassDialog, OVERWRITE, OVERWRITEALWAYS, UPDATE, UPDATEALWAYS, ADDNEW, SKIP, CALIBREONLY, @@ -76,9 +76,9 @@ formmapping = { PLUGIN_ICONS = ['images/icon.png'] -class FanFictionDownLoaderPlugin(InterfaceAction): +class FanFicFarePlugin(InterfaceAction): - name = 'FanFictionDownLoader' + name = 'FanFicFare' # Declare the main action associated with this plugin # The keyboard shortcut can be None if you dont want to use a keyboard @@ -86,7 +86,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction): # keyboard shortcuts, so try to use an unusual/unused shortcut. # (text, icon_path, tooltip, keyboard shortcut) # icon_path isn't in the zip--icon loaded below. - action_spec = (_('FanFictionDownLoader'), None, + action_spec = (_('FanFicFare'), None, _('Download FanFiction stories from various web sites'), ()) # None for keyboard shortcut doesn't allow shortcut. () does, there just isn't one yet @@ -117,7 +117,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction): # are not found in the zip file will result in null QIcons. icon = get_icon('images/icon.png') - self.qaction.setText(_('FanFictionDL')) + self.qaction.setText(_('FanFicFare')) # The qaction is automatically created from the action_spec defined # above @@ -237,7 +237,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction): def rebuild_menus(self): with self.menus_lock: - #self.qaction.setText("FFDL") + #self.qaction.setText("FFF") do_user_config = self.interface_action_base_plugin.do_user_config self.menu.clear() @@ -332,17 +332,18 @@ class FanFictionDownLoaderPlugin(InterfaceAction): self.menu.addSeparator() self.config_action = self.create_menu_item_ex(self.menu, _('&Configure Plugin'), image= 'config.png', - unique_name='Configure FanFictionDownLoader', - shortcut_name=_('Configure FanFictionDownLoader'), + unique_name='Configure FanFicFare', + shortcut_name=_('Configure FanFicFare'), triggered=partial(do_user_config,parent=self.gui)) self.about_action = self.create_menu_item_ex(self.menu, _('About Plugin'), image= 'images/icon.png', - unique_name='About FanFictionDownLoader', - shortcut_name=_('About FanFictionDownLoader'), + unique_name='About FanFicFare', + shortcut_name=_('About FanFicFare'), triggered=self.about) self.gui.keyboard.finalize() + def about(self): # Get the about text from a file inside the plugin zip file @@ -399,7 +400,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction): def get_urls_from_imap_menu(self): if not prefs['imapserver'] or not prefs['imapuser'] or not prefs['imapfolder']: - s=_('FFDL Email Settings are not configured.') + s=_('FFF Email Settings are not configured.') info_dialog(self.gui, s, s, show=True, show_copy_button=False) return @@ -569,7 +570,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction): self.gui.iactions['Remove Books'].do_library_delete(d.get_reject_list_ids()) else: - message="

"+_("Rejecting FFDL URLs: None of the books selected have FanFiction URLs.")+"

"+_("Proceed to Remove?")+"

" + message="

"+_("Rejecting FFF URLs: None of the books selected have FanFiction URLs.")+"

"+_("Proceed to Remove?")+"

" if confirm(message,'fanfictiondownloader_reject_non_fanfiction', self.gui): self.gui.iactions['Remove Books'].delete_books() @@ -627,7 +628,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction): if not filenames or len(filenames) != len (url_list): info_dialog(self.gui, _("Cannot Update Anthology"), - "

"+_("Cannot Update Anthology")+"

"+_("Book isn't an FFDL Anthology or contains book(s) without valid FFDL URLs."), + "

"+_("Cannot Update Anthology")+"

"+_("Book isn't an FFF Anthology or contains book(s) without valid FFF URLs."), show=True, show_copy_button=False) remove_dir(tdir) @@ -1100,7 +1101,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction): elif chaptercount > urlchaptercount: raise NotGoingToDownload(_("Existing epub contains %d chapters, web site only has %d. Use Overwrite to force update.") % (chaptercount,urlchaptercount),'dialog_error.png') elif chaptercount == 0: - raise NotGoingToDownload(_("FFDL doesn't recognize chapters in existing epub, epub is probably from a different source. Use Overwrite to force update."),'dialog_error.png') + raise NotGoingToDownload(_("FFF doesn't recognize chapters in existing epub, epub is probably from a different source. Use Overwrite to force update."),'dialog_error.png') if collision == OVERWRITE and \ db.has_format(book_id,formmapping[fileform],index_is_id=True): @@ -1209,7 +1210,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction): payload = ([], book_list, options) self.gui.proceed_question(self.update_error_column, payload, htmllog, - _('FFDL log'), _('FFDL download ended'), msg, + _('FFF log'), _('FFF download ended'), msg, show_copy_button=False) return @@ -1227,7 +1228,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction): func = 'arbitrary_n' cpus = self.gui.job_manager.server.pool_size - args = ['calibre_plugins.fanfictiondownloader_plugin.jobs', 'do_download_worker', + args = ['calibre_plugins.fanficfare_plugin.jobs', 'do_download_worker', (book_list, options, cpus)] desc = _('Download FanFiction Book') job = self.gui.job_manager.run_job( @@ -1270,7 +1271,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction): logger.error("Error Updating Metadata:\n%s"%det_msg) error_dialog(self.gui, _("Error Updating Metadata"), - "

"+_("An error has occurred while FFDL was updating calibre's metadata for %s.")%(book['url'],book['title'])+"

"+ + "

"+_("An error has occurred while FFF was updating calibre's metadata for %s.")%(book['url'],book['title'])+"

"+ _("The ebook has been updated, but the metadata has not."), det_msg=det_msg, show=True) @@ -1380,7 +1381,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction): show_copy_button=False) return - msg = '

'+_('FFDL found %s good and %s bad updates.')%(len(good_list),len(bad_list))+'

' + msg = '

'+_('FFF found %s good and %s bad updates.')%(len(good_list),len(bad_list))+'

' if len(bad_list) > 0: msg = msg + '''

%s

@@ -1419,7 +1420,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction):

%s

%s

%s

'''%( - _('FFDL found %s good and %s bad updates.')%(len(good_list),len(bad_list)), + _('FFF found %s good and %s bad updates.')%(len(good_list),len(bad_list)), _('See log for details.'), _('Proceed with updating your library?') ) @@ -1445,7 +1446,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction): self.gui.proceed_question(do_update_func, payload, htmllog, - _('FFDL log'), _('FFDL download complete'), msg, + _('FFF log'), _('FFF download complete'), msg, show_copy_button=False) def do_download_merge_update(self, payload): @@ -1498,7 +1499,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction): good_list = sorted(good_list,key=lambda x : x['listorder']) bad_list = sorted(bad_list,key=lambda x : x['listorder']) - self.gui.status_bar.show_message(_('FFDL Adding/Updating books.')) + self.gui.status_bar.show_message(_('FFF Adding/Updating books.')) if good_list or prefs['mark'] or (bad_list and prefs['errorcol'] != '' and prefs['errorcol'] in self.gui.library_view.model().custom_columns): LoopProgressDialog(self.gui, @@ -1839,7 +1840,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction): rl_plugin = self.gui.iactions['Reading List'] except: if prefs['addtolists'] or prefs['addtoreadlists']: - message="

"+_("You configured FanFictionDownLoader to automatically update Reading Lists, but you don't have the %s plugin installed anymore?")%'Reading List'+"

" + message="

"+_("You configured FanFicFare to automatically update Reading Lists, but you don't have the %s plugin installed anymore?")%'Reading List'+"

" confirm(message,'fanfictiondownloader_no_reading_list_plugin', self.gui) return @@ -1851,7 +1852,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction): lists = self.get_clean_reading_lists(prefs['read_lists']) if len(lists) < 1 : - message="

"+_("You configured FanFictionDownLoader to automatically update \"To Read\" Reading Lists, but you don't have any lists set?")+"

" + message="

"+_("You configured FanFicFare to automatically update \"To Read\" Reading Lists, but you don't have any lists set?")+"

" confirm(message,'fanfictiondownloader_no_read_lists', self.gui) for l in lists: if l in rl_plugin.get_list_names(): @@ -1861,13 +1862,13 @@ class FanFictionDownLoaderPlugin(InterfaceAction): display_warnings=False) else: if l != '': - message="

"+_("You configured FanFictionDownLoader to automatically update Reading List '%s', but you don't have a list of that name?")%l+"

" + message="

"+_("You configured FanFicFare to automatically update Reading List '%s', but you don't have a list of that name?")%l+"

" confirm(message,'fanfictiondownloader_no_reading_list_%s'%l, self.gui) if prefs['addtolists'] and (add or (prefs['addtolistsonread'] and prefs['addtoreadlists']) ): lists = self.get_clean_reading_lists(prefs['send_lists']) if len(lists) < 1 : - message="

"+_("You configured FanFictionDownLoader to automatically update \"Send to Device\" Reading Lists, but you don't have any lists set?")+"

" + message="

"+_("You configured FanFicFare to automatically update \"Send to Device\" Reading Lists, but you don't have any lists set?")+"

" confirm(message,'fanfictiondownloader_no_send_lists', self.gui) for l in lists: @@ -1879,7 +1880,7 @@ class FanFictionDownLoaderPlugin(InterfaceAction): display_warnings=False) else: if l != '': - message="

"+_("You configured FanFictionDownLoader to automatically update Reading List '%s', but you don't have a list of that name?")%l+"

" + message="

"+_("You configured FanFicFare to automatically update Reading List '%s', but you don't have a list of that name?")%l+"

" confirm(message,'fanfictiondownloader_no_reading_list_%s'%l, self.gui) def make_mi_from_book(self,book): diff --git a/calibre-plugin/ffdl_util.py b/calibre-plugin/ffdl_util.py index b36055cb..2fbbac8b 100644 --- a/calibre-plugin/ffdl_util.py +++ b/calibre-plugin/ffdl_util.py @@ -13,9 +13,9 @@ from ConfigParser import ParsingError import logging logger = logging.getLogger(__name__) -from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader import adapters, exceptions -from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader.configurable import Configuration -from calibre_plugins.fanfictiondownloader_plugin.prefs import prefs +from calibre_plugins.fanficfare_plugin.fff_internals import adapters, exceptions +from calibre_plugins.fanficfare_plugin.fff_internals.configurable import Configuration +from calibre_plugins.fanficfare_plugin.prefs import prefs def get_ffdl_personalini(): if prefs['includeimages']: diff --git a/calibre-plugin/images/icon.png b/calibre-plugin/images/icon.png index e9715307dd4fe35c686b222262b796828856ff22..f71d750afa2849e7c04bca173bb0bd7ba8319687 100644 GIT binary patch literal 23025 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 F{{v!1{R992 literal 24649 zcmZ6z1ymeC*DX3Y!QCymy9N#J?(Xgq2oM+`xCM6)5Zr>>;O_2j!QJ5w|F^#P{(Bca zt7m$qx~h-us&jS`uB<49j6i?@0059>q{USM00{Yy7d$NZO0HwD5%>h*rYa>0s2nFc z0)K!tm6H+&ynp=VwihRWuY7Wr)^P(jU-)=Ih|*?wfiJ?j%P2^|twO+{<3fzyO|t<2 zWB?iQuj*dQC+*)8DLp+7p4&SY+3W7=Tg%GsC79}U|KW%dN&`VBto^V-uL5`iAfg=n z71Qyw`%j||m zwf#Du-@>RU8cRoYf1mw(KE=#Rk`p(V6!*JY-)QgjfrvXqn6I2L>~LDZ-4|k%5_P8v z+eHhjG}o?`BZUQ!KMlG$ojm6fVaEZ~D0QKem-^@@u|Ba%fA_B&P}$`HOM-vf3AbiK?!pBm z+rf@GdfVV1*_Eb!3j1-%JgCHMF>9<|-d2{~P2?{5C-;7Kf zuuT7&o<2?&hPsP*>W804hreZ~f}gBCa7^3;&yoL9&8&FOKJqI5FS&}=@^dUMszFIL zG{E#ti{U2~U@>N=O>4a2qvyD8;F%h$_I;$ox>V=D)hk-K9J6lrH$Mx%poqX7z^dKW zHTyMTw$IL>@NgP#cre{RUCrIjcijLg0NT{^UU_71H6VI0xoF+lvbXLl9E|7$Z=TK~#UX64<) zJLjLHrsAuF=-;I9x0m$S8o+x5_sgv7yoH4V>5rbt`#pMn(%L;VeJIDDs-2LVDaoxu zMmqyaK|%=i0xN-_cfjVDD|Un&Ge)>Lr2N#=G;A#F9&H;hf$JZmn82pp{4!~tyONA? zEebv~mcVa!+6#j8pTQ0IEW zdT5UZgk|8CygO&_;2N4E$EXZe0@lb8QsCo2*gR}zR-jG&od%qQJ(_t7Ja?D%sYnO(s zV8!Fmh7^}VXi(`{?-5k>PVbK5lyBhF=eqLDJFI^heRqiGhXqt9KJzNr9D~Qj?m2_Bh z&6f;oXyhi`vLHC;pwXo4a&B{i5+MWu^Z5K$(a_k$_CRS}$>|je0sHl*CE@b{-+cdB zcM%-MJDysI z5n$B%0~RNY^|@A&Q`q0{!T}p&xm*1SWy*DUGo21FyuXdh@ZwP*8pwGgj4``3Z-HYX zG8K_%%D5?*jm|k7cxvs>Rg(gK%NW}FPA2;X7g+9JAj}iB)6qFZF?-Yq$v8y@krD)o zo7WWc06tw36LUb!Sh#zwIg_?3Q91M;MAYJg$c4AGe$vPd-DmwXF>)RLC*F zDbT>lNkJHz+TdVyX?)@hk9Qec)X+kn)Mq3UJ3ZSSz&&2wPxp{Tu6#7*%ZuLRLY^oL zAj}eBW(UF!;8;SAg8*?RKarqE!(8t@NHUAK*PHdNslUjH`gsYmn6NSpDp8x z7uRLN&XAACp)VgclB4m5B!~NTB|DD@FL6(l!6lw|dcZHt$Z0%iq=!$mP(ARxA!Sac zk?hj*Q|WdFR9dhKXuN=u_kM9w!K>vd|2PIcaQKoqeHplRg1h(%@bvIDUC~KlrfWi= z)dm*BXJhN71Vg7ALXP8AtJkq!Ly+0R$=U|$uk}fO2hExFS3?jgf(FAqmIShGFeY6I zoh^@I#bpMCKb-(~E@fj3&dH{0ENo~4s41jHjtC{KfuLSZt6xn!UpyvOfZlwn%q082 zguXPn-1rN4a|FBABZ2{7w$fkV{+;zu*xk)k&3KuPQ^QuGUxZQjXTAhHbEeqis0?GK zFycV1u^u!bP!&3oZ_-Iam3HwZ#R>anYZGSwUf|(NaF zYrcGO6;@Zl!u}wCV2S~*pF!mI2C|SOF(hP)hdm@FcaLucPK(Zpl}`+E@tW?~L%*I>;Ns{m=+N_3vfLpRvtEkNPQZLa$zO7){VE}{4z7$Ti5e)2R&lBj|osNb}foI}IH zr_CB?8KzbYL_!1Rxm`0L@AVsNp^PaIZ8l0v;Q z@8R|;X5CaRf!*Fgbg`rNmkyom7U*}{F8(jDmUSohg9buU=6U*8E}90gkU>KJBr8fJ zebL3)QdKBaaFR=l448PJ@9jLxGz~1Er+43?lTe42Z@d z5s*l!rZx6Q_oeU{$VDb3=IPoBCM@11Twx&MmM)(~>x=8h3$>0ABT*YS9cWQ|lu{pw!u{an3GZ zrpT~p7+o~MFe?G<=n=YR8{r4l&R6gq!an#kJ!n2guU|mqc+{+Tuvo>|DqphLvlWL& zS!McYcFRYSw9^QQx{vz>;DAlLU}YlQ77N#vI8Wq|>K%?kNecK4VEObM;R?wrcEm&r z+&HcO{5K|KnfYD261lJ9z>R0@AaCB$KkFG4REym$8x}dCiEhA|`zt-lm?mvtUDmCS zM1IW~ZQX7IdZ%g9By~@tpD(UnN05#+k1Ogt2zS4W12>OZKF|3KiJL??>M~g8CRk`c zQB(v07M7XA(f6T@*RW#S*@=aF;{_wJ&GclN1FZxv5q%r-jsU5zhAJb*f*a>WJI2qk z7A__~G#or(fhe*Lei}V9eC~D-I~(+5fyol%ureu1E|koq$HbWAsll(*13j!GJKHm4 zkfgzcs;?Imd$aD#_3hDF7+^!DYECON zxA+oqQI`=3xIk~71w%|y>z;4>o0Mz`+KHsg2hW_o;9{1>)RhGJPW$UO zv6X-|VW5LvV>eG!{63=+yEMjB(5_heD)$T|g{Ep;c&f|pq@43zE2_!<$_D5*))%w= zx{lQzEe^6Lw^1PW2dWV8;C=(isfXH2i~?Tgvnp&{AzIDXLFf#8bSjR#_%J2i-)7C; zBe1AFm0zGX>;4BC$_k!0SkHc3h%s-eE-r`IELf7aTa;?-sUXqzkXZtO(&(isNP-Ly zd08#<9=X4l%|6MWQZ~*gVC+&zu;P4;i(Yy}C`J4l|5w^!ouiR+ByoO|RlE;1mx(Y* zxxf@pW9$zBnR(FU?A7NPL1ovtm0nt29R0#-j|q=O&Sn@~RHAOoK8yyx1G`067X%?Z zYJ8kSMBh!soIZ6WmT&K)?;*c{BIp8r@Ytpd2|Lry<)$f_8V&=NX^xLRjduVLDW;4I z3fR)>%SVe-9|_-W%`VTB{(gGfjZ4%`POM|6Fw0F8g$K$D7!LvD*%htOKbwajgV-|_ zqRVv>p&=LaQhJ@k(9tcJ$fgC9Sa`&Wh$Y}7wFFEptz!x=gIgvhvlNR9{iPWe3=9W5k8#&Ksm!2eipJrpPOuNYdjTkcA)=J;Uu)q zjfSP7<4c;$3*;<2>jNQ0lCVp~FTTQ~!HN6UqWzLR)4MR~Qp!fG)f0se{)I(eh}IoQ z4O790SBQo$vUC?w$x9vhIT!>W_zCz4{3L`)kCd3E%#DDUsfT0|@JXY$5izbSlQa** z2G7E5gV?jX^}gQA??4C-J9fONo;@^5@_mbRYtfTbQr!?JcbPa{Zb@5=<7uB&jQE9@ zrXu;?o(=+39BwVk>;x9P$E|0p++Cj@+**vGy{iP>^yO$6gc&cLcmQJ<#^H^h09dD* z`o?%2Z17QEK{74~me84P%xfVsxtWQQ96G^nhP6bis*g!@7d_^NjZSzPm|*|v`GXfE zYpxuFM8BMCiiGp`>k=TT_XnzUU)2Hu1QZ2JC*c###wW9d^hV5q0LuFl8F5r!SWX_O ziHMnOf#7mRL(M{=dkEdJIwM)k?CxV8EWoEbcvcC!?PM*$i~o5hV?*O0L0-774trKN z4Mf^_#8E%hc>Z5z%7uTTurjZM@NC*@lmB)-&@;+;oix2tW>BKrwtc-6?gDi!4l%_#nfcV+<}!~<=_(a+=1UzD;QpoY1kGEUFYCx#Wo zfm{7JbpE-8mAG{~!Z;y<13tccbY$`boD~Iq?;h5Wx=Znd*68OwN@h#d-#lwt_H(Wy z@s8Hd+Sd%Kh#ag@A{@RBn|49Awd$M&ncB%|9{Bi)6q0WB}@=@{bm`?k%N zwoBgHrT1QNAkKPjbac~3zFl2!m0w6~&Xs|!MZ9?C@q)B~hVWzGF9^XZVQ6|J};%6GN)w$+p%eJXnnv)i42LHEQ@R5Aum+Y~|M%4f6;I{ftqb>)^R0v@9D z=S)o^=A~QTk9L3fd)fO*32j#IPGjY=4sBdUVfO)HVzyGaq$Az%vnW%hJ|}6|-!l&X zv-1w$+oLbNg_DJ%l=-}k{bf(ah}c{V*2O1$ksd|C!JfmQR)4I#gDT!diL$GbcXKb% zyZV%hC756hkEZLOgQyot=!r3qqu9@v~DpHxW=(}E+s%h0&0mwKzwi$66(H~rMbXfgHbrA4!f#n#C5Iid^9m|b*7gX&Wh zX-yoOE0r_9ZW49y`y~?!{VS%GTGI-$8#K!f8AzFmjh6sZ1evh!3@ML*nUJs~`BJ z3g>bq;UEeI51YjvVmTu6k$~R-FAmw7a1sYiN5p!dDze<%GNBJX9KFPRm;yqVjgu`f z4qgA`sEl;lI4JL^uG)%uzW!M{;r7~qxg@W^QtQFpdE=}Kfztv>&D}yLx!Fjr@Rv@i zCVSBVU0|`jSMxU<#j8wN#`33z_VB(W?P3%aO9vd)#w=joIz|K)!`-=Fd-2n_wL|%+ zt{)bS*r!2PQiy^CA>pFCtG|a~s<7#w;w-IIFNxeStv-pvvPPiAM4MUKLvb^X&c#op zvH98{;O;Y94MY%>4?mng>BxT1Xo-Zrd;aEs%ZbuyyB+jDu*t&CSjSRViak9zY)U;( zCGna5y6(@D1{R~nv0BU`!q~*K;*52zD6zWSNlZpXABgzm()n&wBGKyA3$1o;b`WKh zZ9k;QD$U0*$IjMu=NCO)j0xL-8bMr?Pw8JJz8=;-mDep3b*X`X1Js3pszIbO{UJ-< zIY@&{J1C+JqhLuLNCmJd^;Mhu;xSm0#zkXdh)|~?IwB>)EGoMY%UY&B>SX%u%8U{V zBd@sCbrW8C8B_*Qa4k?*YA};))AMjmtEA@KvfZv)q}uvawW=*UN5cHUUYG7FnYmA! zKvcjyno+0kots6*RNnx&Zx}a_CP0H2(FUvfzjE{@GqDZK$SM%=j;LjfBG|P-+@Jbg zP@;5ttLD;yu$T~&?Z}esGVJIeqeA>2F~)sQDfc_vFw|X>_s$x9MLFcTpu6|teiF_P zPv}PEOw_Mg?A8j=xsBnwz<4Bpetngxx}w}G-GneaUQ&~^dzhmi{C14ESY>do5l{qB zyD{yGpVaOP``2+(V(0i*l2;7|1_0S<_lM~Yr8baECf|IS$BOA$(2X5Z*(%O;jGU`^ zAn6#wFz+s?yM9uTFq#%#q+w+(Hdw@MO*(&f;g7`|2B0?-v3kTol*R}s8Z1K79p z<%uuHzU3WbkkvP0U1VKM^_oJOr*6$@8LWS%Zgq+(F-qBSpj(0Eb9^=ml7Q81wUKH= zvX;HkXOy3cL>@_JkQ-Vgp+KN;HvX#OgpsQwsK%1*hMCtfdX8=WRU4sNmuHx4B=ET9 zg1@?QA(tUuI~`J9MNV7D%M~MPL+1x8cSG4G|FUiQa zxeMLWHCJe8T;!%vG6jRCt4QsESu|%^NP%cN!RYy%d|ebHx#KVg+8l|(hr=dn(bbmH;*9CK$OioF; zQe+#37`!@F=O;MUZ^zIPgjo6mLu1gg`>|?f+ddBSXuy^-GNZRkV| zOw*P!tJ!7?-4yMZmniaK7^m${k9vekO*b=5bswV!143eviqe*?zKSu88sAUl$ent| zV56y@tn+m0ILgD{cx_ZN6zMA;Utp1Imw^yN`o$>>EyhxC!IHJp&Y}JyV)6&mijeBmx^BIDvfEybe;!bPY z-gFTD6dN(PE`yRNT}d>S+0YmKo+#cAGp`i1m8?#MNh_)S%JR#6>`Wx1QNT~SbUzz{ zCL7SSxyeVqTCcz}A?8_7{I!QpjuxS6Ob!~XMPKG7UxDD~UUY$22zE7qhNZp1!eqaU zKd)oZYJ-Rv{5mt-I5$YOuuw`rXILP@TE|gsY4vXd7u`~}{o?s4Uj4UzyuiO5jS#JO z#HVMUkc;_fD!_wEW+D z3Q4TKsqYEQ)F^p1GSf*-eExrTSc(x}*0Z;;k_kYq|5+mbf#H0o3*J8!Gdy~GHDlw{ z;+`tDL{>r0PUkHn=n9kR!Rgw^`=bJh$)5&mO*Nm|N2KRKbbr_Ya)xLkv*wn0mB9`Q z$4`$Rk8qGLx%t7Q=^LbuAuY?E$Zj`-hQ-Fn@ag0L0i_T-RbAJ(7t%g*QyXY8&_0=j z4L6W=s+D1w=s5BdH^ApT)pl;D_NL&bq^=__CQM)e+eRi^Fr< zatS!(H#K^jzUtCDK*>8N28u!Rr!k;%UlbLyooM~rNVn+PXv4O(7sx>Wo$&99IwNx2 zqb^3%ybqqSuN$jkaN3sxI8l{cm{x?l_Y9g>V1WLrg^%O1U8<_tKT1B{4_!f7YhU7< z8=9M7xNDA?s8a0^60{iXz>h6dk1$ihbGrVwa%_%zj0{=1x0-XiuU8@@PA4Z5x`3C? z8>xxAYaS_s7q-Ym#EwY#O~A_=!Eu^;(RtMn573t7qq6*$Z=9Shn|4WtT= zhlr?SRghk8mNx560&)p@7sXT4qfdLg z34CW(Mj{oFmN^~TomVFOr94h-)JvtMxr)(U3!kjuY!7mQPZp~-0A0dYLV1yN-NI+f z(KZcj9Bl(&q`KVT9cv%vzGwRG^0VSj9K`zgW-=0rEu8io?wYS&AZK!UM}j=urqb-x zm|&8@*_I^0SXX^OQROip4aniZo&4AH4}s$HTz?ks%w0nV+oc`n!Ro~Ww?k{|;_tke z)l2gePULA`o7b`5!>uW^Tk>{ZI9PM9SxlOl^cu?Hdos{G7hjEh&;+fN7EY@mH%AY7 zy=kaHxw=Z8F?vV`Bg03&U8p$P2&@uXl$@>qjuLh;_udr`RNR(d+33m%)0V~i$&P|C zf42`J)0~pX&;R3QWn-MVLv?vx?w}45LX3ed%Ha=0R(b;j)o~0tO9f`R68luZ$SI>SdL^~QXK7%klcHDf}v$T`?*y&;Vxp3YR+C2DM0W?NQAs+Sj z43_~(GIOA=P5s05M%v;PYdZ<&iRuR``5_U_e+ZPiilI!se z_a6$$H}CJG;TfwiWF`;jgQ+<>zjJfGU&N~IZM!zkXy3On<0YP!`Dw=`;9!UY*<9Se zys@BEic9l&hZf_rp`@UKor<)W7?-KZ9S!AJzci2gp0Y61@YQ`~{1OkN+ z%YotBQn>SDPG>|{=Q}AGao=;XSF5gFszSn|-@?e&&7Fy1v8Kn%PTUXXN*4LmXmkg> zCgw^$`f4mhwZF-eFQ9}Oe;pkYuFsAp4z9MRRLn&~Ea8Zx8$2~!MQ-;V|JE}`+b8C? z`pV_Z_xx7;EX{HkL7zdUP#MTXcwWX>U55|_p?HFsy@4?m)>(fakP~8(sB2hfCKgVs zdp0uDtO5$P!D~tA{qq{{o2&4J%K5viq#w)8r#1!biuyz4a}M!vLqla(6=VcV)e;pI zRI4tk2na4ChDs_bC)aiVpE%D}FkkK}-_n zSAF$qF8wIkOjoWbwgsnoR^ENX=bB{PXXeodrTf6aN<@Wk#0Vax4&1 zEWSpev;B@G(z+W9_qs3QJ_V-KYeH1OEEDQhjz76T`IgGd{SqlqbL+nLwk| zMUPdjjJ#PK@Q0Fxoe3CaF5P7fHIFWj_nDRjG&=VAizn=xXJ^nB4avYmcmXXlBbhAH zv?vBBZM_LUW&KXke%+s}j&bI1iETVpE{BMlTHeDR7Cm{!2DrHUF(RLi?gBM2b^epzU<3vRMoSWqPLI>XlUqt$8xXZR!7KcDpw+<()i@1r3e;M6Z; zNh58X9S!3|D_JB*?HY{yXtg^u z4btY522u*H^0bP;x($+Vq4QKj-e1Y8DKc2a`@5aNvW=hJN^hK!G>z15JIM5LU#UF$ z5`aoyz^mY$eSgkmf77vNh?fZcEpQyC2a^(FQR2shJNI!c#2voMAUl4~jKOMMw^0}z zWQ~eYi>xJ51Y{PQ2rHzkkzOum^Lp1F!@^<`Su{`s_fAZf(##{1N)3+DrpkJoMv1}7JN7D)8 zfP{D9<4LM((jzKnzNu>TJ?njU*{;x|cP#{0AIiweLf7GPA51$!^~Yieu)t;M`kLXz z+9(4Zo-FJFh(4Ub+8r$&m$WNd$kJu9NdmBe!Ao}4<|d34V@EJ@6Q{YP)k{HZYi5R3 zF|u;NM=8@m2V<1>VJMz2M~<+xW42c{;r6uNk%Ma|KM6Dd*u+5`S$kN@@re`25L z?txqpjJe5FS?Pbq$Rice29Cf|jfkQWSv!84Xib7trUddTeowz8$|NKiNIPw1>pX|O zS@(vcb`k(?Z?cw#sGx9_67|%^E77rw{4tH>lPeKL&Sdx=yQCaAMv7((hQYGj1S8>F zOIo{Q#2S{`lX zseX~{(C-ynP=DwpC7`g`FT%GNBvU!z=VfYJ6t7s2TP9ldMOju}D|UED{Fdfvb|XGS zWjaQ8tX0)?{}Z+`F}~I+#3TUiSAc{1DnWNm&13S9Ltu|wgC1L`liS$;KbQjiQ#s!MFa(ve?ZaRq2~JABfV0Xku69J z$|O-$sBpPp_)@uaF*FZ){fj8B)|b#~dmErd*nry^8nEmapGWc;hzu5Z6UM7qebTG;> z>Y!l5GI?84N8NRZ%-efbDH&|?ULcRT5X-B&bY{6Hsxbsw1}Xs&VF-a^GC5>DGC^FW zT-+nAFVg(sG&8IvCYs1rEW?Z<3F?^P1rJB|D0H;z%0a>)FX1e_&5!;GwV zYH>ZoTDj@3z>HgFEgd#vem1HZSi1<@`9fQ_8g5st;(RQ?~~gShU`v-#FM0*eaoR&TDS%G3`=CDk=Iv=Hajtvb@uh3_(EXQYQ}#Gja}af zfkrSF-+F5ja&1}B54}3L$Ccca+LS2&Bh9d zJnfpRJf}T9^+J**w`mz8l?r3zdt8AQN?qN0l0Fxe$gfR#0}j4V8RB5}92hHPH&@{| zQvkjIQ2&dYT0p;1PIg~$(LSqMxZwpNU2xH`hFzojG`|3Tj{N7;wTY^gU%Mr)dglnK z(WgPpc{DzdG6}ny`C`hISjjxM*capBLTxsjb=24Ca2GrPAxZJr;Us1-V~&|u5O6MC zKCVZ&b_>VMxEZUc-#uhIx%Q1hcd9QjT1xem_je)uqhkw#dL)oXy!)E=^S}L6&Y-c~ z7QQ009BS0QRXnTp3a7xrb^-OfW$yJa^O2r0_a;VlT%Q23fF@GV2HI4c{t_5$mV2&a zpfiP$K{BN86H?5ZGgemfM5z_I;jqr+K~#JCmwgLP?j!s#`=-q9B=L_6uKdc>_a$=1 zG5p+TE8I~$F?ackFP|+j?XLXDpR)D4v^pqJ-2`8s&;^k;O)RseS8x3hjZa{Lxzi(& zGe!l+_2Q6hb20V|oJvEfT|Ce8&~qPmzx@T2*g!2MwQM{;Av_#icJzmKB5s-i-ZaZ) zz?t1XxC0x&dwAMAA}|Lz>JbX?YT(dgs3To)dO|dd(M}k|_vn4xCW>oaA&j?Y8m%gQfP>czN44+oR}!o|THH!yJy+=x8xurzVDrw!Jf zZjLY!-!R6 zcE|!IF&4(N$*a(KJNMRPw>CDqEBG$v;Qi}qvQvV3aB}@80Zu43G7CaI)aA5F29lkx zu|fm&jwgXx7#3&R4%K)7|jh7Pr; z^>!0HfRLDY@osq}n9iDXsI(z8jcS$kZ2-R>Yn^i%4nUf$#$-z+!+_yY04HVeeAph; z&fnqgQn`oN;DtgT*Z-GWYc160p#L+k_y$FO=$`rqHM3%ti3f1zKVaRicZPA%vL*D= z=aKMW#B<&olkeH*2aAdn`)6-QSXc-i;7?|yONj%n@!njv!uj~wP1id_!k^<2f|O!W zjBn^a!A5^a5vud&7y97`>+j|VYZc^Gdao3PWIS6x0rBuR)AWOrs;jxLWBImfbiVSW zmVuzifV&rFxef_xRu%5~<*=1PEqM{3(DQIr`2A&XNzQ8`lCk&ErgdD80vXW<> zg&ub33r~O{oN?@gZ{I$PEj6q%3?LHT3Gb|@*l95$!zU5~D4eXu048i|>KVaa2mlWN zF9bj)@tbetPweRUnp%!nYj_0^_7E3@fU6QQe<^XR-PwpBcqAC~rck2RFd^+!Y&nugcEv0f^E*0SXX|>kAaKP@O>6=ZytYhBC^^qo1)D%4p z*71-&ZF^<>RM{B8xB*E)!4)z72*o0;5Ehbdh94y1zuY z5aebM;3B(5<)y#qQ$Qg|6)ed=YI4^s#p64k-Fcoi?Ij1XY}A{r*ug#_wmJl7yB0<{3BN3c8@-RcU&sEPH-d0xTauJO zDFBnMro3T(CqezzW5j81Y(I4%L?z;NKe$~my8k!THLXw>$Yp-~NWzfm8kq{`f^Cmv z8EE)wmGgQwB>c8$^aBz^1JDP{^{g3eRZ|))bH)O57J)aFc*Dj{@9NT?HisH1eBFB?SQoOScO^4<~ldMWv5wU@0oXp&;-+Pix zH)5Cy*5h{6JR!UYfH@~Adlw(pQ`R+B3AJ0KkP%V!{q?x9^JY@cu)%C)Ukf#{Z7nq4SjHlG7-31p?ZvHM?2vW#z*bZuAjYfw@#N~eHH#7)&&ry6!}Aeh2FvRr_u)n@c| z`f;qsv*x^`&}h);v(R23CJ4qv$;i^>e$NKL#rpW`e|%l=fuz4FMU=d1b}K7 z5TA7V$84k}5Rj%DXR{ppoX*qXaQNi<-*$CC6* zIpiqoP)Mp4?6CXms}FZH>RpPrrR9hZ;Dyy?-^ThL50-74|7w7(J^= zYSU6y7s?^~ml?}ft+g7bUAc{?OFSTQnA=Ar1DAXIZ(?syr&&J z5@?YT3J+RqJR|XYIZEIM+(4zu2szOf8-3iikXpoXt)>1TS*|@`BGdZ%3Bx8}gD(DlpUmX5nn@ zdyhEJ99aAx53?QkQBO7+k7LGmel(&cmXA?D^~D9e<*#h${nVlbMnlj5In(6Unl-dK zdqx#J*2^rcA|rD0i&Y%dmo!d5C_{}mLk0lD*?ukAZCDP z`@KVz-*a{a;ge*jPuANTMns<}q%<*2wA9GGGCmN6{*S&;-Gecur-g83Y2oAW%C}hm z{jLEiKoo@{OYMi9?bkyMmUEk*eM15%0$8A&s~a0V?-v&rL#C!w>VM>u^5{2Ged=eG z$0{$?XmsA9T}(YQUPvlzuDx|y=cy^#Z0;*1wU^2?+!eEY3xiHQ*3>lR!udrRO`+Jo zj|>0i+BK zkDLYDS0BeUu9s7AJ^*x?-!ys$4bVCQ$J}F##VII4af3Il4FGEgPo` zj_q$*JPsL@-7}+$NSoy!lLvi&SBO>UOFYW_(rz;#HPaUX*Sc$5Kr>A{KGsSG| z?16GA%%3Cjkupv2x@#E)JWm+=B|~u5(%3$C4-=95GuM!hFxk|r-Zv9YR#?Aga!1|W zo}?3<3j3Nqc>|Ql9Q8ie`H4f0di-Vszzn!FfHBSjXs?eD49TqD1RNTYkylcph#>!I z62^*@S0A#&>veTuv+6f;dkc(${5dyL1EZ4_j6!eF6VXbjenQ|b$I)DOn?%0qVg0AHr^}*NEr=Vag@ytel*Q&D-A*XRZYVE=TEp`r$86 zM1KuQ;;R3byu6Rt{x*Vows@nJ<6}>ZaH5J9yko#ApC%9Z%ckm3T?h;?5H+JD zO1d84;@~J(XdWA<>82gMK0ba&LPqA&Nmaq>s%0eNGdM#^i zt+4)m?5D=7*XtxcY(hTNt;%8cD0k=-;=n_iG396RABsWmeJp$ZqX3B(-b-bq1d?YO zC4)~dAHm92!OANxhU-r)y2)ona&cWA5akmoIsAL;npC@m^}JI!2{&*I5%$ke*P!X= z@Tz<0nOi9HBYjL327EsrFr9{uxW)1Mw}p=IwC=%7BxN5sWa~?TGRri}E`E@L#Z;(T zGTtH&p-Z2{DkvBYw)cmQ4RZ_n!i$?B9iml(kpcAv#70)Mo|;9}6(%k>MmS>2prz}H zIV~#h0P^iDN=|eY`?2)-Dxwq5_E-J^IRA^2G^ntd$lrge!O~g>rtKR(b;M?8XD7$G z4!E%L@Pu}Cea#g5(K5v4Ndz}A0oSxMiI=$zSQQm!ES|(Z*=NZX!BTI5HaMp7LY^7Y)`9B9RWk4W(R%E&A ztw#IAx)2KQ5)kHQf@e4?R)?N=w2^EPkY=KzX^UKR5jgNDC>*k%toQ zI3HlP4wB1e-g9kcZm0FP)4|CW@b!+H&B8h2mo&S3iNo!CtwjDb%W_+yG}Oi3viBqo zoVs1wqi>PJzLn1z~}B{h!yJ*@nVFHENIvwmG%(ep4Ai6N?|>4%%E%!W4Ct2 z6%jC)T9jB6fAB}_nH%}X@$-Nq^aYf(iV3DmX)z`(m63Vz-M!V_FTt3pf}VKSDT-Z2O<{vZ*8dpB9lka~F0xf2 zB@aC%I|S9+=nO74Fdo|L*L^RTBP$iUdALLXhGH5MNLP{8fQbl#ti=F($crG`dT*r; zXJQfVRt9=lk!Ei4$>9HCEL=}=_UEe8Tg+RT zT^w8t;j6#=u>cnS$SvyWCXR%)B_KWX^@(=tVHybxCucn_dZm}MSb{tS&+%xJzA2%g zl9Ny#SPHlAe%0`cO-?3hDG;36PLsHAmkv6!d-CQ)T+TrlNA3fwO#j;KL4Zj~eEt?OR_8lF# z`tf60N4UcB4f-qa?d`1`UstFd9*`~IU9uDnyNUHQ#nA>c{7nz!n3gMcaNOv5q`(cM zivBM*mAS!!0wIVS;I#hU5FNDB^BU|2Sou6dS@nHr$VfO{mT{ESrh?%s8kU-~clN?J z$L1a0YKK+}@2OdR7~BI<`&CwiDo%LtQM`z%ijcHqBR(_WD)e~OSJu|Cw+v6QhBaA} z82Ct}UIYM;)_nY5028P+tV5el{{jQ8_qG3Uki4#O@gngNJpTC`ZAtj;T{;xgauC;|eynyEN+i`V}hS>=xZ) zOmxOVG;W{5g$#aj zVPQf2-xwa$g2!b~u~L4?VE?SjPd|<)Ts}%Kj%CmAL)`Cb_Q}v}us|t>+5NKYH@9 z0@7T1?xw~XEN%<9os0xHz_%u*RbcU^MCwW2NsV?JnV~-^AqT0;qO?`-;YylwIdQ7(hB3DBJAMH1iwHbJN`NCYi|dy|Tsx@Qh)s z`|D$3e^|O8(R<4l3)wVlZPK9o3)pqt)*>+Ko|aX$d9!qc#EGjU*e_2A>3>F6jP3V4`5=84Je;7iv|1Fu{)D$ziN<^tE&2yz?u zb@&1m=>@?i+Ey0(YEfWM$mahBYiztVjsJj{(gID~2$OY$kSte73DK}a2LDTWNJuv#IY);GgHh7;j_>c?U!TA3J-hcg&pqck=U#s3ZJ|c4dq9#408T~< zzgu)e1xZvUW)cM*kYb(Cv2K?`6F;T9d&I^B2t14Vbp(Ch4H*Imbnj1_rZ?POOpGHF zDKOOVB~_OQdN-msFFYqEDKafXVhO?>xVVv_oT7D*y|$a~34Z+Bo1$XZC~{B5 zJ3|di#7EdhT-)u{Rtg5`IS@K0y-(4h4y9cLSURkvsQ-sFM%4nEOQ~Of;m9z%0@DTK z_XRpUOMTpbTB0G@V9nY=Oba58hvbVFLWP3zqY_N+4_jz{L+yK2&L0K8pZaK#X?=|K zmJhj?l)$dtbr zcR#P6qw$Pd#U`t-C-K=mi`F$&_pz??2`n9ZgkMc3s;PGi|H1TtfM2w!P3vbJ+68HJ zO1cn#-GwKQY2tjhPPbDGtpdI#pkI5{mt%IU(%W|%neurQKTad>Ecp}a52YyyOcgz< zDC0PtYHSBzGG@C^U~9x%c?5e|Z^^(jji3L7h$Y;v#YFz>xCO9fe^Iyu_8Cy2&9whn z*3tnA;iJ-p7#r6Vy+J?q%-$aYU%E9xJ;^%mm5%U(Zo52;nhw?% zgf`|6ybbO7`e0inDqIMu5wXieBS|FH?h0Lz%g=e7;??y}(C_k5?4`S)pE`*k<@mW+{qS z-1t8{Nx$2r3Muov{5C%5;yE;tPZM9X@GHMFQBG_k_oC&!!OX}xVillRYPfPablrwG zJTltgc_YKeogVH35B^>54vYH|wH)N;Ze8fW5n7CkZ2yZyoKh%5*vm{8Bok2O{^K1T z3J(P)MBTL+TE8E>Z(QblHbWv)rSpCx=1~-;@uxIXI;74W7JcF4(xMcwaE##x5PK)C zeFeSrzg6_edqpN1s1xxN76c`V4eQtzX$3VOJFlmRiD^N2knhcXbfhaQ)fY^p8ue;E zYQAHjrR^@t%tTCExZEV5e^lENRr+nqNWfJt0&*teezldnZA=%Ma0p zbND&#e!8=EQ9pQ(PZJc`ATgh`rsrOn44|)0=1~JvJ9dkCuA?VIF#^t0z+}}s`i@Vx z2?B!Vh4bPg4jWM91sm-#%cuJpbaZ#V^*?<{s!_(yDuQ(-Fs6aXJ!Rp7qFK+W{ zUKL%}vAP|xE@2a&LeW@gTC@u&Gh$!+QZzGg)GD^^09BF(A`d<>OqsmbY&`dv`!CN z&K&n7Zuo>hJJB~I3NX^ePTrsY?y_RNi98z->aFIx6^AkSZjc#X_}9QQ7wK8Nl0qcr${>x!b?5lZ0 z{i{s8r?PUsCE|GhGPe9d%-?IKKg(+mWw>KI`%F{IM3&6fgmc$HRX2H=hky*_RrgX<{)uoeep9t-Ks86NO1Oh3bzd; zUM|u{2fMT-E*NHKLJL<4Vn>dBIK_^+ndpMY7Td47y++8%_uxwIAS z`D5Q!Ti+Wrwzw%wMxgns26KEjcd?$vxwN-we~m;qhJjBYl-G-+j=C{#ed#;_ld-&} zEh#_|J|V6tH0IJu#e)n_D|Rv-r^UR%JodbXs(@(-2)B-YtKTFVgdnv_RQ68JlV3z~ z3Ku1WFkG%_-wm$%gh&dMNk>7EGU(l7IIR*JCCv;UF>r8H{74@-=250Ughsw3?=abfOI#t!@oy>4d>}8LX;?sE{gb zMCn*4Sx{wD@0Ea@ z`oDDI5E^a140EFh=sKt#+Lq=8*to5zM9iKY{4n_0y-G^-Exfe+dC{eFNTwQ>E>$E> zo%oEq&B5ajcK+L?z<}c7z1@Shbb3R0K)gRYk!{J1&XkZ4H2RRm{> zeCwMG1SbCx5%Xfenb)u{Sc@+;f67Idw>|4fy-T<{pQhgVs3>mdV)GJ}Ou2OL|CfdJ z5zlg!1LA#>3`3S12>vK)oKS69ls%cmW9TunoOVu*t*ckOufVe+J%1&vXk>XQan>Fw ze=eiyvcn*r^+7Ec?msnBGo5%FHTDUMBRw*j5kAlVRZn;_5VveDH$KMB=8w}7gqv&~ z(Z`nS@V3)i7EjPo5%Lj#4=Ur~Be21h;u^>AIR9`Me&&6tYN^KP9|Ln^j%F-$&$!y+ z>Jp5+ik;PEH_P+eufCjI~XM(=o_mlylNa?Sb)MV>WNJQuSP;a z?&-Qw(JH6^Qq{k|yM{O)Nsm6&I`+KIk=!2dA)?DM-Peo{8 zV6s@={xeSMiC>l(^xn*oDo09%(Bt-$U{9`WLMpW)+39#bU~w7?oSrR{?#sfl@#|68 z{;wCY>+~_(EDobVG04U2r9l<>5+@@%)zVZ`18&Ym>s#tnfi8&>hi0Fe3V2Fs7#MuI zJJ54XW$hsj%gz|Y^3o5TN%s*K1O&0dokYDaCDY~4GPV_H40L(Y;)rh^8(MmLQYjhm z>{iRsixhOH5^&TO@c4%v1%|$%U^;X^=8G*Ck%qw+uYM$EN_tH*LtSXi+W*~sP)1gy z7pgxgLt0sTil$cy>q>T$!m(~wrPt-tHuVnX=uqBi&aP^*=#6C62<3u(GvkE({r!2c z{AF)UYs=7t!|bq|UZtTF?0|y@xc=)$m4&@1LASLC!wfEo^@Pr_5sfQGO)kOmV{EAS z4D6X@mq%4Vyzn71rbny%78kN@7X|GYfF8rjkd32ngraC9;!$IQ7>(GZe&wdtQo8$- z(5S$cmpD*CBl}v@LO!al)S-7qg_2vlc)LHcp&MkddJI{`FgMsP%5_4VP97G9>zc+F zPGUUZrfLm?_t(_uf~lsBjD#yV2nq@ciTbKdf!c7x#((4D>gw7x)-Oj}_o=V{xn0ND zipD!-K|&_Ia#cCP5Ex^4Bm(o{0~2@h@aJ;+*nFN6?x=<43&(dfs>{gy^8U3%94&r< z)1KG^4m)I)$(j0K&7B8(tPSWLiG~qqi|=+N{Lkc?6JHuIvXiFRDMhs#_4_xtn)G=P z4q#$yafleL@ti?0fDmt8}t-&*U`+&WHOsdt2jIw5@_wBG&P7r<$xp zisrTn!s&I%otKiDH_r^9;JFq4jc+n?OCJTP$&6e9 zE@8&b8I^jG7UlunlasOyYJ@~YeZD7e+WRDe_arikQLxxnA-#}S4Azn{#)$WdY-`i- z%;sxSAE>$2-&xxAsEt2rM**R4(h++2ueL~Deh6s6zvTRU4E3JIv-%YC7gsAf%hFU@ zPu;vkbmV~FMMb%$njTtoc68j2E!Pv+ZikEIKkC-&>t~R8Y43=;N-WZT8WGq2z4x+{ zZQM9)rtOsadadt9K_K~Wg%S{VpS}f@!j{STG~$&(ntj)w(UGCK?+2_tZsx`MvmALE zsr0mV%LC=Ld!ASRt;^7*UA)K6=^T>(9gW?MNbq&mAIn`5w`L~bg zrX8IbFRfg;k=9KoaNudehXnlUdV|>`rLX160#6kD9mBTwc=g$T{Ps^6LKZiA>~1tB z4E3MB3B1Y<9zM~^!M={(2HD@$$tp%oZE}?3)BM4DtWHogd0g4hfS4Y{al_I`&H_X0 z&3+85Z>WvH)4z((nR-vO5}EaA|C>GKG|LP8dJFoX7_VW;>%8@Fe5#dMDC0wgiMlpZ zO~>-VbNGn+^wvdT3D?+?q|lJMI)Fi5F2RcSqk7Rb;d*QswRS2U1GkLyOYjqoFUI!v zfAHil&cZ6W3 z?v$tH?(uA!4~f)vi^|J$yH#dpB`9!V%K@>4{6Zf@S@Q7r8(fOG;@`%fE9nI!j0_Aa z@R09{O&v}U@x3J5{PIvdODJ(;<7}_}@okOFsz>Ugw2m%PkNYIyG& za}A2<`ZsA%j4-$L-x7_i1eg5-c(wE>e;J*aI{IT+Q-^YF!WuybXOz&eH_);fR#7{JbFf?%aW>tO8B0PcF5~h zKbs|bjd`C%v7)m3DXTPfskZ&&%ig4CG<(NHPe{1SCi;qY8Gh+jYwJucBgW+& znaC^Qi{jM-Ns`(jywj{u4=VCstVcdOy4TbMuDL%NtFq491thOWk?^1e62n72Pa00A)EZx*|C}sJF#|Ut^l$Ylzpp? zjTNjZb8*n^Nfs2bVB5Ul>97}fDnYQ<#Hs)Up-Aw)QHK?hwInv$vR3LFubyJkH$sEA z1HTe!X&Fo*7&*GM#26al&NXVf)-rYD+Hbz@y1T3}gtI&RWTPMYiZN^RPcxNpvzl=g z?dm&QIdc;h7Jn{I&q)(U8Lupp^Z~c)Al_*alrOmrE%%|(DfLBJw870ahvn*vPE072(pp^Bg{q z!cq``_yvy4m0Jfsxz8l_7vJ4%))LL^?k9VDaJeh?#49!UA~D#`%Zrdd&;DSpCGZFx z{2Q+TP-JIf3|9g(?KbvShf|rj;tfPWPEw!D2<=&((;z0eGMNf>%J;;L?Dv1SI+y9A zTFC{x0?oi# z!v5|Kt1e;HB0Y}OmkfPh^!cpNPf;HSn)b!nxkrW1B2R=hY6(=t8if*k!8mHl{dBLZ z<6FgOhSdJ$U5}Hd>wzji&zq-B^(D4MDvk{d@H{y?Xi!akTU#5-G5PD0oQtDk?#}H% zz%#dOVN-=~bZ>91Ng;n#Ugh7{noB10Qb|{pD;1#6N6pa3nx>YlRU$$bu2-g5rr&u8 z=HlX#488{2*w`?ZIGPw5y?4#B-|(@r1UdpiW#xQ5m0%>od<|PUBrrUZq*{!7?QD8R z!tbANkLl&nl=XbWp?BPw+I;5QE0<$ufb!!I>w4{sd6Gy}zPM_$D(|Ln(Q%nCr!jHI2^KoG%;Ay@(C(wO+Rzx(DZ2fI!pj_grWR4^(%xA$bTAy!< zmllLc#80x4pffMgD4Afaj@6tp{3PVQI!K6{{FxkbuwzMB5CoS1f^%|Rt12qivNazY zxk^(w-`lmiZ@+;Lh{Y}Zuj1fu%8jbLyg0^8hd+#1m%ipQuTo*76d1C$u?aui7)u?n zmDbrNv^y2ntWE76uocavS4;lx^yJap>A#t|wrdf7?TwmzkqXDy_!0aQ`%k`yHy64! zuivaa()9Ua=7VjPW0~=VSJZ4`i%Fwrzj5iQ;rK3X=x&G*_=JALd`xZwiT3O7+W!3jWJ zJ45grO4C-e@FOlbbWmkW%^`-H&B&&y74_TKLJ*>4s^b$oeoSIwVrFfDnYi{tBU}qo z0S{3AI!@mCF*t9+-XU1GOdr#vjE3+`V^MJ7BeAqIR-T#lPM;>&*9c9rS zL z+#CtuZv?=EG*ow5QSCOyps!p-s+r>l-Qaq#2G7r>ciV5|M(k5FGwBd!O`XxqLH&b+ zYNudOaN^Rv13~KBHcg;-35_^e*H_6>6B! z>bvUnWLN<`K!mK%zF)Tdjx6RPA|Dyo_3xOZJ6EA;@rBy06iCviO5*?fY4zmukjaKn z2jFS^(!RiwrX`Pi0^wz$4rho3KcJ8{AH9WV+tT-}tyFA|{4M?(F{uKq@i9#P7XD)y zb$RT+HX6)*j|s}A`|QX879?h$e;wvgx>p>9h>)q4Q1l9X6TxE&;lvK%2zq$PEev>ibIines>A(OnPwwh%*PYkxd@^w*)Ah_)#Ycdfmy1 znOsgsulCO_H$Q0B_kVu2aHNH&pXjg?wfw=GHVey?S75Zj6tqBLMuG2-l^a{+5B%@g zAiIG~F*(qoUNpA7DrJf)|8|$`BJ}+813{rGp~402*;e$sB92>K=v+$G3#58%Ki$Qt z`Va4~)^6pFnXP;ymbmU;<6QNs_eqmLHK>&B2Tv$3rxG&>UrWcUc}_B;S*IRypPX diff --git a/calibre-plugin/images/icon2.xcf b/calibre-plugin/images/icon2.xcf new file mode 100644 index 0000000000000000000000000000000000000000..d8fa5cb4cc64b2c5b600ce4dba0f133d5a87ad7a GIT binary patch literal 82745 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 literal 0 HcmV?d00001 diff --git a/calibre-plugin/images/old icon.png b/calibre-plugin/images/old icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e9715307dd4fe35c686b222262b796828856ff22 GIT binary patch literal 24649 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 literal 0 HcmV?d00001 diff --git a/calibre-plugin/jobs.py b/calibre-plugin/jobs.py index 917539a5..e2ef3436 100644 --- a/calibre-plugin/jobs.py +++ b/calibre-plugin/jobs.py @@ -42,7 +42,7 @@ def do_download_worker(book_list, options, logger.info("%s"%book['url']) if book['good']: total += 1 - args = ['calibre_plugins.fanfictiondownloader_plugin.jobs', + args = ['calibre_plugins.fanficfare_plugin.jobs', 'do_download_for_worker', (book,options)] job = ParallelJob('arbitrary_n', @@ -95,16 +95,16 @@ def do_download_for_worker(book,options,notification=lambda x,y:x): Child job, to download story when run as a worker job ''' - from calibre_plugins.fanfictiondownloader_plugin import FanFictionDownLoaderBase - ffdlbase = FanFictionDownLoaderBase(options['plugin_path']) + from calibre_plugins.fanficfare_plugin import FanFicFareBase + ffdlbase = FanFicFareBase(options['plugin_path']) with ffdlbase: - from calibre_plugins.fanfictiondownloader_plugin.dialogs import (NotGoingToDownload, + from calibre_plugins.fanficfare_plugin.dialogs import (NotGoingToDownload, OVERWRITE, OVERWRITEALWAYS, UPDATE, UPDATEALWAYS, ADDNEW, SKIP, CALIBREONLY) - from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader import adapters, writers, exceptions - from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader.epubutils import get_update_data + from calibre_plugins.fanficfare_plugin.fff_internals import adapters, writers, exceptions + from calibre_plugins.fanficfare_plugin.fff_internals.epubutils import get_update_data - from calibre_plugins.fanfictiondownloader_plugin.ffdl_util import (get_ffdl_adapter, get_ffdl_config) + from calibre_plugins.fanficfare_plugin.ffdl_util import (get_ffdl_adapter, get_ffdl_config) try: book['comment'] = _('Download started...') diff --git a/plugin-defaults.ini b/calibre-plugin/plugin-defaults.ini similarity index 97% rename from plugin-defaults.ini rename to calibre-plugin/plugin-defaults.ini index 4cb63eae..f6bd44f6 100644 --- a/plugin-defaults.ini +++ b/calibre-plugin/plugin-defaults.ini @@ -1,2003 +1,2003 @@ -# Copyright 2013 Fanficdownloader team -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -[defaults] - -## [defaults] section applies to all formats and sites but may be -## overridden at several levels. Example: - -## [defaults] -## titlepage_entries: category,genre, status -## [www.whofic.com] -## # overrides defaults. -## titlepage_entries: category,genre, status,dateUpdated,rating -## [epub] -## # overrides defaults & site section -## titlepage_entries: category,genre, status,datePublished,dateUpdated,dateCreated -## [www.whofic.com:epub] -## # overrides defaults, site section & format section -## titlepage_entries: category,genre, status,datePublished -## [overrides] -## # overrides all other sections -## titlepage_entries: category - -## Some sites also require the user to confirm they are adult for -## adult content. Uncomment by removing '#' in front of is_adult. -#is_adult:true - -## All available titlepage_entries and the label used for them: -## _label: