[Kde-pim] [kde-pim] SoC application: RSS framework on top of Akonadi

Dmitry Ivanov vonami at gmail.com
Sat Mar 29 14:27:01 GMT 2008


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 at 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 at kde.org
https://mail.kde.org/mailman/listinfo/kde-pim
KDE PIM home page at http://pim.kde.org/



More information about the kde-pim mailing list