From 7f90441a22d7cd35132429d975557ad799875cb5 Mon Sep 17 00:00:00 2001 From: kiwi Date: Thu, 17 May 2007 14:21:29 +0000 Subject: [PATCH] Fixes, support more feeds, display parse errors ... Note : ATOM feeds do NOT work for the moment ! Please report to ooookiwi@gmail.com if you have RSS feeds that doesnt not work If you have feeds that you want to see in the default configuration, you can send me an email too. I want News to have many feeds, in many different languages by default. * [parse] handle feeds with no title / no date / no link / no description * [parse] fix parse with rss version 0.91 * [dialog] feed: fix select default language * [viewer] better display of feeds with no date / no description * [viewer] simple click on content opens browser, and show a message 'click here to open in browser' * [viewer] display if there where errors during parse, and where to report, or if the feed is ATOM and not supported yet SVN revision: 30009 --- ABOUT-NLS | 768 ++++++++++++++++++++++++++ README | 2 +- TODO | 5 +- autogen.sh | 1 + src/module/e_mod_main.c | 2 +- src/module/news_config_dialog_feed.c | 2 + src/module/news_config_dialog_langs.c | 7 +- src/module/news_feed.c | 36 +- src/module/news_feed.h | 7 +- src/module/news_menu.c | 2 - src/module/news_parse.c | 1 + src/module/news_parse_rss.c | 133 +++-- src/module/news_viewer.c | 51 +- 13 files changed, 899 insertions(+), 118 deletions(-) diff --git a/ABOUT-NLS b/ABOUT-NLS index e69de29..2f50c66 100644 --- a/ABOUT-NLS +++ b/ABOUT-NLS @@ -0,0 +1,768 @@ +Notes on the Free Translation Project +************************************* + +Free software is going international! The Free Translation Project is +a way to get maintainers of free software, translators, and users all +together, so that will gradually become able to speak many languages. +A few packages already provide translations for their messages. + + If you found this `ABOUT-NLS' file inside a distribution, you may +assume that the distributed package does use GNU `gettext' internally, +itself available at your nearest GNU archive site. But you do _not_ +need to install GNU `gettext' prior to configuring, installing or using +this package with messages translated. + + Installers will find here some useful hints. These notes also +explain how users should proceed for getting the programs to use the +available translations. They tell how people wanting to contribute and +work at translations should contact the appropriate team. + + When reporting bugs in the `intl/' directory or bugs which may be +related to internationalization, you should tell about the version of +`gettext' which is used. The information can be found in the +`intl/VERSION' file, in internationalized packages. + +Quick configuration advice +========================== + +If you want to exploit the full power of internationalization, you +should configure it using + + ./configure --with-included-gettext + +to force usage of internationalizing routines provided within this +package, despite the existence of internationalizing capabilities in the +operating system where this package is being installed. So far, only +the `gettext' implementation in the GNU C library version 2 provides as +many features (such as locale alias, message inheritance, automatic +charset conversion or plural form handling) as the implementation here. +It is also not possible to offer this additional functionality on top +of a `catgets' implementation. Future versions of GNU `gettext' will +very likely convey even more functionality. So it might be a good idea +to change to GNU `gettext' as soon as possible. + + So you need _not_ provide this option if you are using GNU libc 2 or +you have installed a recent copy of the GNU gettext package with the +included `libintl'. + +INSTALL Matters +=============== + +Some packages are "localizable" when properly installed; the programs +they contain can be made to speak your own native language. Most such +packages use GNU `gettext'. Other packages have their own ways to +internationalization, predating GNU `gettext'. + + By default, this package will be installed to allow translation of +messages. It will automatically detect whether the system already +provides the GNU `gettext' functions. If not, the GNU `gettext' own +library will be used. This library is wholly contained within this +package, usually in the `intl/' subdirectory, so prior installation of +the GNU `gettext' package is _not_ required. Installers may use +special options at configuration time for changing the default +behaviour. The commands: + + ./configure --with-included-gettext + ./configure --disable-nls + +will respectively bypass any pre-existing `gettext' to use the +internationalizing routines provided within this package, or else, +_totally_ disable translation of messages. + + When you already have GNU `gettext' installed on your system and run +configure without an option for your new package, `configure' will +probably detect the previously built and installed `libintl.a' file and +will decide to use this. This might be not what is desirable. You +should use the more recent version of the GNU `gettext' library. I.e. +if the file `intl/VERSION' shows that the library which comes with this +package is more recent, you should use + + ./configure --with-included-gettext + +to prevent auto-detection. + + The configuration process will not test for the `catgets' function +and therefore it will not be used. The reason is that even an +emulation of `gettext' on top of `catgets' could not provide all the +extensions of the GNU `gettext' library. + + Internationalized packages have usually many `po/LL.po' files, where +LL gives an ISO 639 two-letter code identifying the language. Unless +translations have been forbidden at `configure' time by using the +`--disable-nls' switch, all available translations are installed +together with the package. However, the environment variable `LINGUAS' +may be set, prior to configuration, to limit the installed set. +`LINGUAS' should then contain a space separated list of two-letter +codes, stating which languages are allowed. + +Using This Package +================== + +As a user, if your language has been installed for this package, you +only have to set the `LANG' environment variable to the appropriate +`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code, +and `CC' is an ISO 3166 two-letter country code. For example, let's +suppose that you speak German and live in Germany. At the shell +prompt, merely execute `setenv LANG de_DE' (in `csh'), +`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). +This can be done from your `.login' or `.profile' file, once and for +all. + + You might think that the country code specification is redundant. +But in fact, some languages have dialects in different countries. For +example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The +country code serves to distinguish the dialects. + + The locale naming convention of `LL_CC', with `LL' denoting the +language and `CC' denoting the country, is the one use on systems based +on GNU libc. On other systems, some variations of this scheme are +used, such as `LL' or `LL_CC.ENCODING'. You can get the list of +locales supported by your system for your country by running the command +`locale -a | grep '^LL''. + + Not all programs have translations for all languages. By default, an +English message is shown in place of a nonexistent translation. If you +understand other languages, you can set up a priority list of languages. +This is done through a different environment variable, called +`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' +for the purpose of message handling, but you still need to have `LANG' +set to the primary language; this is required by other parts of the +system libraries. For example, some Swedish users who would rather +read translations in German than English for when Swedish is not +available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. + + Special advice for Norwegian users: The language code for Norwegian +bokma*l changed from `no' to `nb' recently (in 2003). During the +transition period, while some message catalogs for this language are +installed under `nb' and some older ones under `no', it's recommended +for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and +older translations are used. + + In the `LANGUAGE' environment variable, but not in the `LANG' +environment variable, `LL_CC' combinations can be abbreviated as `LL' +to denote the language's main dialect. For example, `de' is equivalent +to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' +(Portuguese as spoken in Portugal) in this context. + +Translating Teams +================= + +For the Free Translation Project to be a success, we need interested +people who like their own language and write it well, and who are also +able to synergize with other translators speaking the same language. +Each translation team has its own mailing list. The up-to-date list of +teams can be found at the Free Translation Project's homepage, +`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams" +area. + + If you'd like to volunteer to _work_ at translating messages, you +should become a member of the translating team for your own language. +The subscribing address is _not_ the same as the list itself, it has +`-request' appended. For example, speakers of Swedish can send a +message to `sv-request@li.org', having this message body: + + subscribe + + Keep in mind that team members are expected to participate +_actively_ in translations, or at solving translational difficulties, +rather than merely lurking around. If your team does not exist yet and +you want to start one, or if you are unsure about what to do or how to +get started, please write to `translation@iro.umontreal.ca' to reach the +coordinator for all translator teams. + + The English team is special. It works at improving and uniformizing +the terminology in use. Proven linguistic skill are praised more than +programming skill, here. + +Available Packages +================== + +Languages are not equally supported in all packages. The following +matrix shows the current state of internationalization, as of January +2004. The matrix shows, in regard of each package, for which languages +PO files have been submitted to translation coordination, with a +translation percentage of at least 50%. + + Ready PO files af am ar az be bg bs ca cs da de el en en_GB eo es + +----------------------------------------------------+ + a2ps | [] [] [] [] | + aegis | () | + ant-phone | () | + anubis | | + ap-utils | | + aspell | [] | + bash | [] [] [] [] | + batchelor | | + bfd | [] [] | + binutils | [] [] | + bison | [] [] [] | + bluez-pin | [] [] [] | + clisp | | + clisp | [] [] [] | + console-tools | [] [] | + coreutils | [] [] [] [] | + cpio | [] [] [] | + darkstat | [] () [] | + diffutils | [] [] [] [] [] [] [] | + e2fsprogs | [] [] [] | + enscript | [] [] [] [] | + error | [] [] [] [] [] | + fetchmail | [] () [] [] [] [] | + fileutils | [] [] [] | + findutils | [] [] [] [] [] [] [] | + flex | [] [] [] [] | + fslint | | + gas | [] | + gawk | [] [] [] [] | + gbiff | [] | + gcal | [] | + gcc | [] [] | + gettext | [] [] [] [] [] | + gettext-examples | [] [] [] [] | + gettext-runtime | [] [] [] [] [] | + gettext-tools | [] [] [] | + gimp-print | [] [] [] [] [] | + gliv | | + glunarclock | [] [] | + gnubiff | [] | + gnucash | [] () [] [] | + gnucash-glossary | [] () [] | + gnupg | [] () [] [] [] [] | + gpe-aerial | [] | + gpe-beam | [] [] | + gpe-calendar | [] [] | + gpe-clock | [] [] | + gpe-conf | [] [] | + gpe-contacts | [] [] | + gpe-edit | [] | + gpe-go | [] | + gpe-login | [] [] | + gpe-ownerinfo | [] [] | + gpe-sketchbook | [] [] | + gpe-su | [] [] | + gpe-taskmanager | [] [] | + gpe-timesheet | [] | + gpe-today | [] [] | + gpe-todo | [] [] | + gphoto2 | [] [] [] [] | + gprof | [] [] [] | + gpsdrive | () () () | + gramadoir | [] | + grep | [] [] [] [] [] [] | + gretl | [] | + gtick | [] () | + hello | [] [] [] [] [] [] | + id-utils | [] [] | + indent | [] [] [] [] | + iso_3166 | [] [] [] [] [] [] [] [] [] [] | + iso_3166_1 | [] [] [] [] [] [] | + iso_3166_2 | | + iso_3166_3 | [] | + iso_4217 | [] [] [] [] | + iso_639 | | + jpilot | [] [] [] | + jtag | | + jwhois | [] | + kbd | [] [] [] [] [] | + latrine | () | + ld | [] [] | + libc | [] [] [] [] [] [] | + libgpewidget | [] [] | + libiconv | [] [] [] [] [] | + lifelines | [] () | + lilypond | [] | + lingoteach | | + lingoteach_lessons | () () | + lynx | [] [] [] [] | + m4 | [] [] [] [] | + mailutils | [] [] | + make | [] [] [] | + man-db | [] () [] [] () | + minicom | [] [] [] | + mysecretdiary | [] [] [] | + nano | [] () [] [] [] | + nano_1_0 | [] () [] [] [] | + opcodes | [] | + parted | [] [] [] [] [] | + ptx | [] [] [] [] [] | + python | | + radius | [] | + recode | [] [] [] [] [] [] [] | + rpm | [] [] | + screem | | + scrollkeeper | [] [] [] [] [] [] | + sed | [] [] [] [] [] [] | + sh-utils | [] [] [] | + shared-mime-info | | + sharutils | [] [] [] [] [] [] | + silky | () | + skencil | [] () [] | + sketch | [] () [] | + soundtracker | [] [] [] | + sp | [] | + tar | [] [] [] [] | + texinfo | [] [] [] | + textutils | [] [] [] [] | + tin | () () | + tp-robot | | + tuxpaint | [] [] [] [] [] [] [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux | [] [] [] [] [] | + vorbis-tools | [] [] [] [] | + wastesedge | () | + wdiff | [] [] [] [] | + wget | [] [] [] [] [] [] | + xchat | [] [] [] [] | + xfree86_xkb_xml | [] [] | + xpad | [] | + +----------------------------------------------------+ + af am ar az be bg bs ca cs da de el en en_GB eo es + 4 0 0 1 9 4 1 40 41 60 78 17 1 5 13 68 + + et eu fa fi fr ga gl he hr hu id is it ja ko lg + +-------------------------------------------------+ + a2ps | [] [] [] () () | + aegis | | + ant-phone | [] | + anubis | [] | + ap-utils | [] | + aspell | [] [] | + bash | [] [] | + batchelor | [] [] | + bfd | [] | + binutils | [] [] | + bison | [] [] [] [] | + bluez-pin | [] [] [] [] [] | + clisp | | + clisp | [] | + console-tools | | + coreutils | [] [] [] [] [] [] | + cpio | [] [] [] [] | + darkstat | () [] [] [] | + diffutils | [] [] [] [] [] [] [] | + e2fsprogs | | + enscript | [] [] | + error | [] [] [] [] | + fetchmail | [] | + fileutils | [] [] [] [] [] [] | + findutils | [] [] [] [] [] [] [] [] [] [] [] | + flex | [] [] [] | + fslint | [] | + gas | [] | + gawk | [] [] [] | + gbiff | [] | + gcal | [] | + gcc | [] | + gettext | [] [] [] | + gettext-examples | [] [] | + gettext-runtime | [] [] [] [] [] | + gettext-tools | [] [] [] | + gimp-print | [] [] | + gliv | () | + glunarclock | [] [] [] [] | + gnubiff | [] | + gnucash | () [] | + gnucash-glossary | [] | + gnupg | [] [] [] [] [] [] [] | + gpe-aerial | [] | + gpe-beam | [] | + gpe-calendar | [] [] [] | + gpe-clock | [] | + gpe-conf | [] | + gpe-contacts | [] [] | + gpe-edit | [] [] | + gpe-go | [] | + gpe-login | [] [] | + gpe-ownerinfo | [] [] [] | + gpe-sketchbook | [] | + gpe-su | [] | + gpe-taskmanager | [] | + gpe-timesheet | [] [] [] | + gpe-today | [] [] | + gpe-todo | [] [] | + gphoto2 | [] [] [] | + gprof | [] [] | + gpsdrive | () () () | + gramadoir | [] [] | + grep | [] [] [] [] [] [] [] [] [] [] [] | + gretl | [] [] | + gtick | [] [] [] | + hello | [] [] [] [] [] [] [] [] [] [] [] [] [] | + id-utils | [] [] [] [] | + indent | [] [] [] [] [] [] [] [] [] | + iso_3166 | [] [] [] [] [] [] [] | + iso_3166_1 | [] [] [] [] [] | + iso_3166_2 | | + iso_3166_3 | | + iso_4217 | [] [] [] [] [] [] | + iso_639 | | + jpilot | [] () | + jtag | [] | + jwhois | [] [] [] [] | + kbd | [] | + latrine | [] | + ld | [] | + libc | [] [] [] [] [] [] | + libgpewidget | [] [] [] [] | + libiconv | [] [] [] [] [] [] [] [] [] | + lifelines | () | + lilypond | [] | + lingoteach | [] [] | + lingoteach_lessons | | + lynx | [] [] [] [] | + m4 | [] [] [] [] | + mailutils | | + make | [] [] [] [] [] [] | + man-db | () () | + minicom | [] [] [] [] | + mysecretdiary | [] [] | + nano | [] [] [] [] | + nano_1_0 | [] [] [] [] | + opcodes | [] | + parted | [] [] [] | + ptx | [] [] [] [] [] [] [] | + python | | + radius | [] | + recode | [] [] [] [] [] [] | + rpm | [] [] | + screem | | + scrollkeeper | [] | + sed | [] [] [] [] [] [] [] [] [] | + sh-utils | [] [] [] [] [] [] [] | + shared-mime-info | [] [] [] | + sharutils | [] [] [] [] [] | + silky | () [] () () | + skencil | [] | + sketch | [] | + soundtracker | [] [] | + sp | [] () | + tar | [] [] [] [] [] [] [] [] [] | + texinfo | [] [] [] [] | + textutils | [] [] [] [] [] [] | + tin | [] () | + tp-robot | [] | + tuxpaint | [] [] [] [] [] [] [] [] [] | + unicode-han-tra... | | + unicode-transla... | [] [] | + util-linux | [] [] [] [] () [] | + vorbis-tools | [] | + wastesedge | () | + wdiff | [] [] [] [] [] [] | + wget | [] [] [] [] [] [] [] | + xchat | [] [] [] | + xfree86_xkb_xml | [] [] | + xpad | [] [] | + +-------------------------------------------------+ + et eu fa fi fr ga gl he hr hu id is it ja ko lg + 22 2 1 26 106 28 24 8 10 41 33 1 26 33 12 0 + + lt lv mk mn ms mt nb nl nn no nso pl pt pt_BR ro ru + +-----------------------------------------------------+ + a2ps | [] [] () () [] [] [] | + aegis | () () () | + ant-phone | [] [] | + anubis | [] [] [] [] [] [] | + ap-utils | [] () [] | + aspell | [] | + bash | [] [] [] | + batchelor | [] | + bfd | [] | + binutils | [] | + bison | [] [] [] [] [] | + bluez-pin | [] [] [] | + clisp | | + clisp | [] | + console-tools | [] | + coreutils | [] [] | + cpio | [] [] [] [] [] | + darkstat | [] [] [] [] | + diffutils | [] [] [] [] [] [] | + e2fsprogs | [] | + enscript | [] [] [] [] | + error | [] [] [] | + fetchmail | [] [] () [] | + fileutils | [] [] [] | + findutils | [] [] [] [] [] | + flex | [] [] [] [] | + fslint | [] [] | + gas | | + gawk | [] [] [] | + gbiff | [] [] | + gcal | | + gcc | | + gettext | [] [] [] | + gettext-examples | [] [] [] | + gettext-runtime | [] [] [] [] | + gettext-tools | [] [] | + gimp-print | [] | + gliv | [] [] [] | + glunarclock | [] [] [] [] | + gnubiff | [] | + gnucash | [] [] () [] | + gnucash-glossary | [] [] | + gnupg | [] | + gpe-aerial | [] [] [] [] | + gpe-beam | [] [] [] [] | + gpe-calendar | [] [] [] [] | + gpe-clock | [] [] [] [] | + gpe-conf | [] [] [] [] | + gpe-contacts | [] [] [] [] | + gpe-edit | [] [] [] [] | + gpe-go | [] [] [] | + gpe-login | [] [] [] [] | + gpe-ownerinfo | [] [] [] [] | + gpe-sketchbook | [] [] [] [] | + gpe-su | [] [] [] [] | + gpe-taskmanager | [] [] [] [] | + gpe-timesheet | [] [] [] [] | + gpe-today | [] [] [] [] | + gpe-todo | [] [] [] [] | + gphoto2 | [] | + gprof | [] [] | + gpsdrive | () () [] | + gramadoir | () [] | + grep | [] [] [] [] [] | + gretl | | + gtick | [] [] [] | + hello | [] [] [] [] [] [] [] [] [] [] | + id-utils | [] [] [] [] | + indent | [] [] [] [] | + iso_3166 | [] [] [] | + iso_3166_1 | [] [] | + iso_3166_2 | | + iso_3166_3 | [] | + iso_4217 | [] [] [] [] [] [] [] [] | + iso_639 | [] | + jpilot | () () | + jtag | | + jwhois | [] [] [] [] () | + kbd | [] [] [] | + latrine | [] | + ld | | + libc | [] [] [] [] | + libgpewidget | [] [] [] | + libiconv | [] [] [] [] [] | + lifelines | | + lilypond | | + lingoteach | | + lingoteach_lessons | | + lynx | [] [] [] | + m4 | [] [] [] [] [] | + mailutils | [] [] [] | + make | [] [] [] [] | + man-db | [] | + minicom | [] [] [] [] | + mysecretdiary | [] [] [] | + nano | [] [] [] [] [] | + nano_1_0 | [] [] [] [] [] [] | + opcodes | [] [] | + parted | [] [] [] [] | + ptx | [] [] [] [] [] [] [] [] | + python | | + radius | [] [] | + recode | [] [] [] [] | + rpm | [] [] [] | + screem | | + scrollkeeper | [] [] [] [] [] | + sed | [] [] [] | + sh-utils | [] [] | + shared-mime-info | [] [] | + sharutils | [] [] | + silky | () | + skencil | [] [] | + sketch | [] [] | + soundtracker | | + sp | | + tar | [] [] [] [] [] [] | + texinfo | [] [] [] [] | + textutils | [] [] | + tin | | + tp-robot | [] | + tuxpaint | [] [] [] [] [] [] [] [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux | [] [] [] | + vorbis-tools | [] [] [] | + wastesedge | | + wdiff | [] [] [] [] [] | + wget | [] [] [] | + xchat | [] [] [] | + xfree86_xkb_xml | [] [] | + xpad | [] [] | + +-----------------------------------------------------+ + lt lv mk mn ms mt nb nl nn no nso pl pt pt_BR ro ru + 1 2 0 3 12 0 10 69 6 7 1 40 26 36 76 63 + + sk sl sr sv ta th tr uk ven vi wa xh zh_CN zh_TW zu + +-----------------------------------------------------+ + a2ps | [] [] [] [] | 16 + aegis | | 0 + ant-phone | | 3 + anubis | [] [] | 9 + ap-utils | () | 3 + aspell | | 4 + bash | | 9 + batchelor | | 3 + bfd | [] [] | 6 + binutils | [] [] [] | 8 + bison | [] [] | 14 + bluez-pin | [] [] [] | 14 + clisp | | 0 + clisp | | 5 + console-tools | | 3 + coreutils | [] [] [] [] | 16 + cpio | [] [] | 14 + darkstat | [] [] [] () () | 12 + diffutils | [] [] [] | 23 + e2fsprogs | [] [] | 6 + enscript | [] [] | 12 + error | [] [] [] | 15 + fetchmail | [] [] | 11 + fileutils | [] [] [] [] [] | 17 + findutils | [] [] [] [] [] [] | 29 + flex | [] [] | 13 + fslint | | 3 + gas | [] | 3 + gawk | [] [] | 12 + gbiff | | 4 + gcal | [] [] | 4 + gcc | [] | 4 + gettext | [] [] [] [] [] | 16 + gettext-examples | [] [] [] [] [] | 14 + gettext-runtime | [] [] [] [] [] [] [] [] | 22 + gettext-tools | [] [] [] [] [] [] | 14 + gimp-print | [] [] | 10 + gliv | | 3 + glunarclock | [] [] [] | 13 + gnubiff | | 3 + gnucash | [] [] | 9 + gnucash-glossary | [] [] [] | 8 + gnupg | [] [] [] [] | 17 + gpe-aerial | [] | 7 + gpe-beam | [] | 8 + gpe-calendar | [] [] [] [] | 13 + gpe-clock | [] [] [] | 10 + gpe-conf | [] [] | 9 + gpe-contacts | [] [] [] | 11 + gpe-edit | [] [] [] [] [] | 12 + gpe-go | | 5 + gpe-login | [] [] [] [] [] | 13 + gpe-ownerinfo | [] [] [] [] | 13 + gpe-sketchbook | [] [] | 9 + gpe-su | [] [] [] | 10 + gpe-taskmanager | [] [] [] | 10 + gpe-timesheet | [] [] [] [] | 12 + gpe-today | [] [] [] [] [] | 13 + gpe-todo | [] [] [] [] | 12 + gphoto2 | [] [] [] | 11 + gprof | [] [] | 9 + gpsdrive | [] [] | 3 + gramadoir | [] | 5 + grep | [] [] [] [] | 26 + gretl | | 3 + gtick | | 7 + hello | [] [] [] [] [] | 34 + id-utils | [] [] | 12 + indent | [] [] [] [] | 21 + iso_3166 | [] [] [] [] [] [] [] | 27 + iso_3166_1 | [] [] [] | 16 + iso_3166_2 | | 0 + iso_3166_3 | | 2 + iso_4217 | [] [] [] [] [] [] | 24 + iso_639 | | 1 + jpilot | [] [] [] [] [] | 9 + jtag | [] | 2 + jwhois | () [] [] | 11 + kbd | [] [] | 11 + latrine | | 2 + ld | [] [] | 5 + libc | [] [] [] [] | 20 + libgpewidget | [] [] [] [] | 13 + libiconv | [] [] [] [] [] [] [] [] | 27 + lifelines | [] | 2 + lilypond | [] | 3 + lingoteach | | 2 + lingoteach_lessons | () | 0 + lynx | [] [] [] | 14 + m4 | [] [] | 15 + mailutils | | 5 + make | [] [] [] | 16 + man-db | [] | 5 + minicom | | 11 + mysecretdiary | [] [] | 10 + nano | [] [] [] [] | 17 + nano_1_0 | [] [] [] | 17 + opcodes | [] [] | 6 + parted | [] [] [] | 15 + ptx | [] [] | 22 + python | | 0 + radius | | 4 + recode | [] [] [] | 20 + rpm | [] [] | 9 + screem | [] [] | 2 + scrollkeeper | [] [] [] | 15 + sed | [] [] [] [] [] [] | 24 + sh-utils | [] [] | 14 + shared-mime-info | [] [] | 7 + sharutils | [] [] [] [] | 17 + silky | () | 3 + skencil | [] | 6 + sketch | [] | 6 + soundtracker | [] [] | 7 + sp | [] | 3 + tar | [] [] [] [] [] | 24 + texinfo | [] [] [] | 14 + textutils | [] [] [] [] | 16 + tin | | 1 + tp-robot | | 2 + tuxpaint | [] [] [] [] [] | 29 + unicode-han-tra... | | 0 + unicode-transla... | | 2 + util-linux | [] [] | 15 + vorbis-tools | | 8 + wastesedge | | 0 + wdiff | [] [] [] | 18 + wget | [] [] [] [] [] [] [] [] | 24 + xchat | [] [] [] [] [] | 15 + xfree86_xkb_xml | [] [] [] [] [] | 11 + xpad | | 5 + +-----------------------------------------------------+ + 63 teams sk sl sr sv ta th tr uk ven vi wa xh zh_CN zh_TW zu + 131 domains 47 19 28 83 0 0 59 13 1 1 11 0 22 22 0 1373 + + Some counters in the preceding matrix are higher than the number of +visible blocks let us expect. This is because a few extra PO files are +used for implementing regional variants of languages, or language +dialects. + + For a PO file in the matrix above to be effective, the package to +which it applies should also have been internationalized and +distributed as such by its maintainer. There might be an observable +lag between the mere existence a PO file and its wide availability in a +distribution. + + If January 2004 seems to be old, you may fetch a more recent copy of +this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date +matrix with full percentage details can be found at +`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. + +Using `gettext' in new packages +=============================== + +If you are writing a freely available program and want to +internationalize it you are welcome to use GNU `gettext' in your +package. Of course you have to respect the GNU Library General Public +License which covers the use of the GNU `gettext' library. This means +in particular that even non-free programs can use `libintl' as a shared +library, whereas only free software can use `libintl' as a static +library or use modified versions of `libintl'. + + Once the sources are changed appropriately and the setup can handle +the use of `gettext' the only thing missing are the translations. The +Free Translation Project is also available for packages which are not +developed inside the GNU project. Therefore the information given above +applies also for every other Free Software Project. Contact +`translation@iro.umontreal.ca' to make the `.pot' files available to +the translation teams. + diff --git a/README b/README index 0553389..e957917 100644 --- a/README +++ b/README @@ -1,6 +1,6 @@ Enlightenment News Module -Module to display information feeds like Rss or Atom +Module to display information feeds like Rss (and soon Atom) on youre Enlightenment desktop enjoy =) \ No newline at end of file diff --git a/TODO b/TODO index 76ec0dc..5b9080c 100644 --- a/TODO +++ b/TODO @@ -8,6 +8,9 @@ BUGS NEEDED (to do more or less in this order) ---------------------------------------------------- + - parse html chars (in _item_clean ?) + - atom feeds + - feed icons (new file ?) Evas_Object *news_feed_icon_add(News_Feed *feed) void news_feed_icon_del(Evas_Object *obj) @@ -42,9 +45,9 @@ to avoid refresh the ilist --- [Parse] - - parse html chars (in _item_clean ?) - reparse infos every time, if changes ... ? - handle the fact that sometimes we loose feeds (connection timeout ...) so sometimes, keep feeds that are READ, to avoid having feeds marked as unread, but wich where read before +detect when there are less articles then the time before ? if its the case, keep read articles ? -> compare description of feed just parsed with suspect precedent one its not that slow (use memcmp, keep description_size) diff --git a/autogen.sh b/autogen.sh index 51fe4f5..732afcf 100755 --- a/autogen.sh +++ b/autogen.sh @@ -8,6 +8,7 @@ rm -Rf aclocal.m4 autom4te.cache/ ltmain.sh config.log config.status config.cac src/Makefile src/Makefile.in \ src/module/Makefile src/module/Makefile.in +echo "Running autopoint..." ; autopoint -f || : echo "Running aclocal..." ; aclocal $ACLOCAL_FLAGS -I m4 || exit 1 echo "Running autoheader..." ; autoheader || exit 1 echo "Running autoconf..." ; autoconf || exit 1 diff --git a/src/module/e_mod_main.c b/src/module/e_mod_main.c index d9d20e6..500a392 100644 --- a/src/module/e_mod_main.c +++ b/src/module/e_mod_main.c @@ -104,7 +104,7 @@ EAPI int e_modapi_about(E_Module *m) { news_util_message_show(_("Module to display information feeds
" - "like Rss or Atom, on youre desktop

