Hello all, I'm going to apply for SoC and prepared a proposal, see it below. The proposal was already discussed with Frank Osterfeld but I'd be glad to hear your opinion. === Proposal === The SoC project aims at creating an RSS framework on top of Akonadi to enable desktop-wide RSS feed management. This allows: - to maintain a single (desktop-wide) list of RSS subscriptions from which RSS-enabled applications or the user can choose only the relevant feeds (e.g., only podcast feeds for Amarok) - to use a single storage so RSS-enabled applications don't need to create their own storage solutions - to receive notifications of the changes made to the RSS feed list and articles kept in the storage (e.g., adding/removing a feed) - to add support for synchronization with online feed readers for all RSS-enabled applications at once - to provide an easy to use library for managing feeds and articles so RSS-enabled applications can perform common tasks such as fetching feeds, adding/removing feeds, modifying attributes of feeds/articles, tagging feeds/articles As a result a lot of KDE applications can utilize the framework to manage RSS feeds in a centralized manner: plasma applets, Akregator, Amarok, KTorrent, KNewsticker, to name a few. === Use cases === 1. John installed a plasmoid capable of showing RSS content. He already subscribed to a lot of RSS feeds via Akregator and wants the plasmoid to show only 2 of these feeds. He opens up the configuration dialog of the plasmoid and chooses those 2 feeds from the list of all feeds he is subscribed to. 2. Mark visits a site where users publish podcasts. He clicks on the icon in Konqueror to subscribe to a podcast feed and then the feed shows up in the list of all his subscriptions. The feed will be shown only in the RSS applications which can playback podcasts (e.g., in Amarok). 3. Marta adds a new RSS feed to Akregator. The RSS plasmoid receives a notification that a new feed has been attached to the list of user's subscriptions and adds this feed to its own list. 4. David is a Kubuntu developer. He is subscribed to the feeds used by Kubuntu, Debian, and the KDE4 launchpad team to notify of changes made to deb packages. He wants to keep track of the KDE related packages only. He creates a virtual feed which filters the feeds and shows only articles having "kde" in the title. This feed will be available to any RSS-enabled application. 5. Caroline wants to read her favorite RSS feeds on an UMPC, laptop, and home computer. When she is on a business trip she uses her UMPC to read the feeds via an online feed reader. Then she comes back home and launches Akregator. The RSS framework automatically syncs the states of the feeds and the articles with the online reader so she doesn't need to sort them out manually. === Rationale === Given the current state of RSS support on KDE, RSS-enabled applications have to implement the code for fetching/managing feeds/articles on their own and invent storage backends to keep RSS feeds/articles. The RSS feeds the user is subscribed to are scattered across all RSS-enabled applications though an attempt was made in KDE3 to share feed lists (see kdenetwork/rssservice). Also if a developer wants to add synchronization with online feed readers in the future he has to do it per application which leads to duplicated code and efforts. === Design === 1. Creating an Akonadi resource for managing subscriptions and fetching feeds. In order to not waste system resources, a single Akonadi resource will manage the whole subscription list, individual RSS feeds will be available as Akonadi collections with special attributes to distinguish them from regular folders which are also represented as collections. RSS articles will be accessible as Akonadi::Items. One of the main building blocks here is libsyndication. Also it involves implementing an Akonadi::ItemSerializerPlugin for the application/rss+xml MIME type to enable serialization of the items. 2. Creating an RSS specific library on top of libakonadi. The goal of this phase is to come up with an easy to use RSS feed library which applications can use to share subscriptions and perform common tasks. This library will allow applications: - to fetch all feeds (via the top-level Collection) - to fetch one feed (via a certain Collection) - to fetch feeds on demand and at regular intervals - to add tags to feeds/articles and create virtual folders (needs investigation at which level this can be best done - Resource level, library level - and how Nepomuk can help here) - to attach metadata and to set attributes on feeds/articles (like Important, isPodcast - via Akonadi::Attribute) - to receive notifications of changes made to feeds/articles (built-in if feeds are represented as a CollectionModel) As a starting point I will take Akregator's interfaces and classes: Feedlist, Feed, Article. I intend to reach Akregator's level of features at least. This phase involves research on what the needs of RSS-enabled applications are and how the Collection-related classes can be used in this regard. 3. Creating a demo application showing off the capabilities of the framework. This would be a simple RSS feed reader or a plasmoid probably based on the Akonadi::CollectionView classes. If time permits I'd rather start porting Akregator to the RSS framework described above. 4. Research on sync mechanisms with online feed readers. The RSS framework together with Akonadi facilitates developing a proper synchronization mechanism with online feed readers. This SoC project will also involve research on how such support could be done and the design of the framework must allow adding it in the future. === Timeline === SoC is 13 weeks long but if my proposal is accepted I'm going to begin working on it since April. The estimated timeline is as follows: May 26 - June 16 (3 weeks): Implementing an Akonadi resource for RSS feed management. June 16 - July 28 (7 weeks): Implementing the RSS feed management library on top of Akonadi. The interfaces of the library need to be well thought out since a good API design is a tough task and the library has to stay BC in case in enters kdepimlibs. July 28 - August 4 (1 week): Research on how synchronization with online feed readers could be done using the capabilities provided by Akonadi. The work on the previous phases should be done with such support in mind. August 4 - August 11 (1 week): Implementing a demo application. August 11 - August 18 (1 week): Code cleanup, API documentation. Since I'm a PhD student I have to give talks at conferences every now and then. I'll be able to spend 30-40 hours a week on the SoC project. === About me === Name: Dmitry Ivanov e-mail: vonami@gmail.com irc.kde.org: vonami Location: Moscow, Russia I'm a 24-year-old PhD student at Moscow State University of Railway Engineering [1]. My research interests are wireless mesh networks and fuzzy logic. I am a KDE/Linux user since 2002. Recently I began contributing to open source software. In October 2007 I started a project called partimage-ng [2]. I've received a lot of positive feedback so far and partimage-ng is approaching its first release. I'm committed to work on it in the future. When it comes to Qt/KDE programming experience I used Qt4/KDE4 libraries (GUI/Network/XML/SQL modules and the model/view framework) in a small open source project called Kelis [3]. The primary goal of this project was to teach myself Qt4/KDE4, Ruby and CMake. Also a while back I did a patch for KDE4's proxy settings dialog [4]. Since I already started to work on support for synchronization with online feed readers for Akregator on my own [5] I'm familiar with Akregator's source code to some extent. [1] http://www.miit.ru/engl/indexen.htm [2] https://launchpad.net/partimage-ng, http://partimage-ng.org [3] http://kelis.svn.sourceforge.net/viewvc/kelis/ [4] http://lists.kde.org/?l=kde-devel&m=119028779303232&w=2 [5] https://code.launchpad.net/~vonami/akregator-newsgator/trunk Thanks in advance, Dmitry -- A: Because it destroys the flow of the conversation Q: Why is top-posting bad? _______________________________________________ KDE PIM mailing list kde-pim@kde.org https://mail.kde.org/mailman/listinfo/kde-pim KDE PIM home page at http://pim.kde.org/