GHNS feeds for plasmaoid addons
Aaron J. Seigo
aseigo at kde.org
Sun Dec 26 20:28:18 CET 2010
hi everyone...
so, what did i do on christmas day, you ask? ok, you didn't.. but i'm going to
tell you anyways.. :P
besides sniping a couple of bugs, including a showstopper in the system tray,
i decided to stop waiting for manna from heaven and to look into what it will
take to get a GHNS feed for our plasmoid addons. this becomes more of an issue
for me personally as the share plasmoid is movings most of the backends out of
the default install, which is The Right Thing To Do. other widgets that rely
on network services which are notorious for random changes over time, such as
the weather engine, really ought to be doing this as web developers
demonstrate time and again that they haven't got a clue when it comes to
service stability.
to my great surprise, it looks very easy to do. using the OCS documentation[1]
i have come up with a design. i budget 2 days of work to have it up and
running. yes, that's how trivial it is, and i'm now ashamed for not having
just pulled up my boots and done this sooner.
here's how i see it working:
we'll have a repository that we maintain. the layout of the repo will be as
follows: each "feed" (e.g. for share widget backends) will have its own top-
level directory. in that directory, there will be a file named "config" which
will be a simple ini style file with entries such as:
name=org.kde.plasma.share
compression=zip
compresedFileSuffix=.plasmaaddon
metadataInPayload=true
other compression values can be tgz, tbz, none. in the case of "none", the
file in the contents directory will be assumed to be the payload. otherwise,
the payload file will be compressed on the server side with the requested
compression system.
inside that directory will be one directory for each item, e.g.:
share/imagebin.ca
share/imageshack.us
the names of the directories be used for the name of the payload file created
(if needed). in each of these directories will be a payload/ directory, an
optional preview image and possibly the metadata file.
depending on the values in the config file, an INI file will be looked for
either in the payload/ directory or in the top-level directory (e.g.
share/imagebin.ca/metadata.desktop) that contains .desktop + X-KDE-PluginInfo
style information so we can get names, descriptions, etc. for our plasma
stuff, that metadata.desktop file is already in the package, so will be in the
payload/ directory, saving us from having to sync this ifo too much.
on the server, a git pull will be done on a cron job and a script will index
the contents. thanks to git log + some trivial text processing, it will be
possible to only index that which has changed since the last update keeping
this relatively scalable.
a set of static files will be written out by the indexing process:
* provider files, one per top level directory (aka "feed")
* categories listing, one per feed
static files for licenses will be there as well, though just not touched by
the indexing (unecessary). distributions and homepagetypes will all be left
empty with static files as well. dependencies is something i'll leave for
later.
packages will get made if needed and the information will be cached in a
simple database table. php scripts will be written for list, get and download
functions and will use the database to return results. this is the bulk of the
work, but even those are pretty straight forward as we don't need to deal with
authentication (it's all public data).
adding, editting, favourting, etc. will not be supported.
the end result is that we will have a git repo where we can shove things into
and which will then magically appear in our GHNS feeds. creating a new feed
will be a matter of creating a new directory.
update frequency on the server will depend on how much CPU and disk the
indexing takes. i'm hoping to make it hourly.
this is not intended to be a way for random users to upload their own stuff;
kde-look.org can be used for that.
i will initially host it on plasma.kde.org and if it proves itself to be Good
and other projects express an interest in it then we can think about moving it
somewhere more KDE-generic.
i have prototypes the git handling and sketched out the db on paper. if you
have any ideas / input / corrections to the above, please do so over the next
day or two as i don't plan on spending a bunch of time on it. i won't be
starting today or tomorrow (already booked for other things), but should be on
it by tuesday. i am not interested in something big or general purpose, just
to implement something specifically for our need to push well-known addons
very easily from upstream.
[1] which, sad to say, i'm unimpressed with. the API is not very well designed
and the xml return values are undocumented except for example snippets :/
--
Aaron J. Seigo
humru othro a kohnu se
GPG Fingerprint: 8B8B 2209 0C6F 7C47 B1EA EE75 D6B7 2EB1 A7F1 DB43
KDE core developer sponsored by Qt Development Frameworks
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
Url : http://mail.kde.org/pipermail/plasma-devel/attachments/20101226/b8645195/attachment.sig
More information about the Plasma-devel
mailing list