" + "like Rss (and soon Atom), on youre desktop

" "ooookiwi@gmail.com
" "http://oooo.zapto.org")); return 1; diff --git a/src/module/news_config_dialog_feed.c b/src/module/news_config_dialog_feed.c index 722b747..3cceb49 100644 --- a/src/module/news_config_dialog_feed.c +++ b/src/module/news_config_dialog_feed.c @@ -204,6 +204,8 @@ news_config_dialog_feed_refresh_langs(News_Feed *feed) e_widget_ilist_selected_set(ilist, pos_to_select); else e_widget_ilist_selected_set(ilist, 0); + _cb_lang_change(cfdata, NULL); + e_widget_min_size_get(ilist, &w, NULL); e_widget_min_size_set(ilist, w, 110); diff --git a/src/module/news_config_dialog_langs.c b/src/module/news_config_dialog_langs.c index 1808d37..204703e 100644 --- a/src/module/news_config_dialog_langs.c +++ b/src/module/news_config_dialog_langs.c @@ -1,5 +1,7 @@ #include "News.h" +#define DIALOG_CLASS "_e_mod_news_config_dialog_langs" + struct _Lang_Choice { News_Feed_Lang *lang; @@ -30,6 +32,9 @@ news_config_dialog_langs_show(void) E_Config_Dialog *cfd; E_Config_Dialog_View *v; + if (e_config_dialog_find("E", DIALOG_CLASS)) + return 0; + v = E_NEW(E_Config_Dialog_View, 1); v->create_cfdata = _create_data; @@ -38,7 +43,7 @@ news_config_dialog_langs_show(void) cfd = e_config_dialog_new(e_container_current_get(e_manager_current_get()), _("News Feeds Language Configuration"), - "E", "_e_mod_news_config_dialog_langs", + "E", DIALOG_CLASS, news->theme, 0, v, NULL); return 1; } diff --git a/src/module/news_feed.c b/src/module/news_feed.c index 00b47bc..258c107 100644 --- a/src/module/news_feed.c +++ b/src/module/news_feed.c @@ -300,10 +300,10 @@ news_feed_edit(News_Feed *f, char *name, int name_ovrw, char *language, int lang if ( f2 && (f != f2) ) { news_util_message_error_show(_("A feed with the name %s already exists
" - "in the %s category

