diff --git a/.bzrignore b/.bzrignore index 2a6d1df889..73e5fd80b5 100644 --- a/.bzrignore +++ b/.bzrignore @@ -9,9 +9,9 @@ dist docs resources/localization resources/images.qrc -resources/recipes.pickle resources/scripts.pickle resources/ebook-convert-complete.pickle +resources/builtin_recipes.xml setup/installer/windows/calibre/build.log src/calibre/translations/.errors src/cssutils/.svn/ diff --git a/src/calibre/web/feeds/recipes/recipe_24sata.py b/resources/recipes/24sata.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_24sata.py rename to resources/recipes/24sata.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_24sata_rs.py b/resources/recipes/24sata_rs.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_24sata_rs.py rename to resources/recipes/24sata_rs.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_7dias.py b/resources/recipes/7dias.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_7dias.py rename to resources/recipes/7dias.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_accountancyage.py b/resources/recipes/accountancyage.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_accountancyage.py rename to resources/recipes/accountancyage.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_adventuregamers.py b/resources/recipes/adventuregamers.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_adventuregamers.py rename to resources/recipes/adventuregamers.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_al_jazeera.py b/resources/recipes/al_jazeera.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_al_jazeera.py rename to resources/recipes/al_jazeera.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_ambito.py b/resources/recipes/ambito.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_ambito.py rename to resources/recipes/ambito.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_amspec.py b/resources/recipes/amspec.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_amspec.py rename to resources/recipes/amspec.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_ap.py b/resources/recipes/ap.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_ap.py rename to resources/recipes/ap.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_ars_technica.py b/resources/recipes/ars_technica.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_ars_technica.py rename to resources/recipes/ars_technica.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_atlantic.py b/resources/recipes/atlantic.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_atlantic.py rename to resources/recipes/atlantic.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_axxon_news.py b/resources/recipes/axxon_news.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_axxon_news.py rename to resources/recipes/axxon_news.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_azstarnet.py b/resources/recipes/azstarnet.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_azstarnet.py rename to resources/recipes/azstarnet.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_b92.py b/resources/recipes/b92.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_b92.py rename to resources/recipes/b92.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_barrons.py b/resources/recipes/barrons.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_barrons.py rename to resources/recipes/barrons.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_bbc.py b/resources/recipes/bbc.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_bbc.py rename to resources/recipes/bbc.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_bbcvietnamese.py b/resources/recipes/bbcvietnamese.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_bbcvietnamese.py rename to resources/recipes/bbcvietnamese.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_beta.py b/resources/recipes/beta.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_beta.py rename to resources/recipes/beta.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_beta_en.py b/resources/recipes/beta_en.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_beta_en.py rename to resources/recipes/beta_en.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_blic.py b/resources/recipes/blic.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_blic.py rename to resources/recipes/blic.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_borba.py b/resources/recipes/borba.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_borba.py rename to resources/recipes/borba.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_buenosaireseconomico.py b/resources/recipes/buenosaireseconomico.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_buenosaireseconomico.py rename to resources/recipes/buenosaireseconomico.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_business_standard.py b/resources/recipes/business_standard.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_business_standard.py rename to resources/recipes/business_standard.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_business_week.py b/resources/recipes/business_week.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_business_week.py rename to resources/recipes/business_week.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_businessworldin.py b/resources/recipes/businessworldin.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_businessworldin.py rename to resources/recipes/businessworldin.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_carta.py b/resources/recipes/carta.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_carta.py rename to resources/recipes/carta.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_chicago_breaking_news.py b/resources/recipes/chicago_breaking_news.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_chicago_breaking_news.py rename to resources/recipes/chicago_breaking_news.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_chicago_tribune.py b/resources/recipes/chicago_tribune.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_chicago_tribune.py rename to resources/recipes/chicago_tribune.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_chr_mon.py b/resources/recipes/chr_mon.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_chr_mon.py rename to resources/recipes/chr_mon.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_cincinnati_enquirer.py b/resources/recipes/cincinnati_enquirer.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_cincinnati_enquirer.py rename to resources/recipes/cincinnati_enquirer.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_clarin.py b/resources/recipes/clarin.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_clarin.py rename to resources/recipes/clarin.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_climate_progress.py b/resources/recipes/climate_progress.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_climate_progress.py rename to resources/recipes/climate_progress.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_cnn.py b/resources/recipes/cnn.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_cnn.py rename to resources/recipes/cnn.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_coding_horror.py b/resources/recipes/coding_horror.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_coding_horror.py rename to resources/recipes/coding_horror.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_common_dreams.py b/resources/recipes/common_dreams.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_common_dreams.py rename to resources/recipes/common_dreams.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_corriere_della_sera_en.py b/resources/recipes/corriere_della_sera_en.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_corriere_della_sera_en.py rename to resources/recipes/corriere_della_sera_en.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_corriere_della_sera_it.py b/resources/recipes/corriere_della_sera_it.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_corriere_della_sera_it.py rename to resources/recipes/corriere_della_sera_it.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_courrierinternational.py b/resources/recipes/courrierinternational.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_courrierinternational.py rename to resources/recipes/courrierinternational.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_craigslist.py b/resources/recipes/craigslist.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_craigslist.py rename to resources/recipes/craigslist.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_criticadigital.py b/resources/recipes/criticadigital.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_criticadigital.py rename to resources/recipes/criticadigital.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_cubadebate.py b/resources/recipes/cubadebate.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_cubadebate.py rename to resources/recipes/cubadebate.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_cyberpresse.py b/resources/recipes/cyberpresse.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_cyberpresse.py rename to resources/recipes/cyberpresse.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_daily_mail.py b/resources/recipes/daily_mail.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_daily_mail.py rename to resources/recipes/daily_mail.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_daily_telegraph.py b/resources/recipes/daily_telegraph.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_daily_telegraph.py rename to resources/recipes/daily_telegraph.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_danas.py b/resources/recipes/danas.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_danas.py rename to resources/recipes/danas.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_darknet.py b/resources/recipes/darknet.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_darknet.py rename to resources/recipes/darknet.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_de_standaard.py b/resources/recipes/de_standaard.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_de_standaard.py rename to resources/recipes/de_standaard.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_degentenaar.py b/resources/recipes/degentenaar.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_degentenaar.py rename to resources/recipes/degentenaar.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_demorgen_be.py b/resources/recipes/demorgen_be.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_demorgen_be.py rename to resources/recipes/demorgen_be.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_der_standard.py b/resources/recipes/der_standard.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_der_standard.py rename to resources/recipes/der_standard.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_diagonales.py b/resources/recipes/diagonales.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_diagonales.py rename to resources/recipes/diagonales.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_diepresse.py b/resources/recipes/diepresse.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_diepresse.py rename to resources/recipes/diepresse.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_discover_magazine.py b/resources/recipes/discover_magazine.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_discover_magazine.py rename to resources/recipes/discover_magazine.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_dna.py b/resources/recipes/dna.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_dna.py rename to resources/recipes/dna.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_dnevni_avaz.py b/resources/recipes/dnevni_avaz.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_dnevni_avaz.py rename to resources/recipes/dnevni_avaz.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_dnevnik_cro.py b/resources/recipes/dnevnik_cro.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_dnevnik_cro.py rename to resources/recipes/dnevnik_cro.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_e_novine.py b/resources/recipes/e_novine.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_e_novine.py rename to resources/recipes/e_novine.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_ecogeek.py b/resources/recipes/ecogeek.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_ecogeek.py rename to resources/recipes/ecogeek.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_economist.py b/resources/recipes/economist.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_economist.py rename to resources/recipes/economist.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_el_mercurio_chile.py b/resources/recipes/el_mercurio_chile.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_el_mercurio_chile.py rename to resources/recipes/el_mercurio_chile.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_el_pais.py b/resources/recipes/el_pais.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_el_pais.py rename to resources/recipes/el_pais.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_el_universal.py b/resources/recipes/el_universal.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_el_universal.py rename to resources/recipes/el_universal.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_elargentino.py b/resources/recipes/elargentino.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_elargentino.py rename to resources/recipes/elargentino.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_elcronista.py b/resources/recipes/elcronista.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_elcronista.py rename to resources/recipes/elcronista.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_elektrolese.py b/resources/recipes/elektrolese.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_elektrolese.py rename to resources/recipes/elektrolese.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_elmundo.py b/resources/recipes/elmundo.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_elmundo.py rename to resources/recipes/elmundo.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_elperiodico_catalan.py b/resources/recipes/elperiodico_catalan.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_elperiodico_catalan.py rename to resources/recipes/elperiodico_catalan.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_elperiodico_spanish.py b/resources/recipes/elperiodico_spanish.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_elperiodico_spanish.py rename to resources/recipes/elperiodico_spanish.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_eltiempo_hn.py b/resources/recipes/eltiempo_hn.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_eltiempo_hn.py rename to resources/recipes/eltiempo_hn.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_endgadget.py b/resources/recipes/endgadget.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_endgadget.py rename to resources/recipes/endgadget.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_espn.py b/resources/recipes/espn.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_espn.py rename to resources/recipes/espn.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_esquire.py b/resources/recipes/esquire.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_esquire.py rename to resources/recipes/esquire.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_estadao.py b/resources/recipes/estadao.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_estadao.py rename to resources/recipes/estadao.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_exiled.py b/resources/recipes/exiled.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_exiled.py rename to resources/recipes/exiled.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_expansion_spanish.py b/resources/recipes/expansion_spanish.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_expansion_spanish.py rename to resources/recipes/expansion_spanish.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_fastcompany.py b/resources/recipes/fastcompany.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_fastcompany.py rename to resources/recipes/fastcompany.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_faznet.py b/resources/recipes/faznet.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_faznet.py rename to resources/recipes/faznet.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_financial_times.py b/resources/recipes/financial_times.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_financial_times.py rename to resources/recipes/financial_times.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_forbes.py b/resources/recipes/forbes.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_forbes.py rename to resources/recipes/forbes.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_freakonomics.py b/resources/recipes/freakonomics.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_freakonomics.py rename to resources/recipes/freakonomics.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_ftd.py b/resources/recipes/ftd.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_ftd.py rename to resources/recipes/ftd.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_fudzilla.py b/resources/recipes/fudzilla.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_fudzilla.py rename to resources/recipes/fudzilla.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_glas_srpske.py b/resources/recipes/glas_srpske.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_glas_srpske.py rename to resources/recipes/glas_srpske.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_glasgow_herald.py b/resources/recipes/glasgow_herald.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_glasgow_herald.py rename to resources/recipes/glasgow_herald.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_glasjavnosti.py b/resources/recipes/glasjavnosti.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_glasjavnosti.py rename to resources/recipes/glasjavnosti.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_globe_and_mail.py b/resources/recipes/globe_and_mail.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_globe_and_mail.py rename to resources/recipes/globe_and_mail.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_granma.py b/resources/recipes/granma.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_granma.py rename to resources/recipes/granma.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_greader.py b/resources/recipes/greader.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_greader.py rename to resources/recipes/greader.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_guardian.py b/resources/recipes/guardian.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_guardian.py rename to resources/recipes/guardian.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_gva_be.py b/resources/recipes/gva_be.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_gva_be.py rename to resources/recipes/gva_be.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_h1.py b/resources/recipes/h1.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_h1.py rename to resources/recipes/h1.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_h2.py b/resources/recipes/h2.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_h2.py rename to resources/recipes/h2.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_h3.py b/resources/recipes/h3.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_h3.py rename to resources/recipes/h3.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_harpers.py b/resources/recipes/harpers.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_harpers.py rename to resources/recipes/harpers.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_harpers_full.py b/resources/recipes/harpers_full.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_harpers_full.py rename to resources/recipes/harpers_full.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_heise.py b/resources/recipes/heise.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_heise.py rename to resources/recipes/heise.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_hindu.py b/resources/recipes/hindu.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_hindu.py rename to resources/recipes/hindu.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_hln.py b/resources/recipes/hln.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_hln.py rename to resources/recipes/hln.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_hln_be.py b/resources/recipes/hln_be.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_hln_be.py rename to resources/recipes/hln_be.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_hna.py b/resources/recipes/hna.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_hna.py rename to resources/recipes/hna.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_honoluluadvertiser.py b/resources/recipes/honoluluadvertiser.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_honoluluadvertiser.py rename to resources/recipes/honoluluadvertiser.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_honvedelem.py b/resources/recipes/honvedelem.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_honvedelem.py rename to resources/recipes/honvedelem.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_hrt.py b/resources/recipes/hrt.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_hrt.py rename to resources/recipes/hrt.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_huntechnet.py b/resources/recipes/huntechnet.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_huntechnet.py rename to resources/recipes/huntechnet.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_iht.py b/resources/recipes/iht.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_iht.py rename to resources/recipes/iht.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_index_hu.py b/resources/recipes/index_hu.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_index_hu.py rename to resources/recipes/index_hu.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_indy_star.py b/resources/recipes/indy_star.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_indy_star.py rename to resources/recipes/indy_star.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_infobae.py b/resources/recipes/infobae.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_infobae.py rename to resources/recipes/infobae.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_infoworld.py b/resources/recipes/infoworld.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_infoworld.py rename to resources/recipes/infoworld.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_inquirer_net.py b/resources/recipes/inquirer_net.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_inquirer_net.py rename to resources/recipes/inquirer_net.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_instapaper.py b/resources/recipes/instapaper.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_instapaper.py rename to resources/recipes/instapaper.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_intelligencer.py b/resources/recipes/intelligencer.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_intelligencer.py rename to resources/recipes/intelligencer.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_irish_times.py b/resources/recipes/irish_times.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_irish_times.py rename to resources/recipes/irish_times.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_japan_times.py b/resources/recipes/japan_times.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_japan_times.py rename to resources/recipes/japan_times.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_javalobby.py b/resources/recipes/javalobby.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_javalobby.py rename to resources/recipes/javalobby.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_jb_online.py b/resources/recipes/jb_online.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_jb_online.py rename to resources/recipes/jb_online.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_joelonsoftware.py b/resources/recipes/joelonsoftware.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_joelonsoftware.py rename to resources/recipes/joelonsoftware.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_jpost.py b/resources/recipes/jpost.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_jpost.py rename to resources/recipes/jpost.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_jutarnji.py b/resources/recipes/jutarnji.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_jutarnji.py rename to resources/recipes/jutarnji.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_juventudrebelde.py b/resources/recipes/juventudrebelde.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_juventudrebelde.py rename to resources/recipes/juventudrebelde.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_juventudrebelde_english.py b/resources/recipes/juventudrebelde_english.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_juventudrebelde_english.py rename to resources/recipes/juventudrebelde_english.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_kellog_faculty.py b/resources/recipes/kellog_faculty.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_kellog_faculty.py rename to resources/recipes/kellog_faculty.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_kellog_insight.py b/resources/recipes/kellog_insight.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_kellog_insight.py rename to resources/recipes/kellog_insight.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_krstarica.py b/resources/recipes/krstarica.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_krstarica.py rename to resources/recipes/krstarica.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_krstarica_en.py b/resources/recipes/krstarica_en.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_krstarica_en.py rename to resources/recipes/krstarica_en.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_la_cuarta.py b/resources/recipes/la_cuarta.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_la_cuarta.py rename to resources/recipes/la_cuarta.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_la_republica.py b/resources/recipes/la_republica.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_la_republica.py rename to resources/recipes/la_republica.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_la_segunda.py b/resources/recipes/la_segunda.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_la_segunda.py rename to resources/recipes/la_segunda.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_la_tercera.py b/resources/recipes/la_tercera.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_la_tercera.py rename to resources/recipes/la_tercera.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_lamujerdemivida.py b/resources/recipes/lamujerdemivida.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_lamujerdemivida.py rename to resources/recipes/lamujerdemivida.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_lanacion.py b/resources/recipes/lanacion.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_lanacion.py rename to resources/recipes/lanacion.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_lanacion_chile.py b/resources/recipes/lanacion_chile.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_lanacion_chile.py rename to resources/recipes/lanacion_chile.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_laprensa.py b/resources/recipes/laprensa.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_laprensa.py rename to resources/recipes/laprensa.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_laprensa_hn.py b/resources/recipes/laprensa_hn.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_laprensa_hn.py rename to resources/recipes/laprensa_hn.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_laprensa_ni.py b/resources/recipes/laprensa_ni.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_laprensa_ni.py rename to resources/recipes/laprensa_ni.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_latimes.py b/resources/recipes/latimes.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_latimes.py rename to resources/recipes/latimes.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_latribuna.py b/resources/recipes/latribuna.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_latribuna.py rename to resources/recipes/latribuna.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_lavanguardia.py b/resources/recipes/lavanguardia.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_lavanguardia.py rename to resources/recipes/lavanguardia.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_le_monde.py b/resources/recipes/le_monde.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_le_monde.py rename to resources/recipes/le_monde.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_le_temps.py b/resources/recipes/le_temps.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_le_temps.py rename to resources/recipes/le_temps.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_lemonde_dip.py b/resources/recipes/lemonde_dip.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_lemonde_dip.py rename to resources/recipes/lemonde_dip.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_liberation.py b/resources/recipes/liberation.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_liberation.py rename to resources/recipes/liberation.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_linux_magazine.py b/resources/recipes/linux_magazine.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_linux_magazine.py rename to resources/recipes/linux_magazine.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_linuxdevices.py b/resources/recipes/linuxdevices.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_linuxdevices.py rename to resources/recipes/linuxdevices.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_livemint.py b/resources/recipes/livemint.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_livemint.py rename to resources/recipes/livemint.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_lrb.py b/resources/recipes/lrb.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_lrb.py rename to resources/recipes/lrb.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_marca.py b/resources/recipes/marca.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_marca.py rename to resources/recipes/marca.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_mediapart.py b/resources/recipes/mediapart.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_mediapart.py rename to resources/recipes/mediapart.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_miami_herald.py b/resources/recipes/miami_herald.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_miami_herald.py rename to resources/recipes/miami_herald.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_miradasalsur.py b/resources/recipes/miradasalsur.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_miradasalsur.py rename to resources/recipes/miradasalsur.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_mondedurable.py b/resources/recipes/mondedurable.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_mondedurable.py rename to resources/recipes/mondedurable.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_moneynews.py b/resources/recipes/moneynews.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_moneynews.py rename to resources/recipes/moneynews.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_monitor.py b/resources/recipes/monitor.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_monitor.py rename to resources/recipes/monitor.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_moscow_times.py b/resources/recipes/moscow_times.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_moscow_times.py rename to resources/recipes/moscow_times.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_msdnmag_en.py b/resources/recipes/msdnmag_en.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_msdnmag_en.py rename to resources/recipes/msdnmag_en.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_nacional_cro.py b/resources/recipes/nacional_cro.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_nacional_cro.py rename to resources/recipes/nacional_cro.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_nasa.py b/resources/recipes/nasa.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_nasa.py rename to resources/recipes/nasa.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_new_scientist.py b/resources/recipes/new_scientist.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_new_scientist.py rename to resources/recipes/new_scientist.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_new_york_review_of_books.py b/resources/recipes/new_york_review_of_books.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_new_york_review_of_books.py rename to resources/recipes/new_york_review_of_books.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_new_york_review_of_books_no_sub.py b/resources/recipes/new_york_review_of_books_no_sub.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_new_york_review_of_books_no_sub.py rename to resources/recipes/new_york_review_of_books_no_sub.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_new_yorker.py b/resources/recipes/new_yorker.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_new_yorker.py rename to resources/recipes/new_yorker.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_news_times.py b/resources/recipes/news_times.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_news_times.py rename to resources/recipes/news_times.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_newsweek.py b/resources/recipes/newsweek.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_newsweek.py rename to resources/recipes/newsweek.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_newsweek_argentina.py b/resources/recipes/newsweek_argentina.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_newsweek_argentina.py rename to resources/recipes/newsweek_argentina.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_nin.py b/resources/recipes/nin.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_nin.py rename to resources/recipes/nin.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_noaa.py b/resources/recipes/noaa.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_noaa.py rename to resources/recipes/noaa.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_novosti.py b/resources/recipes/novosti.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_novosti.py rename to resources/recipes/novosti.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_nspm.py b/resources/recipes/nspm.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_nspm.py rename to resources/recipes/nspm.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_nspm_int.py b/resources/recipes/nspm_int.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_nspm_int.py rename to resources/recipes/nspm_int.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_nytimes.py b/resources/recipes/nytimes.recipe similarity index 99% rename from src/calibre/web/feeds/recipes/recipe_nytimes.py rename to resources/recipes/nytimes.recipe index af78856010..8b95c8432b 100644 --- a/src/calibre/web/feeds/recipes/recipe_nytimes.py +++ b/resources/recipes/nytimes.recipe @@ -14,7 +14,7 @@ class NYTimes(BasicNewsRecipe): title = 'New York Times Top Stories' __author__ = 'GRiker' - language = _('English') + language = 'en' description = 'Top Stories from the New York Times' # List of sections typically included in Top Stories. Use a keyword from the diff --git a/src/calibre/web/feeds/recipes/recipe_nytimes_sub.py b/resources/recipes/nytimes_sub.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_nytimes_sub.py rename to resources/recipes/nytimes_sub.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_nzz_ger.py b/resources/recipes/nzz_ger.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_nzz_ger.py rename to resources/recipes/nzz_ger.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_o_globo.py b/resources/recipes/o_globo.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_o_globo.py rename to resources/recipes/o_globo.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_ourdailybread.py b/resources/recipes/ourdailybread.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_ourdailybread.py rename to resources/recipes/ourdailybread.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_outlook_india.py b/resources/recipes/outlook_india.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_outlook_india.py rename to resources/recipes/outlook_india.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_pagina12.py b/resources/recipes/pagina12.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_pagina12.py rename to resources/recipes/pagina12.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py b/resources/recipes/pcworld_hu.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_pcworld_hu.py rename to resources/recipes/pcworld_hu.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_pescanik.py b/resources/recipes/pescanik.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_pescanik.py rename to resources/recipes/pescanik.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_phd_comics.py b/resources/recipes/phd_comics.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_phd_comics.py rename to resources/recipes/phd_comics.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_philly.py b/resources/recipes/philly.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_philly.py rename to resources/recipes/philly.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_physics_today.py b/resources/recipes/physics_today.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_physics_today.py rename to resources/recipes/physics_today.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_physics_world.py b/resources/recipes/physics_world.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_physics_world.py rename to resources/recipes/physics_world.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_pobjeda.py b/resources/recipes/pobjeda.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_pobjeda.py rename to resources/recipes/pobjeda.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_politico.py b/resources/recipes/politico.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_politico.py rename to resources/recipes/politico.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_politika.py b/resources/recipes/politika.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_politika.py rename to resources/recipes/politika.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_portfolio.py b/resources/recipes/portfolio.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_portfolio.py rename to resources/recipes/portfolio.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_pressonline.py b/resources/recipes/pressonline.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_pressonline.py rename to resources/recipes/pressonline.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_publico.py b/resources/recipes/publico.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_publico.py rename to resources/recipes/publico.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_republika.py b/resources/recipes/republika.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_republika.py rename to resources/recipes/republika.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_reuters.py b/resources/recipes/reuters.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_reuters.py rename to resources/recipes/reuters.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_rga.py b/resources/recipes/rga.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_rga.py rename to resources/recipes/rga.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_rts.py b/resources/recipes/rts.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_rts.py rename to resources/recipes/rts.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_salon.py b/resources/recipes/salon.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_salon.py rename to resources/recipes/salon.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_san_fran_chronicle.py b/resources/recipes/san_fran_chronicle.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_san_fran_chronicle.py rename to resources/recipes/san_fran_chronicle.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_sanjosemercurynews.py b/resources/recipes/sanjosemercurynews.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_sanjosemercurynews.py rename to resources/recipes/sanjosemercurynews.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_science_aas.py b/resources/recipes/science_aas.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_science_aas.py rename to resources/recipes/science_aas.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_science_news.py b/resources/recipes/science_news.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_science_news.py rename to resources/recipes/science_news.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_sciencedaily.py b/resources/recipes/sciencedaily.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_sciencedaily.py rename to resources/recipes/sciencedaily.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_scientific_american.py b/resources/recipes/scientific_american.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_scientific_american.py rename to resources/recipes/scientific_american.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_scott_hanselman.py b/resources/recipes/scott_hanselman.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_scott_hanselman.py rename to resources/recipes/scott_hanselman.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_seattle_times.py b/resources/recipes/seattle_times.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_seattle_times.py rename to resources/recipes/seattle_times.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_security_watch.py b/resources/recipes/security_watch.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_security_watch.py rename to resources/recipes/security_watch.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_serverside.py b/resources/recipes/serverside.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_serverside.py rename to resources/recipes/serverside.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_shacknews.py b/resources/recipes/shacknews.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_shacknews.py rename to resources/recipes/shacknews.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_slashdot.py b/resources/recipes/slashdot.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_slashdot.py rename to resources/recipes/slashdot.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_slate.py b/resources/recipes/slate.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_slate.py rename to resources/recipes/slate.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_smashing.py b/resources/recipes/smashing.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_smashing.py rename to resources/recipes/smashing.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_smh.py b/resources/recipes/smh.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_smh.py rename to resources/recipes/smh.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_soldiers.py b/resources/recipes/soldiers.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_soldiers.py rename to resources/recipes/soldiers.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_spiegel_int.py b/resources/recipes/spiegel_int.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_spiegel_int.py rename to resources/recipes/spiegel_int.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_spiegelde.py b/resources/recipes/spiegelde.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_spiegelde.py rename to resources/recipes/spiegelde.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_st_petersburg_times.py b/resources/recipes/st_petersburg_times.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_st_petersburg_times.py rename to resources/recipes/st_petersburg_times.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_stackoverflow.py b/resources/recipes/stackoverflow.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_stackoverflow.py rename to resources/recipes/stackoverflow.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_starbulletin.py b/resources/recipes/starbulletin.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_starbulletin.py rename to resources/recipes/starbulletin.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_straitstimes.py b/resources/recipes/straitstimes.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_straitstimes.py rename to resources/recipes/straitstimes.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_sueddeutsche.py b/resources/recipes/sueddeutsche.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_sueddeutsche.py rename to resources/recipes/sueddeutsche.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_tanjug.py b/resources/recipes/tanjug.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_tanjug.py rename to resources/recipes/tanjug.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_telegraph_uk.py b/resources/recipes/telegraph_uk.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_telegraph_uk.py rename to resources/recipes/telegraph_uk.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_telepolis.py b/resources/recipes/telepolis.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_telepolis.py rename to resources/recipes/telepolis.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_telepolis_artikel.py b/resources/recipes/telepolis_artikel.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_telepolis_artikel.py rename to resources/recipes/telepolis_artikel.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_teleread.py b/resources/recipes/teleread.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_teleread.py rename to resources/recipes/teleread.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_the_age.py b/resources/recipes/the_age.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_the_age.py rename to resources/recipes/the_age.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_the_budget_fashionista.py b/resources/recipes/the_budget_fashionista.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_the_budget_fashionista.py rename to resources/recipes/the_budget_fashionista.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_the_nation.py b/resources/recipes/the_nation.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_the_nation.py rename to resources/recipes/the_nation.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_the_new_republic.py b/resources/recipes/the_new_republic.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_the_new_republic.py rename to resources/recipes/the_new_republic.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_the_oz.py b/resources/recipes/the_oz.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_the_oz.py rename to resources/recipes/the_oz.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_the_register.py b/resources/recipes/the_register.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_the_register.py rename to resources/recipes/the_register.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_the_scotsman.py b/resources/recipes/the_scotsman.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_the_scotsman.py rename to resources/recipes/the_scotsman.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_thedgesingapore.py b/resources/recipes/thedgesingapore.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_thedgesingapore.py rename to resources/recipes/thedgesingapore.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_theeconomictimes_india.py b/resources/recipes/theeconomictimes_india.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_theeconomictimes_india.py rename to resources/recipes/theeconomictimes_india.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_themarketticker.py b/resources/recipes/themarketticker.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_themarketticker.py rename to resources/recipes/themarketticker.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_theoldfoodie.py b/resources/recipes/theoldfoodie.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_theoldfoodie.py rename to resources/recipes/theoldfoodie.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_theonion.py b/resources/recipes/theonion.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_theonion.py rename to resources/recipes/theonion.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_thestar.py b/resources/recipes/thestar.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_thestar.py rename to resources/recipes/thestar.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_tijd.py b/resources/recipes/tijd.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_tijd.py rename to resources/recipes/tijd.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_time_magazine.py b/resources/recipes/time_magazine.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_time_magazine.py rename to resources/recipes/time_magazine.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_times_online.py b/resources/recipes/times_online.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_times_online.py rename to resources/recipes/times_online.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_tnxm.py b/resources/recipes/tnxm.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_tnxm.py rename to resources/recipes/tnxm.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_tomshardware.py b/resources/recipes/tomshardware.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_tomshardware.py rename to resources/recipes/tomshardware.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_tomshardware_de.py b/resources/recipes/tomshardware_de.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_tomshardware_de.py rename to resources/recipes/tomshardware_de.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_toronto_sun.py b/resources/recipes/toronto_sun.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_toronto_sun.py rename to resources/recipes/toronto_sun.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_tweakers.py b/resources/recipes/tweakers.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_tweakers.py rename to resources/recipes/tweakers.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_twitchfilms.py b/resources/recipes/twitchfilms.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_twitchfilms.py rename to resources/recipes/twitchfilms.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_uncrate.py b/resources/recipes/uncrate.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_uncrate.py rename to resources/recipes/uncrate.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_upi.py b/resources/recipes/upi.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_upi.py rename to resources/recipes/upi.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_usatoday.py b/resources/recipes/usatoday.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_usatoday.py rename to resources/recipes/usatoday.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_usnews.py b/resources/recipes/usnews.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_usnews.py rename to resources/recipes/usnews.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_utne.py b/resources/recipes/utne.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_utne.py rename to resources/recipes/utne.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_vecernji_list.py b/resources/recipes/vecernji_list.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_vecernji_list.py rename to resources/recipes/vecernji_list.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_veintitres.py b/resources/recipes/veintitres.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_veintitres.py rename to resources/recipes/veintitres.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_vijesti.py b/resources/recipes/vijesti.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_vijesti.py rename to resources/recipes/vijesti.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_vnexpress.py b/resources/recipes/vnexpress.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_vnexpress.py rename to resources/recipes/vnexpress.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_volksrant.py b/resources/recipes/volksrant.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_volksrant.py rename to resources/recipes/volksrant.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_vreme.py b/resources/recipes/vreme.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_vreme.py rename to resources/recipes/vreme.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_wash_post.py b/resources/recipes/wash_post.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_wash_post.py rename to resources/recipes/wash_post.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_wikinews_en.py b/resources/recipes/wikinews_en.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_wikinews_en.py rename to resources/recipes/wikinews_en.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_winsupersite.py b/resources/recipes/winsupersite.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_winsupersite.py rename to resources/recipes/winsupersite.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_wired.py b/resources/recipes/wired.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_wired.py rename to resources/recipes/wired.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_woz_die.py b/resources/recipes/woz_die.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_woz_die.py rename to resources/recipes/woz_die.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_wsj.py b/resources/recipes/wsj.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_wsj.py rename to resources/recipes/wsj.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_xkcd.py b/resources/recipes/xkcd.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_xkcd.py rename to resources/recipes/xkcd.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_zaobao.py b/resources/recipes/zaobao.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_zaobao.py rename to resources/recipes/zaobao.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_zdnet.py b/resources/recipes/zdnet.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_zdnet.py rename to resources/recipes/zdnet.recipe diff --git a/src/calibre/web/feeds/recipes/recipe_zeitde.py b/resources/recipes/zeitde.recipe similarity index 100% rename from src/calibre/web/feeds/recipes/recipe_zeitde.py rename to resources/recipes/zeitde.recipe diff --git a/setup/check.py b/setup/check.py index 14992b1628..86df693b68 100644 --- a/setup/check.py +++ b/setup/check.py @@ -42,26 +42,38 @@ class Check(Command): BUILTINS = ['_', '__', 'dynamic_property', 'I', 'P'] CACHE = '.check-cache.pickle' + def get_files(self, cache): + for x in os.walk(self.j(self.SRC, 'calibre')): + for f in x[-1]: + y = self.j(x[0], f) + mtime = os.stat(y).st_mtime + if f.endswith('.py') and f not in ('ptempfile.py', 'feedparser.py', + 'pyparsing.py', 'markdown.py') and \ + 'genshi' not in y and cache.get(y, 0) != mtime and \ + 'prs500/driver.py' not in y: + yield y, mtime + + for x in os.walk(self.j(self.d(self.SRC), 'resources', 'recipes')): + for f in x[-1]: + f = self.j(x[0], f) + mtime = os.stat(f).st_mtime + if f.endswith('.recipe') and cache.get(f, 0) != mtime: + yield f, mtime + + def run(self, opts): cache = {} if os.path.exists(self.CACHE): cache = cPickle.load(open(self.CACHE, 'rb')) - for x in os.walk(self.j(self.SRC, 'calibre')): - for f in x[-1]: - f = self.j(x[0], f) - mtime = os.stat(f).st_mtime - if f.endswith('.py') and cache.get(f, 0) != mtime and \ - self.b(f) not in ('ptempfile.py', 'feedparser.py', - 'pyparsing.py', 'markdown.py') and 'genshi' not in f and \ - 'prs500/driver.py' not in f: - self.info('\tChecking', f) - w = check_for_python_errors(f, self.BUILTINS) - if w: - self.report_errors(w) - cPickle.dump(cache, open(self.CACHE, 'wb'), -1) - subprocess.call(['gvim', '-f', f]) - raise SystemExit(1) - cache[f] = mtime + for f, mtime in self.get_files(cache): + self.info('\tChecking', f) + w = check_for_python_errors(f, self.BUILTINS) + if w: + self.report_errors(w) + cPickle.dump(cache, open(self.CACHE, 'wb'), -1) + subprocess.call(['gvim', '-f', f]) + raise SystemExit(1) + cache[f] = mtime cPickle.dump(cache, open(self.CACHE, 'wb'), -1) diff --git a/setup/resources.py b/setup/resources.py index 253876989e..d40d31bbf5 100644 --- a/setup/resources.py +++ b/setup/resources.py @@ -26,17 +26,6 @@ class Resources(Command): description = 'Compile various needed calibre resources' - def get_recipes(self): - sdir = os.path.join('src', 'calibre', 'web', 'feeds', 'recipes') - resources= {} - files = [] - for f in os.listdir(sdir): - if f.endswith('.py') and f != '__init__.py': - files.append(os.path.join(sdir, f)) - resources[f.replace('.py', '')] = open(files[-1], 'rb').read() - return resources, files - - def run(self, opts): scripts = {} for x in ('console', 'gui'): @@ -51,13 +40,15 @@ class Resources(Command): f = open(dest, 'wb') cPickle.dump(scripts, f, -1) - recipes, files = self.get_recipes() + from calibre.web.feeds.recipes.collection import \ + serialize_builtin_recipes, iterate_over_builtin_recipe_files - dest = self.j(self.RESOURCES, 'recipes.pickle') + files = [x[1] for x in iterate_over_builtin_recipe_files()] + + dest = self.j(self.RESOURCES, 'builtin_recipes.xml') if self.newer(dest, files): - self.info('\tCreating recipes.pickle') - f = open(dest, 'wb') - cPickle.dump(recipes, f, -1) + self.info('\tCreating builtin_recipes.xml') + open(dest, 'wb').write(serialize_builtin_recipes()) dest = self.j(self.RESOURCES, 'ebook-convert-complete.pickle') files = [] @@ -70,8 +61,9 @@ class Resources(Command): complete = {} from calibre.ebooks.conversion.plumber import supported_input_formats complete['input_fmts'] = set(supported_input_formats()) - from calibre.web.feeds.recipes import recipes - complete['input_recipes'] = [t.title+'.recipe ' for t in recipes] + from calibre.web.feeds.recipes.collection import get_builtin_recipe_titles + complete['input_recipes'] = [t+'.recipe ' for t in + get_builtin_recipe_titles()] from calibre.customize.ui import available_output_formats complete['output'] = set(available_output_formats()) from calibre.ebooks.conversion.cli import create_option_parser @@ -90,9 +82,6 @@ class Resources(Command): cPickle.dump(complete, open(dest, 'wb'), -1) - - - def clean(self): for x in ('scripts', 'recipes', 'ebook-convert-complete'): x = self.j(self.RESOURCES, x+'.pickle') diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index 32f7a32efa..426f4da50b 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -396,7 +396,8 @@ class FileDialog(QObject): if filters: for filter in filters: text, extensions = filter - extensions = ['*.'+i if not i.startswith('.') else i for i in extensions] + extensions = ['*'+(i if i.startswith('.') else '.'+i) for i in + extensions] ftext += '%s (%s);;'%(text, ' '.join(extensions)) if add_all_files_filter or not ftext: ftext += 'All files (*)' diff --git a/src/calibre/gui2/dialogs/scheduler.py b/src/calibre/gui2/dialogs/scheduler.py index 878bdf3c25..79fe926909 100644 --- a/src/calibre/gui2/dialogs/scheduler.py +++ b/src/calibre/gui2/dialogs/scheduler.py @@ -7,417 +7,188 @@ __docformat__ = 'restructuredtext en' Scheduler for automated recipe downloads ''' -import sys, copy, time -from datetime import datetime, timedelta, date -from PyQt4.Qt import QDialog, QApplication, SIGNAL, \ - QColor, QAbstractItemModel, Qt, QVariant, QFont, QIcon, \ - QFile, QObject, QTimer, QMutex, QMenu, QAction, QTime, QModelIndex +from datetime import datetime, timedelta + +from PyQt4.Qt import QDialog, QApplication, SIGNAL, Qt, QTime, QObject, QMenu, \ + QAction, QIcon, QMutex, QTimer -from calibre import english_sort from calibre.gui2.dialogs.scheduler_ui import Ui_Dialog from calibre.gui2.search_box import SearchBox2 -from calibre.web.feeds.recipes import recipes, recipe_modules, compile_recipe -from calibre.utils.search_query_parser import SearchQueryParser -from calibre.utils.pyparsing import ParseException -from calibre.utils.localization import get_language -from calibre.gui2 import NONE, error_dialog, config as gconf -from calibre.utils.config import DynamicConfig +from calibre.gui2 import config as gconf +from calibre.web.feeds.recipes.model import RecipeModel from calibre.ptempfile import PersistentTemporaryFile -from calibre.gui2.dialogs.user_profiles import UserProfiles - -config = DynamicConfig('scheduler') - -class Recipe(object): - - def __init__(self, id=None, recipe_class=None, builtin=True): - self.id = id - self.title = getattr(recipe_class, 'title', None) - self.description = getattr(recipe_class, 'description', None) - self.language = getattr(recipe_class, 'language', 'und') - self.last_downloaded = datetime.fromordinal(1) - self.downloading = False - self.builtin = builtin - self.schedule = None - self.author = getattr(recipe_class, '__author__', _('Unknown')) - if self.author == _('Unknown') and not builtin: - self.author = _('You') - self.needs_subscription = getattr(recipe_class, 'needs_subscription', False) - - def pickle(self): - return self.__dict__.copy() - - def unpickle(self, dict): - self.__dict__.update(dict) - return self - - def __cmp__(self, other): - if self.id == getattr(other, 'id', None): - return 0 - if self.schedule is None and getattr(other, 'schedule', None) is not None: - return 1 - if self.schedule is not None and getattr(other, 'schedule', None) is None: - return -1 - if self.builtin and not getattr(other, 'builtin', True): - return 1 - if not self.builtin and getattr(other, 'builtin', True): - return -1 - return english_sort(self.title, getattr(other, 'title', '')) - - def __hash__(self): - return hash(self.id) - - def __eq__(self, other): - return self.id == getattr(other, 'id', None) - - def __repr__(self): - schedule = self.schedule - if schedule and schedule > 1e5: - schedule = decode_schedule(schedule) - return u'%s|%s|%s|%s'%(self.id, self.title, self.last_downloaded.ctime(), schedule) - -builtin_recipes = [Recipe(m, r, True) for r, m in zip(recipes, recipe_modules)] - -def save_recipes(recipes): - config['scheduled_recipes'] = [r.pickle() for r in recipes] - -def load_recipes(): - config.refresh() - recipes = [] - for r in config.get('scheduled_recipes', []): - r = Recipe().unpickle(r) - if r.builtin and \ - (not str(r.id).startswith('recipe_') or not str(r.id) in recipe_modules): - continue - recipes.append(r) - return recipes - -class RecipeModel(QAbstractItemModel, SearchQueryParser): - - LOCATIONS = ['all'] - - def __init__(self, db, *args): - QAbstractItemModel.__init__(self, *args) - SearchQueryParser.__init__(self) - self.default_icon = QIcon(I('news.svg')) - self.custom_icon = QIcon(I('user_profile.svg')) - self.recipes = copy.deepcopy(builtin_recipes) - for x in db.get_recipes(): - recipe = compile_recipe(x[1]) - self.recipes.append(Recipe(x[0], recipe, False)) - self.refresh() - self.bold_font = QFont() - self.bold_font.setBold(True) - self.bold_font = QVariant(self.bold_font) - - - def refresh(self): - sr = load_recipes() - for recipe in self.recipes: - if recipe in sr: - recipe.schedule = sr[sr.index(recipe)].schedule - recipe.last_downloaded = sr[sr.index(recipe)].last_downloaded - - self.recipes.sort() - self.num_of_recipes = len(self.recipes) - - self.category_map = {} - for r in self.recipes: - category = get_language(getattr(r, 'language', 'und')) - if not r.builtin: - category = _('Custom') - if r.schedule is not None: - category = _('Scheduled') - if category not in self.category_map.keys(): - self.category_map[category] = [] - self.category_map[category].append(r) - - self.categories = sorted(self.category_map.keys(), cmp=self.sort_categories) - self._map = dict(self.category_map) - - def scheduled_recipes(self): - for recipe in self.category_map.get(_('Scheduled'), []): - yield recipe - - def sort_categories(self, x, y): - - def decorate(x): - if x == _('Scheduled'): - x = '0' + x - elif x == _('Custom'): - x = '1' + x - else: - x = '2' + x - return x - - return cmp(decorate(x), decorate(y)) - - - def universal_set(self): - return set(self.recipes) - - def get_matches(self, location, query): - query = query.strip().lower() - if not query: - return set(self.recipes) - results = set([]) - for recipe in self.recipes: - if query in recipe.title.lower() or query in recipe.description.lower(): - results.add(recipe) - return results - - def search(self, query, refinement): - try: - results = self.parse(unicode(query)) - except ParseException: - self._map = dict(self.category_map) - else: - self._map = {} - for category in self.categories: - self._map[category] = [] - for recipe in self.category_map[category]: - if recipe in results: - self._map[category].append(recipe) - self.reset() - self.emit(SIGNAL('searched(PyQt_PyObject)'), True) - - def resort(self): - self.recipes.sort() - self.reset() - - def index(self, row, column, parent): - return self.createIndex(row, column, parent.row()+1 if parent.isValid() else 0) - - def parent(self, index): - if index.internalId() == 0: - return QModelIndex() - return self.createIndex(index.internalId()-1, 0, 0) - - def columnCount(self, parent): - if not parent.isValid() or not parent.parent().isValid(): - return 1 - return 0 - - def rowCount(self, parent): - if not parent.isValid(): - return len(self.categories) - if not parent.parent().isValid(): - category = self.categories[parent.row()] - return len(self._map[category]) - return 0 - - def data(self, index, role): - if index.parent().isValid(): - category = self.categories[index.parent().row()] - recipe = self._map[category][index.row()] - if role == Qt.DisplayRole: - return QVariant(recipe.title) - elif role == Qt.UserRole: - return recipe - elif role == Qt.DecorationRole: - icon = self.default_icon - icon_path = (I('news/%s.png')%recipe.id).replace('recipe_', '') - if not recipe.builtin: - icon = self.custom_icon - elif QFile().exists(icon_path): - icon = QIcon(icon_path) - return QVariant(icon) - else: - category = self.categories[index.row()] - if role == Qt.DisplayRole: - num = len(self._map[category]) - return QVariant(category + ' [%d]'%num) - elif role == Qt.FontRole: - return self.bold_font - elif role == Qt.ForegroundRole and category == _('Scheduled'): - return QVariant(QColor(0, 255, 0)) - return NONE - - def update_recipe_schedule(self, recipe): - for srecipe in self.recipes: - if srecipe == recipe: - srecipe.schedule = recipe.schedule - - -def encode_schedule(day, hour, minute): - day = 1e7 * (day+1) - hour = 1e4 * (hour+1) - return day + hour + minute + 1 - -def decode_schedule(num): - raw = '%d'%int(num) - day = int(raw[0]) - hour = int(raw[2:4]) - minute = int(raw[-2:]) - return day-1, hour-1, minute-1 class SchedulerDialog(QDialog, Ui_Dialog): - def __init__(self, db, *args): - QDialog.__init__(self, *args) + def __init__(self, recipe_model, parent=None): + QDialog.__init__(self, parent) self.setupUi(self) + self.recipe_model = recipe_model + self.recipe_model.do_refresh() + self.search = SearchBox2(self) self.search.initialize('scheduler_search_history') self.recipe_box.layout().insertWidget(0, self.search) + self.connect(self.search, SIGNAL('search(PyQt_PyObject,PyQt_PyObject)'), + self.recipe_model.search) + self.connect(self.recipe_model, SIGNAL('searched(PyQt_PyObject)'), + self.search.search_done) + self.connect(self.recipe_model, SIGNAL('searched(PyQt_PyObject)'), + self.search_done) + self.search.setFocus(Qt.OtherFocusReason) + + self.recipes.setModel(self.recipe_model) self.detail_box.setVisible(False) - self._model = RecipeModel(db) - self.current_recipe = None - self.recipes.setModel(self._model) - self.recipes.currentChanged = self.currentChanged - self.connect(self.username, SIGNAL('textEdited(QString)'), self.set_account_info) - self.connect(self.password, SIGNAL('textEdited(QString)'), self.set_account_info) - self.connect(self.schedule, SIGNAL('stateChanged(int)'), self.do_schedule) + self.download_button.setVisible(False) + self.recipes.currentChanged = self.current_changed + self.interval_button.setChecked(True) + + self.connect(self.schedule, SIGNAL('stateChanged(int)'), + self.toggle_schedule_info) self.connect(self.show_password, SIGNAL('stateChanged(int)'), lambda state: self.password.setEchoMode(self.password.Normal if state == Qt.Checked else self.password.Password)) - self.connect(self.interval, SIGNAL('valueChanged(double)'), self.do_schedule) - self.connect(self.day, SIGNAL('currentIndexChanged(int)'), self.do_schedule) - self.connect(self.time, SIGNAL('timeChanged(QTime)'), self.do_schedule) - for button in (self.daily_button, self.interval_button): - self.connect(button, SIGNAL('toggled(bool)'), self.do_schedule) - self.connect(self.search, SIGNAL('search(PyQt_PyObject,PyQt_PyObject)'), self._model.search) - self.connect(self._model, SIGNAL('searched(PyQt_PyObject)'), - self.search.search_done) - self.connect(self._model, SIGNAL('modelReset()'), lambda : self.detail_box.setVisible(False)) + self.connect(self.download_button, SIGNAL('clicked()'), + self.download_clicked) self.connect(self.download_all_button, SIGNAL('clicked()'), - self.download_all) - self.connect(self.download, SIGNAL('clicked()'), self.download_now) - self.search.setFocus(Qt.OtherFocusReason) + self.download_all_clicked) + self.old_news.setValue(gconf['oldest_news']) - self.rnumber.setText(_('%d recipes')%self._model.num_of_recipes) - for day in (_('day'), _('Monday'), _('Tuesday'), _('Wednesday'), - _('Thursday'), _('Friday'), _('Saturday'), _('Sunday')): - self.day.addItem(day) - def currentChanged(self, current, previous): - if current.parent().isValid(): - self.show_recipe(current) + def break_cycles(self): + self.recipe_model = None - def download_all(self, *args): - for recipe in self._model.scheduled_recipes(): - self.emit(SIGNAL('download_now(PyQt_PyObject)'), recipe) + def search_done(self, *args): + if self.recipe_model.showing_count < 10: + self.recipes.expandAll() - def download_now(self): - recipe = self._model.data(self.recipes.currentIndex(), Qt.UserRole) - self.emit(SIGNAL('download_now(PyQt_PyObject)'), recipe) + def toggle_schedule_info(self, *args): + enabled = self.schedule.isChecked() + for x in ('daily_button', 'day', 'time', 'interval_button', 'interval'): + getattr(self, x).setEnabled(enabled) + self.last_downloaded.setVisible(enabled) - def set_account_info(self, *args): - username, password = map(unicode, (self.username.text(), self.password.text())) - username, password = username.strip(), password.strip() - recipe = self._model.data(self.recipes.currentIndex(), Qt.UserRole) - key = 'recipe_account_info_%s'%recipe.id - config[key] = (username, password) if username else None + def current_changed(self, current, previous): + if previous.isValid(): + self.commit(urn=getattr(previous.internalPointer(), 'urn', None)) - def do_schedule(self, *args): - if not getattr(self, 'allow_scheduling', False): + urn = self.current_urn + if urn is not None: + self.initialize_detail_box(urn) + + def accept(self): + self.commit() + return QDialog.accept(self) + + def download_clicked(self): + self.commit() + if self.current_urn: + self.emit(SIGNAL('download(PyQt_PyObject)'), self.current_urn) + + def download_all_clicked(self): + self.commit() + self.emit(SIGNAL('download(PyQt_PyObject)'), None) + + @property + def current_urn(self): + current = self.recipes.currentIndex() + if current.isValid(): + return getattr(current.internalPointer(), 'urn', None) + + def commit(self, urn=None): + urn = self.current_urn if urn is None else urn + if not self.detail_box.isVisible() or urn is None: return - recipe = self.recipes.currentIndex() - if not recipe.isValid(): - return - recipe = self._model.data(recipe, Qt.UserRole) - recipes = load_recipes() - if self.schedule.checkState() == Qt.Checked: - if recipe in recipes: - recipe = recipes[recipes.index(recipe)] - else: - recipe.last_downloaded = datetime.fromordinal(1) - recipes.append(recipe) - if recipe.needs_subscription and not config['recipe_account_info_%s'%recipe.id]: - error_dialog(self, _('Must set account information'), - _('This recipe requires a username and password')).exec_() - self.schedule.setCheckState(Qt.Unchecked) - return - if self.interval_button.isChecked(): - recipe.schedule = self.interval.value() - if recipe.schedule < 0.1: - recipe.schedule = 1/24. + + if self.account.isVisible(): + un, pw = map(unicode, (self.username.text(), self.password.text())) + self.recipe_model.set_account_info(urn, un.strip(), pw.strip()) + + if self.schedule.isChecked(): + schedule_type = 'interval' if self.interval_button.isChecked() else 'day/time' + if schedule_type == 'interval': + schedule = self.interval.value() + if schedule < 0.1: + schedule = 1./24. else: day_of_week = self.day.currentIndex() - 1 - if day_of_week < 0: - day_of_week = 7 t = self.time.time() hour, minute = t.hour(), t.minute() - recipe.schedule = encode_schedule(day_of_week, hour, minute) + schedule = (day_of_week, hour, minute) + self.recipe_model.schedule_recipe(urn, schedule_type, schedule) else: - recipe.schedule = None - if recipe in recipes: - recipes.remove(recipe) - save_recipes(recipes) - self._model.update_recipe_schedule(recipe) - self.emit(SIGNAL('new_schedule(PyQt_PyObject)'), recipes) + self.recipe_model.un_schedule_recipe(urn) + + add_title_tag = self.add_title_tag.isChecked() + custom_tags = unicode(self.custom_tags.text()).strip() + custom_tags = [x.strip() for x in custom_tags.split(',')] + self.recipe_model.customize_recipe(urn, add_title_tag, custom_tags) + + def initialize_detail_box(self, urn): + self.detail_box.setVisible(True) + self.download_button.setVisible(True) + self.detail_box.setCurrentIndex(0) + recipe = self.recipe_model.recipe_from_urn(urn) + schedule_info = self.recipe_model.schedule_info_from_urn(urn) + account_info = self.recipe_model.account_info_from_urn(urn) + customize_info = self.recipe_model.get_customize_info(urn) + + self.account.setVisible(recipe.get('needs_subscription', '') == 'yes') + un = pw = '' + if account_info is not None: + un, pw = account_info[:2] + if not un: un = '' + if not pw: pw = '' + self.username.setText(un) + self.password.setText(pw) + self.show_password.setChecked(False) - def show_recipe(self, index): - recipe = self._model.data(index, Qt.UserRole) - self.current_recipe = recipe self.blurb.setText('''
%(title)s
%(cb)s %(author)s
%(description)s
Could not create recipe. Error:
%s')%str(err)).exec_()
return
profile = src.replace('BasicUserRecipe', 'AdvancedUserRecipe')
- try:
- self.available_profiles.add_item(title, (title, profile), replace=False)
- except ValueError:
+ if self._model.has_title(title):
if question_dialog(self, _('Replace recipe?'),
_('A custom recipe named %s already exists. Do you want to '
'replace it?')%title):
- self.available_profiles.add_item(title, (title, profile), replace=True)
+ self._model.replace_by_title(title, profile)
else:
return
+ else:
+ self.model.add(title, profile)
self.clear()
def add_builtin_recipe(self):
- from calibre.web.feeds.recipes import recipes, recipe_modules, english_sort
- from PyQt4.Qt import QInputDialog
+ from calibre.web.feeds.recipes.collection import \
+ get_builtin_recipe_by_title, get_builtin_recipe_titles
+ items = get_builtin_recipe_titles()
- rdat = cPickle.load(open(P('recipes.pickle'), 'rb'))
- class Recipe(object):
- def __init__(self, title, id, recipes):
- self.title = unicode(title)
- self.id = id
- self.text = recipes[id]
- def __cmp__(self, other):
- return english_sort(self.title, other.title)
-
- recipes = sorted([Recipe(r.title, i, rdat) for r, i in zip(recipes, recipe_modules)])
- items = [r.title for r in recipes]
title, ok = QInputDialog.getItem(self, _('Pick recipe'), _('Pick the recipe to customize'),
items, 0, False)
if ok:
title = unicode(title)
- for r in recipes:
- if r.title == title:
- try:
- self.available_profiles.add_item(title, (title, r.text), replace=False)
- except ValueError:
- if question_dialog(self, _('Replace recipe?'),
- _('A custom recipe named %s already exists. Do you '
- 'want to replace it?')%title):
- self.available_profiles.add_item(title, (title, r.text), replace=True)
- else:
- return
- self.clear()
- break
+ profile = get_builtin_recipe_by_title(title)
+ if self._model.has_title(title):
+ if question_dialog(self, _('Replace recipe?'),
+ _('A custom recipe named %s already exists. Do you want to '
+ 'replace it?')%title):
+ self._model.replace_by_title(title, profile)
+ else:
+ return
+ else:
+ self.model.add(title, profile)
+
+ self.clear()
def load(self):
- files = choose_files(self, 'recipe loader dialog', _('Choose a recipe file'), filters=[(_('Recipes'), '*.py')], all_files=False, select_only_single_file=True)
+ files = choose_files(self, 'recipe loader dialog',
+ _('Choose a recipe file'),
+ filters=[(_('Recipes'), ['.py', '.recipe'])],
+ all_files=False, select_only_single_file=True)
if files:
file = files[0]
try:
- src = open(file, 'rb').read().decode('utf-8')
- title = compile_recipe(src).title
+ profile = open(file, 'rb').read().decode('utf-8')
+ title = compile_recipe(profile).title
except Exception, err:
error_dialog(self, _('Invalid input'),
_('
Could not create recipe. Error:
%s')%str(err)).exec_()
return
- try:
- self.available_profiles.add_item(title, (title, src), replace=False)
- except ValueError:
+ if self._model.has_title(title):
if question_dialog(self, _('Replace recipe?'),
_('A custom recipe named %s already exists. Do you want to '
'replace it?')%title):
- self.available_profiles.add_item(title, (title, src), replace=True)
+ self._model.replace_by_title(title, profile)
else:
return
+ else:
+ self.model.add(title, profile)
self.clear()
def populate_options(self, profile):
@@ -256,8 +313,11 @@ class %(classname)s(%(base_class)s):
self.populate_options(AutomaticNewsRecipe)
self.source_code.setText('')
- def profiles(self):
- for i in self.available_profiles.items():
- yield i.user_data
-
+if __name__ == '__main__':
+ from PyQt4.Qt import QApplication
+ QApplication([])
+ from calibre.library.database2 import LibraryDatabase2
+ from calibre.web.feeds.recipes.model import RecipeModel
+ d=UserProfiles(None, RecipeModel(LibraryDatabase2('/home/kovid/documents/library')))
+ d.exec_()
diff --git a/src/calibre/gui2/dialogs/user_profiles.ui b/src/calibre/gui2/dialogs/user_profiles.ui
index 64b6d10123..48f92a108c 100644
--- a/src/calibre/gui2/dialogs/user_profiles.ui
+++ b/src/calibre/gui2/dialogs/user_profiles.ui
@@ -34,8 +34,8 @@