" - "Its not possible to have feeds with the same name
" + "in the %s category

" + "Its not possible to have feeds with the same name
" "in one category."), - f->name, f->category->name); + name, category->name); return 0; } if (!language || !language[0]) @@ -1081,21 +1081,15 @@ _feed_category_find(char *name) static char * _get_host_from_url(const char *url) { - char *host; - char *tmp, *p; + char *host, *p; + char buf[4096]; - if (strncmp(url, "http://", 7)) + strncpy(buf, url, sizeof(buf)); + if (strncmp(buf, "http://", 7)) return NULL; - tmp = strdup(url + 7); - p = strchr(tmp, '/'); - if (!p) - { - free(tmp); - return NULL; - } - *p = '\0'; - host = strdup(tmp); - free(tmp); + p = strchr(buf+7, '/'); + if (p) *p = '\0'; + host = strdup(buf+7); return host; } @@ -1103,8 +1097,7 @@ _get_host_from_url(const char *url) static char * _get_file_from_url(const char *url) { - char *file; - char *p; + char *file, *p; p = strstr(url, "://"); if (!p) @@ -1112,9 +1105,9 @@ _get_file_from_url(const char *url) p += 3; p = strstr(p, "/"); if (!p) - return NULL; - - file = strdup(p); + file = strdup("/"); + else + file = strdup(p); return file; } @@ -1307,6 +1300,7 @@ _cb_feed_parse(News_Feed_Document *doc, News_Parse_Error error, int changes) doc->parse.last_time = ecore_time_get(); //TODO with popups + doc->parse.error = error; switch(error) { case NEWS_PARSE_ERROR_NO: diff --git a/src/module/news_feed.h b/src/module/news_feed.h index 7deb1c2..bda40a2 100644 --- a/src/module/news_feed.h +++ b/src/module/news_feed.h @@ -279,9 +279,10 @@ struct _News_Feed_Document const char *meta_date; const char *charset; - News_Parse *parser; - int got_infos : 1; - time_t last_time; + News_Parse *parser; + int got_infos : 1; + time_t last_time; + News_Parse_Error error; } parse; }; diff --git a/src/module/news_menu.c b/src/module/news_menu.c index a04aa13..3dca0da 100644 --- a/src/module/news_menu.c +++ b/src/module/news_menu.c @@ -207,7 +207,6 @@ static void _cb_configure_main(void *data, E_Menu *m, E_Menu_Item *mi) { if (!news) return; - if (news->config_dialog) return; news_config_dialog_show(); } @@ -216,7 +215,6 @@ static void _cb_configure_feeds(void *data, E_Menu *m, E_Menu_Item *mi) { if (!news) return; - if (news->config_dialog_feeds) return; news_config_dialog_feeds_show(); } diff --git a/src/module/news_parse.c b/src/module/news_parse.c index 99e3c59..61fa2db 100644 --- a/src/module/news_parse.c +++ b/src/module/news_parse.c @@ -284,6 +284,7 @@ _parse_type(News_Feed_Document *doc) { doc->parse.type = NEWS_FEED_TYPE_ATOM; doc->parse.version = 1.0; + return 1; } doc->parse.type = NEWS_FEED_TYPE_UNKNOWN; diff --git a/src/module/news_parse_rss.c b/src/module/news_parse_rss.c index f890535..d41dca7 100644 --- a/src/module/news_parse_rss.c +++ b/src/module/news_parse_rss.c @@ -42,6 +42,8 @@ _idler(void *data) parser = data; + //DD(("%d", parser->oc.action)); + switch(parser->oc.action) { case NEWS_PARSE_OC_DETECT_METAS: @@ -101,7 +103,7 @@ _idler(void *data) } /* error returned */ - if (err) + if (err) //FIXME: != NEWS_PARSE_ERROR_TYPE_NO { parser->error = err; parser->oc.action = NEWS_PARSE_OC_END; @@ -142,7 +144,7 @@ _parse_detect_metas(News_Parse *parser) { News_Feed *feed; News_Feed_Document *doc; - int ver; + float ver; doc = parser->doc; feed = doc->feed; @@ -334,20 +336,18 @@ _parse_item_title(News_Parse *parser) pos = parser->buffer_pos; p1 = strstr(pos, "pos_end) + if (p1 && (p1 < art->pos_end)) { + p2 = news_parse_meta_block_find(&p1); + if (!p2 || (p2 > art->pos_end)) + return NEWS_PARSE_ERROR_BROKEN_FEED; len = p2 - p1; art->title = E_NEW(char, len+1); memcpy(art->title, p1, len); art->title[len] = '\0'; } else - { - art->title = strdup("No title"); - } + art->title = strdup("No title"); return NEWS_PARSE_ERROR_NO; } @@ -365,52 +365,53 @@ _parse_item_date(News_Parse *parser) pos = parser->buffer_pos; p1 = strstr(pos, parser->doc->parse.meta_date); - p2 = news_parse_meta_block_find(&p1); - if (!p2) return NEWS_PARSE_ERROR_BROKEN_FEED; - if (p2 >= art->pos_end) return NEWS_PARSE_ERROR_BROKEN_FEED; - - len = p2 - p1; - date = p1; - tm = &art->date; - DD(("DATE LEN %d", len)); - - if ((parser->doc->parse.version == 1.0) && - (len >= 22)) + if (p1 && (p1 < art->pos_end)) { - sscanf(date, "%4d", &i); - tm->tm_year = i - 1900; - sscanf(date+5, "%2d", &tm->tm_mon); - tm->tm_mon--; /* tm works with 0-11 */ - sscanf(date+8, "%2d", &tm->tm_mday); - sscanf(date+11, "%2d", &tm->tm_hour); - sscanf(date+14, "%2d", &tm->tm_min); - if (date[16] == ':') /* seconds are precised ? */ - sscanf(date+17, "%2d", &tm->tm_sec); - else - tm->tm_sec = 0; - DD(("DATE seconds %d", tm->tm_sec)); - } - else if (len >= 25) - { - sscanf(date+5, "%2d", &tm->tm_mday); - if (!strncmp(date+8, "Jan", 3)) tm->tm_mon = 0; - else if (!strncmp(date+8, "Feb", 3)) tm->tm_mon = 1; - else if (!strncmp(date+8, "Mar", 3)) tm->tm_mon = 2; - else if (!strncmp(date+8, "Apr", 3)) tm->tm_mon = 3; - else if (!strncmp(date+8, "May", 3)) tm->tm_mon = 4; - else if (!strncmp(date+8, "Jun", 3)) tm->tm_mon = 5; - else if (!strncmp(date+8, "Jul", 3)) tm->tm_mon = 6; - else if (!strncmp(date+8, "Aug", 3)) tm->tm_mon = 7; - else if (!strncmp(date+8, "Sep", 3)) tm->tm_mon = 8; - else if (!strncmp(date+8, "Oct", 3)) tm->tm_mon = 9; - else if (!strncmp(date+8, "Nov", 3)) tm->tm_mon = 10; - else if (!strncmp(date+8, "Dec", 3)) tm->tm_mon = 11; - else tm->tm_mon = 0; - sscanf(date+12, "%4d", &i); - tm->tm_year = i - 1900; - sscanf(date+17, "%2d", &tm->tm_hour); - sscanf(date+20, "%2d", &tm->tm_min); - sscanf(date+23, "%2d", &tm->tm_sec); + p2 = news_parse_meta_block_find(&p1); + if (!p2 || p2 > art->pos_end) + return NEWS_PARSE_ERROR_BROKEN_FEED; + + len = p2 - p1; + date = p1; + tm = &art->date; + + if ((parser->doc->parse.version == 1.0) && + (len >= 22)) + { + sscanf(date, "%4d", &i); + tm->tm_year = i - 1900; + sscanf(date+5, "%2d", &tm->tm_mon); + tm->tm_mon--; /* tm works with 0-11 */ + sscanf(date+8, "%2d", &tm->tm_mday); + sscanf(date+11, "%2d", &tm->tm_hour); + sscanf(date+14, "%2d", &tm->tm_min); + if (date[16] == ':') /* seconds are precised ? */ + sscanf(date+17, "%2d", &tm->tm_sec); + else + tm->tm_sec = 0; + } + else if (len >= 25) + { + sscanf(date+5, "%2d", &tm->tm_mday); + if (!strncmp(date+8, "Jan", 3)) tm->tm_mon = 0; + else if (!strncmp(date+8, "Feb", 3)) tm->tm_mon = 1; + else if (!strncmp(date+8, "Mar", 3)) tm->tm_mon = 2; + else if (!strncmp(date+8, "Apr", 3)) tm->tm_mon = 3; + else if (!strncmp(date+8, "May", 3)) tm->tm_mon = 4; + else if (!strncmp(date+8, "Jun", 3)) tm->tm_mon = 5; + else if (!strncmp(date+8, "Jul", 3)) tm->tm_mon = 6; + else if (!strncmp(date+8, "Aug", 3)) tm->tm_mon = 7; + else if (!strncmp(date+8, "Sep", 3)) tm->tm_mon = 8; + else if (!strncmp(date+8, "Oct", 3)) tm->tm_mon = 9; + else if (!strncmp(date+8, "Nov", 3)) tm->tm_mon = 10; + else if (!strncmp(date+8, "Dec", 3)) tm->tm_mon = 11; + else tm->tm_mon = 0; + sscanf(date+12, "%4d", &i); + tm->tm_year = i - 1900; + sscanf(date+17, "%2d", &tm->tm_hour); + sscanf(date+20, "%2d", &tm->tm_min); + sscanf(date+23, "%2d", &tm->tm_sec); + } } return NEWS_PARSE_ERROR_NO; @@ -436,20 +437,16 @@ _parse_item_link(News_Parse *parser) pos = parser->buffer_pos; p1 = strstr(pos, "pos_end) + if (p1 && (p1 < art->pos_end)) { + p2 = news_parse_meta_block_find(&p1); + if (!p2 || (p2 > art->pos_end)) + return NEWS_PARSE_ERROR_BROKEN_FEED; len = p2 - p1; art->url = E_NEW(char, len+1); memcpy(art->url, p1, len); art->url[len] = '\0'; } - else - { - art->url = strdup("No link"); - } return NEWS_PARSE_ERROR_NO; } @@ -466,20 +463,16 @@ _parse_item_description(News_Parse *parser) pos = parser->buffer_pos; p1 = strstr(pos, "pos_end) + if (p1 && (p1 < art->pos_end)) { + p2 = news_parse_meta_block_find(&p1); + if (!p2 || (p2 > art->pos_end)) + return NEWS_PARSE_ERROR_BROKEN_FEED; len = p2 - p1; art->description = E_NEW(char, len+1); memcpy(art->description, p1, len); art->description[len] = '\0'; } - else - { - art->description = strdup("No content"); - } return NEWS_PARSE_ERROR_NO; } diff --git a/src/module/news_viewer.c b/src/module/news_viewer.c index b0cd461..7c66a49 100644 --- a/src/module/news_viewer.c +++ b/src/module/news_viewer.c @@ -591,15 +591,18 @@ _dialog_cb_article_selected(void *data) DD(("TRIGGERED cb article ilist (%s)", art->title)); nv->varticles.selected = art; - strftime(buf_date, sizeof(buf_date), "%Y-%m-%d %H:%M:%S", &art->date); + if (art->date.tm_year != 0) + strftime(buf_date, sizeof(buf_date), "%Y-%m-%d %H:%M:%S", &art->date); snprintf(buf, sizeof(buf), "%s
" "%s

" - "%s

", + "%s

" + "%s", news->config->viewer.vcontent.font_color, (art->title && art->title[0]) ? art->title : "No title", buf_date, - (art->description && art->description[0])? art->description : "No description text"); + (art->description && art->description[0])? art->description : "No description text", + (art->url) ? "||click here to open article in a browser||" : ""); _vcontent_text_set(nv, buf); if (art->unread) @@ -747,11 +750,12 @@ _varticles_refresh(News_Viewer *nv) { News_Feed_Article *art; char label[4096]; - char buf_date[4096] = "-- --:--"; + char buf_date[4096] = ""; art = l->data; /* append the article to the article ilist */ - strftime(buf_date, sizeof(buf_date), "%d %H:%M", &art->date); + if (art->date.tm_year) + strftime(buf_date, sizeof(buf_date), "%d %H:%M", &art->date); snprintf(label, sizeof(label), "%s %s", buf_date, art->title); e_widget_ilist_append(ilist, _article_icon_get(art, evas_object_evas_get(ilist)), label, @@ -810,6 +814,7 @@ static void _vcontent_feed_infos_set(News_Viewer *nv) { News_Feed *f; + char buf_error[1024] = ""; char buf_infos[1024] = ""; char buf_conn[200] = ""; char buf_unread[1024] = "No unread articles"; @@ -821,6 +826,18 @@ _vcontent_feed_infos_set(News_Viewer *nv) if (f->doc) { + switch(f->doc->parse.error) + { + case NEWS_PARSE_ERROR_NO: + case NEWS_PARSE_ERROR_NOT_IMPLEMENTED: + break; + case NEWS_PARSE_ERROR_BROKEN_FEED: + case NEWS_PARSE_ERROR_TYPE_UNKNOWN: + snprintf(buf_error, sizeof(buf_error), + "
An error happend during the parse of this feed !
" + "You can report error at ooookiwi@gmail.com to get it fixed

"); + break; + } if (f->doc->parse.last_time) { char buf_mtime[200]; @@ -831,7 +848,7 @@ _vcontent_feed_infos_set(News_Viewer *nv) case NEWS_FEED_TYPE_RSS: type = "RSS"; break; case NEWS_FEED_TYPE_ATOM: - type = "ATOM"; break; + type = "ATOM (not supported for now)"; break; default: type = "UNKNOWN"; } @@ -865,12 +882,14 @@ _vcontent_feed_infos_set(News_Viewer *nv) } snprintf(buf, sizeof(buf), "%s in %s
" + "%s" "%s

" "%s%s
" "%s", news->config->viewer.vcontent.font_color, f->name, f->category->name, + buf_error, (f->description && f->description[0]) ? f->description : "No description for this feed", buf_infos, buf_conn, buf_unread); @@ -886,20 +905,16 @@ _vcontent_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) nv = data; ev = event_info; - if (ev->flags == EVAS_BUTTON_DOUBLE_CLICK) + if (nv->varticles.selected) { - if (nv->varticles.selected) - { - if (nv->varticles.selected->url) - news_util_browser_open(nv->varticles.selected->url); - } - else if (nv->vfeeds.selected) - { - if (nv->vfeeds.selected->url_home) - news_util_browser_open(nv->vfeeds.selected->url_home); - } + if (nv->varticles.selected->url) + news_util_browser_open(nv->varticles.selected->url); + } + else if (nv->vfeeds.selected) + { + if (nv->vfeeds.selected->url_home) + news_util_browser_open(nv->vfeeds.selected->url_home); } - } static Evas_Object *