Log In
New Account
  
Home My Page Project Cloud Code Snippets Project Openings Hermes
Summary Lists News SCM
authorAndrew Flegg <andrew@bleb.org>
Sun, 8 Aug 2010 08:53:45 +0000 (09:53 +0100)
committerAndrew Flegg <andrew@bleb.org>
Sun, 2 Jan 2011 19:53:44 +0000 (19:53 +0000)
mo2csv.php [new file with mode: 0644]
package/share/account-maemoorg.png [new file with mode: 0644]
package/src/org/maemo/hermes/engine/maemoorg/__init__.py [new file with mode: 0644]
package/src/org/maemo/hermes/engine/maemoorg/provider.py [new file with mode: 0644]
package/src/org/maemo/hermes/engine/maemoorg/service.py [new file with mode: 0644]
www/mo-list.csv [new file with mode: 0644]

diff --git a/mo2csv.php b/mo2csv.php
new file mode 100644 (file)
index 0000000..7751b4c
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+
+/*
+ * maemo.org user list - outputs a CSV file of all maemo.org user
+ * profiles for use in Hermes.
+ *
+ * Developed by slauwers for aflegg.
+ * Further modifications by Andrew Flegg.
+ *
+ * Copyright (c) Sebastian Lauwers 2010.
+ * Copyright (c) Andrew Flegg <andrew@bleb.org> 2010.
+ * Released under the Artistic Licence.
+ */
+
+$BASE_URL = 'http://maemo.org/profile/list/?org_openpsa_qbpager_net_nehmer_account_list_page=';
+
+for ($i = 1; $i < 250; $i++) {
+    $url = $BASE_URL.$i;
+
+    $doc = new DOMDocument();
+    @$doc->loadHTMLFile($url);
+
+    $table = $doc->getElementsByTagName('tbody');
+    $rows = $table->item(0)->childNodes;
+
+    if (!is_null($rows)) {
+        foreach ($rows as $row) {
+            $columns = $row->childNodes;
+
+            if (!is_null($columns)) {
+                $img = $columns->item(0)->getElementsByTagName('img')->item(0);
+                $img_url = $img->getAttribute('src');
+                $img_url = $img_url == 'http://static.maemo.org/style_maemo2009/img/profile/default-icon.png' ? '' : $img_url;
+
+                $element = $columns->item(2)->getElementsByTagName('a')->item(0);
+                $username = $element->nodeValue;
+                $user_url = $element->getAttribute('href');
+
+                $fullname = trim($columns->item(4)->nodeValue);
+
+                $title = trim($columns->item(6)->nodeValue);
+
+                $karma = intval(trim($columns->item(8)->nodeValue));
+
+                if ($fullname || $img_url)
+                    echo "$username,$fullname,http://maemo.org$user_url,$title,$karma,$img_url\n";
+            }
+        }      
+    }
+}
+?>
+
diff --git a/package/share/account-maemoorg.png b/package/share/account-maemoorg.png
new file mode 100644 (file)
index 0000000..4e63c26
Binary files /dev/null and b/package/share/account-maemoorg.png differ
diff --git a/package/src/org/maemo/hermes/engine/maemoorg/__init__.py b/package/src/org/maemo/hermes/engine/maemoorg/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/package/src/org/maemo/hermes/engine/maemoorg/provider.py b/package/src/org/maemo/hermes/engine/maemoorg/provider.py
new file mode 100644 (file)
index 0000000..856d977
--- /dev/null
@@ -0,0 +1,32 @@
+import gnome.gconf
+import org.maemo.hermes.engine.provider
+import org.maemo.hermes.engine.maemoorg.service
+
+class Provider(org.maemo.hermes.engine.provider.Provider):
+    """maemo.org provider for Hermes. 
+
+       Copyright (c) Andrew Flegg <andrew@bleb.org> 2010.
+       Released under the Artistic Licence."""
+
+
+    # -----------------------------------------------------------------------
+    def get_name(self):
+        """Return the display name of this service. An icon, of with the lower-case,
+           all-alphabetic version of this name is expected to be provided."""
+           
+        return 'maemo.org'
+    
+    
+    # -----------------------------------------------------------------------
+    def has_preferences(self):
+        """Whether or not this provider has any preferences. If it does not,
+           open_preferences must NOT be called; as the behaviour is undetermined."""
+           
+        return False
+
+    
+    # -----------------------------------------------------------------------
+    def service(self, gui_callback):
+        """Return the service backend"""
+
+        return org.maemo.hermes.engine.maemoorg.service.Service()
diff --git a/package/src/org/maemo/hermes/engine/maemoorg/service.py b/package/src/org/maemo/hermes/engine/maemoorg/service.py
new file mode 100644 (file)
index 0000000..1fc91c2
--- /dev/null
@@ -0,0 +1,145 @@
+import urllib
+import csv
+import org.maemo.hermes.engine.service
+from org.maemo.hermes.engine.friend import Friend
+
+class Service(org.maemo.hermes.engine.service.Service):
+    """maemo.org backend for Hermes.
+       
+       Copyright (c) Andrew Flegg <andrew@bleb.org> 2010.
+       Released under the Artistic Licence."""
+       
+    #_account_url = "http://hermes.garage.maemo.org/mo-list.csv"
+    _account_url = "file:///home/andrew/src/scratchbox/hermes/www/mo-list.csv"
+       
+    # -----------------------------------------------------------------------
+    def __init__(self):
+        """Initialise the maemo.org service."""
+        
+        org.maemo.hermes.engine.service.Service.__init__(self, "maemo.org")
+
+        self._api_email = api_email
+        self._api_key = api_key
+         
+        self._address_to_contact = {}
+        self._hash_to_address = {}
+        self._hash_has_gravatar = {}
+        
+        self._friends_by_contact = {}
+        self._contacts_by_friend = {}
+    
+    
+    # -----------------------------------------------------------------------
+    def pre_process_contact(self, contact):
+        """Extracts addresses from the contact."""
+        
+        for address in contact.get_emails():
+            self._address_to_contact[address] = contact
+    
+    
+    # -----------------------------------------------------------------------
+    def process_friends(self):
+        self._lookup_addresses()
+
+    
+    # -----------------------------------------------------------------------
+    def process_contact(self, contact):
+        """On first call (with a contact missing a photo), go get data from 
+           Gravatar's servers."""
+        
+        if not self._has_photo(contact):
+            for address in contact.get_emails():
+                hash = self._get_hash_for_address(address)
+                if (self._hash_has_gravatar.has_key(hash) and self._hash_has_gravatar[hash]):
+                    friend = Friend(contact.get_name())
+                    friend.set_photo_url(self._get_url_for_email_hash(hash))
+                    self._register_match(contact, friend)
+                    return friend
+        
+        return None
+
+
+    # -----------------------------------------------------------------------
+    def get_unmatched_friends(self):
+        """Will always return empty list - Gravatar only reacts on e-mail 
+           addresses from existing contacts."""
+
+        return []
+    
+
+    # -----------------------------------------------------------------------
+    def _get_friends(self):
+        return self._contacts_by_friend.keys()
+
+
+    # -----------------------------------------------------------------------    
+    def _get_contacts_with_match(self):
+        """Returns a dict with Contact objects as keys and Friend objects as 
+           values"""
+        
+        return self._friends_by_contact
+
+
+    # -----------------------------------------------------------------------
+    def _register_match(self, contact, friend):
+        friend.set_contact(contact)
+        self._friends_by_contact[contact] = friend
+        self._contacts_by_friend[friend] = contact
+        
+    # -----------------------------------------------------------------------
+    # FIXME
+    def _has_photo(self, contact):
+        return False
+    
+        
+    # -----------------------------------------------------------------------
+    def _lookup_addresses(self):
+        """Constructs hashes for address_to_contact, makes call to the Gravatar.com service and updates
+        self._hash_has_gravatar"""
+        
+        addresses = self._address_to_contact.keys()
+        if len(addresses) == 0:
+            self._set_hash_information({})
+        else:
+            args = { "apikey" : self._api_key}
+            hashes = self._construct_hashes(addresses)
+            args["hashes"] = list(hashes)
+            url = self._api_url
+            self._set_hash_information(self._get_hash_info_from_server(args, url))
+            
+
+    # -----------------------------------------------------------------------
+    def _get_hash_info_from_server(self, args, url):
+        """Makes the actual XML-RPC call - override this for testing"""
+        
+        service = xmlrpclib.ServerProxy(url)
+        return service.grav.exists(args)
+
+
+    # -----------------------------------------------------------------------
+    def _set_hash_information(self, hash_info):
+        self._hash_has_gravatar = hash_info
+        
+
+    # -----------------------------------------------------------------------
+    def _get_url_for_email_hash(self, hash, default="404", size="128"):
+        """Assembles the URL to a gravatar, based on a hash of an e-mail address"""
+    
+        return self._image_url_base + urllib.urlencode({'gravatar_id':hash, 'd':default, 'size':size})
+    
+    
+    # -----------------------------------------------------------------------
+    def _construct_hashes(self, addresses):
+        """Creates hashes for all addresses specified, returning a set of hashes"""
+    
+        result = set()
+        for address in addresses:
+            hash = self._get_hash_for_address(address)
+            self._hash_to_address[hash] = address
+            result.add(hash)
+    
+        return result
+
+    # -----------------------------------------------------------------------
+    def _get_hash_for_address(self, address):
+        return hashlib.md5(address.lower()).hexdigest()
diff --git a/www/mo-list.csv b/www/mo-list.csv
new file mode 100644 (file)
index 0000000..109e62d
--- /dev/null
@@ -0,0 +1,84 @@
+sjgadsby,Stephen Gadsby,http://maemo.org/profile/view/sjgadsby,Millersville University of Pennsylvania,2923,http://static.maemo.org/static/6/6a34a030755811df923a53c3563510b210b2_avatar_thumbnail
+qgil,Quim Gil,http://maemo.org/profile/view/qgil,Nokia,2421,http://static.maemo.org/static/2/2dcbe7667e1111dc81ab39741aafcf71cf71_avatar_thumbnail
+qwerty12,Faheem Pervez,http://maemo.org/profile/view/qwerty12,,2132,http://static.maemo.org/static/1/12bcc9f8582c11dea7ce8340060c27df27df_avatar_thumbnail
+jaffa,Andrew Flegg,http://maemo.org/profile/view/jaffa,,1916,http://static.maemo.org/static/9/988b4396359711de95556b28d6d0d919d919_avatar_thumbnail
+yerga,Daniel Martín Yerga,http://maemo.org/profile/view/yerga,,1703,http://static.maemo.org/static/9/92063890ba4f11deae2ddbb945d05ee15ee1_avatar_thumbnail
+thp,Thomas Perl,http://maemo.org/profile/view/thp,,1543,http://static.maemo.org/static/8/808f3c50735011df8631c7d306f47e897e89_avatar_thumbnail
+texrat,Randall Arnold,http://maemo.org/profile/view/texrat,,1501,http://static.maemo.org/static/7/7f18c9be8a4811de90fbf38186316ea36ea3_avatar_thumbnail
+generalantilles,Ryan Abel,http://maemo.org/profile/view/generalantilles,,1478,http://static.maemo.org/static/3/3a6a13284c3611ddaf0029d80a2ba8e6a8e6_avatar_thumbnail
+fms,Marat Fayzullin,http://maemo.org/profile/view/fms,,1441,
+vdvsx,Valério Valério,http://maemo.org/profile/view/vdvsx,,1395,http://static.maemo.org/static/4/4f4205ae786311dd8af0695670d3a77fa77f_avatar_thumbnail
+timsamoff,Tim Samoff,http://maemo.org/profile/view/timsamoff,,1389,http://static.maemo.org/static/d/db692e08ae8211de9b967384a8b3a02ca02c_avatar_thumbnail
+framstag,Tim Teulings,http://maemo.org/profile/view/framstag,,1342,http://static.maemo.org/static/2/2561bce8857a11dc971b33d91d2666496649_avatar_thumbnail
+krisse,,http://maemo.org/profile/view/krisse,,1187,http://static.maemo.org/static/8/8081371ab32d11de8618e9cab2eefdb8fdb8_avatar_thumbnail
+qole,alan bruce,http://maemo.org/profile/view/qole,,1157,http://static.maemo.org/static/b/bb7cdee6176011de842b71ab8f46c71cc71c_avatar_thumbnail
+thoughtfix,Daniel Gentleman,http://maemo.org/profile/view/thoughtfix,ThoughtFix LLC,1131,
+achipa,Attila Csipa,http://maemo.org/profile/view/achipa,,1131,http://static.maemo.org/static/6/650bb35e376f11df948bfd3e5433b60eb60e_avatar_thumbnail
+andre,Andre Klapper,http://maemo.org/profile/view/andre,Openismus,1115,http://static.maemo.org/static/1/1edcf906182211dd8d37532f1b4a8e8b8e8b_avatar_thumbnail
+khertan,Benoît HERVIER,http://maemo.org/profile/view/khertan,,1105,http://static.maemo.org/static/2/2768cc925d4811ddbde0bda2bf596c3e6c3e_avatar_thumbnail
+d-iivil,Ricky Tournee,http://maemo.org/profile/view/d-iivil,IVK Music Finland LTD,1091,http://static.maemo.org/static/7/750a64b6f90411dea6bf7f8b15c1b3e4b3e4_avatar_thumbnail
+dneary,Dave Neary,http://maemo.org/profile/view/dneary,Neary Consulting,1083,http://static.maemo.org/static/5/5711668a114d11dda48baff2827838c438c4_avatar_thumbnail
+wazd,Andrew Zhilin,http://maemo.org/profile/view/wazd,,1016,http://static.maemo.org/static/2/2ec4fa36d35c11dcab97379d0297a79ca79c_avatar_thumbnail
+pycage,Martin Grimme,http://maemo.org/profile/view/pycage,Lintegra,1006,
+stskeeps,,http://maemo.org/profile/view/stskeeps,,981,http://static.maemo.org/static/0/014f4d8c804311de9f8dc5801585b947b947_avatar_thumbnail
+thenokiablog,Mark Guim,http://maemo.org/profile/view/thenokiablog,thenokiablog.com,941,http://static.maemo.org/static/d/d4dcf1309ccd11deb66353262e963da33da3_avatar_thumbnail
+bergie,Henri Bergius,http://maemo.org/profile/view/bergie,Nemein,880,http://static.maemo.org/static/4/4b074d42b71f11dcb27f5742efd5491f491f_avatar_thumbnail
+gcobb,Graham Cobb,http://maemo.org/profile/view/gcobb,,853,http://static.maemo.org/static/c/c33b9ad2f13611dda52989eb3232a2bda2bd_avatar_thumbnail
+konttori,Urho Konttori,http://maemo.org/profile/view/konttori,Nokia,839,http://static.maemo.org/static/7/7a9507e6d7a911de8f5d178171f3761c761c_avatar_thumbnail
+rsuplido,Reggie Suplido,http://maemo.org/profile/view/rsuplido,talk.maemo.org / Maemo Talk,815,http://static.maemo.org/static/3/342024b285d311dea175957af82c60116011_avatar_thumbnail
+twaelti,Tom Waelti,http://maemo.org/profile/view/twaelti,IT (Consulting / eGov / Healthcare),805,http://static.maemo.org/static/7/7edbfbea960211de93ab9f3957e3bf18bf18_avatar_thumbnail
+tanner,Tom Tanner,http://maemo.org/profile/view/tanner,,793,
+torpedo48,Emanuele Cassioli,http://maemo.org/profile/view/torpedo48,,781,http://static.maemo.org/static/a/a7c8a48cf16411de90acbf007a03ddd3ddd3_avatar_thumbnail
+epage,Ed Page,http://maemo.org/profile/view/epage,,774,http://static.maemo.org/static/7/753a3db47a8a11df96bc378a6db74ba04ba0_avatar_thumbnail
+xfade,Niels Breet,http://maemo.org/profile/view/xfade,,765,http://static.maemo.org/static/9/9e238eb20adc11ddb88a312c2707ea5fea5f_avatar_thumbnail
+anidel,Aniello Del Sorbo,http://maemo.org/profile/view/anidel,Orbis UK Ltd,757,http://static.maemo.org/static/3/3f9c5846850711de9a89ef1e31faaf53af53_avatar_thumbnail
+ossi1967,Oskar Welzl,http://maemo.org/profile/view/ossi1967,,752,http://static.maemo.org/static/4/41c73bee3b4311deb1083941606690469046_avatar_thumbnail
+ossipena,Timo P,http://maemo.org/profile/view/ossipena,,727,http://static.maemo.org/static/b/b27bc738d80a11de99cc9b421d260fbb0fbb_avatar_thumbnail
+venomrush,Venomrush .,http://maemo.org/profile/view/venomrush,Experian,719,http://static.maemo.org/static/c/c4d05796c69411de8a6c73ed5e7055e055e0_avatar_thumbnail
+zerojay,Jason Carter,http://maemo.org/profile/view/zerojay,Longtail Studios/Ubisoft,711,http://static.maemo.org/static/5/5a14b6947d8111dc86c7a952e067af62af62_avatar_thumbnail
+lcuk,Gary Birkett,http://maemo.org/profile/view/lcuk,,690,http://static.maemo.org/static/e/e2e5db22b9b411dd8d1cf7cd4adee3e5e3e5_avatar_thumbnail
+baloo,Jamie Bennett,http://maemo.org/profile/view/baloo,Canonical,690,http://static.maemo.org/static/b/b093e98c4a9811dea499cf6c3639adb6adb6_avatar_thumbnail
+javispedro,Javier S. Pedro,http://maemo.org/profile/view/javispedro,,686,
+bundyo,Kamen Bundev,http://maemo.org/profile/view/bundyo,,667,
+lbt,David Greaves,http://maemo.org/profile/view/lbt,Freelance (Nomovok/Nokia),642,http://static.maemo.org/static/7/7dd73f90593311deb0750f2a8ad578c678c6_avatar_thumbnail
+fanoush,Frantisek Dufka,http://maemo.org/profile/view/fanoush,,637,
+fiferboy,Andrew Olmsted,http://maemo.org/profile/view/fiferboy,,636,http://static.maemo.org/static/8/8f5c49bec1e211de823abf3688c523ee23ee_avatar_thumbnail
+flandry,David Falkayn,http://maemo.org/profile/view/flandry,MIT,635,
+harbaum,Till Harbaum,http://maemo.org/profile/view/harbaum,,633,http://static.maemo.org/static/2/2fbbc1eeb1b911deb10d63e482e060286028_avatar_thumbnail
+pvanhoof,Philip Van Hoof,http://maemo.org/profile/view/pvanhoof,Codeminded BVBA,628,http://static.maemo.org/static/c/c25dcf3c866011dca542bdd6e6dd43f443f4_avatar_thumbnail
+smoku,Tomasz Sterna,http://maemo.org/profile/view/smoku,Opera Software ASA,627,http://static.maemo.org/static/c/cd5eee4a4afb11df8edd73a7af2316041604_avatar_thumbnail
+ed_,Ed Bartosh,http://maemo.org/profile/view/ed_,,620,http://static.maemo.org/static/6/6ca672bcc18f11debb51271a894520422042_avatar_thumbnail
+rcadden,,http://maemo.org/profile/view/rcadden,,619,http://static.maemo.org/static/0/0a7008a47fe411dca00525ced532d5add5ad_avatar_thumbnail
+palmsolo,Matthew Miller,http://maemo.org/profile/view/palmsolo,,604,http://static.maemo.org/static/5/56a861b4c1b711dea4181323065f28b428b4_avatar_thumbnail
+revdkathy,Kathy Smith,http://maemo.org/profile/view/revdkathy,,599,http://static.maemo.org/static/d/d6542544fe0a11deb3558bda3a03bb84bb84_avatar_thumbnail
+archebyte,Mustali Dalal,http://maemo.org/profile/view/archebyte,,598,http://static.maemo.org/static/a/ae69976af4b111de80477102bcf82d4b2d4b_avatar_thumbnail
+tekojo,Tero Kojo,http://maemo.org/profile/view/tekojo,Nokia,596,http://static.maemo.org/static/d/d8e317c0a5f411deb62b4f27cd8ea5b5a5b5_avatar_thumbnail
+danielwilms,,http://maemo.org/profile/view/danielwilms,,588,http://static.maemo.org/static/7/79feedce0d5111de9be7b760f761f264f264_avatar_thumbnail
+frals,Nick Leppänen Larsson,http://maemo.org/profile/view/frals,,588,http://static.maemo.org/static/8/8f09d712fbf611deb44d7126d0ab743c743c_avatar_thumbnail
+ukki,Janne Mäkinen,http://maemo.org/profile/view/ukki,,584,
+mikecy,mike choy,http://maemo.org/profile/view/mikecy,,578,
+jeremiah,Jeremiah Foster,http://maemo.org/profile/view/jeremiah,,574,http://static.maemo.org/static/3/32c5ce40f6aa11ddb40eb5b60e6273597359_avatar_thumbnail
+eipi,Sanjeev Visvanatha,http://maemo.org/profile/view/eipi,,573,http://static.maemo.org/static/3/3c0be54c7bdf11de955d91b7b227decfdecf_avatar_thumbnail
+agarcia,Alberto Garcia,http://maemo.org/profile/view/agarcia,Igalia,569,http://static.maemo.org/static/6/6edd0a72865a11dcb22fc723b92a51875187_avatar_thumbnail
+andrewfblack,Andrew Black,http://maemo.org/profile/view/andrewfblack,,563,
+mohammad7410,Mohammad Abu-Garbeyyeh,http://maemo.org/profile/view/mohammad7410,,563,
+kulve,Tuomas Kulve,http://maemo.org/profile/view/kulve,Movial,562,
+tomaszd,Tomasz Dominikowski,http://maemo.org/profile/view/tomaszd,,555,http://static.maemo.org/static/2/2952fb86cfd911de9290d34442a842f342f3_avatar_thumbnail
+murrayc,Murray Cumming,http://maemo.org/profile/view/murrayc,Openismus GmbH,555,http://static.maemo.org/static/6/6053b3fe7d7f11dc8c0d1b14c29c12a412a4_avatar_thumbnail
+andy80,Andrea Grandi,http://maemo.org/profile/view/andy80,,544,http://static.maemo.org/static/c/cdfd24107d7c11dcb4adcfc3a0cd29d029d0_avatar_thumbnail
+w00t,Robin Burchell,http://maemo.org/profile/view/w00t,Collabora,544,http://static.maemo.org/static/7/7c1ffca46f0e11dfaa21936864a4ae46ae46_avatar_thumbnail
+penguinbait,,http://maemo.org/profile/view/penguinbait,,539,http://static.maemo.org/static/3/375a5c9a384611deb8c4392d4c08b420b420_avatar_thumbnail
+aisu,Tyler Longwell,http://maemo.org/profile/view/aisu,,527,http://static.maemo.org/static/5/5ab5ffd8133411ddb240c1c7cae3ae58ae58_avatar_thumbnail
+hrw,Marcin Juszkiewicz,http://maemo.org/profile/view/hrw,,521,http://static.maemo.org/static/7/7761ee34d00a11dcb425cf0a1de6fc93fc93_avatar_thumbnail
+zeenix,Zeeshan Ali,http://maemo.org/profile/view/zeenix,Nokia Oyj,520,http://static.maemo.org/static/d/da5c3510ae8b11debade03419792fbd2fbd2_avatar_thumbnail
+mgedmin,Marius Gedminas,http://maemo.org/profile/view/mgedmin,Programmers of Vilnius,518,http://static.maemo.org/static/7/787b4f3e54e611dda758cf4febec1e581e58_avatar_thumbnail
+florian,Florian Boor,http://maemo.org/profile/view/florian,kernel concepts,514,http://static.maemo.org/static/2/2a0181a2081f11dd8a6f2bd97c10349e349e_avatar_thumbnail
+lardman,Simon Pickering,http://maemo.org/profile/view/lardman,,511,http://static.maemo.org/static/2/2c58e8c47d7c11dcaacecb2f1df197889788_avatar_thumbnail
+lucianomw,Luciano Wolf,http://maemo.org/profile/view/lucianomw,,506,http://static.maemo.org/static/d/d3e55cfc521011dea15f31b9fcf463ec63ec_avatar_thumbnail
+conny,Cornelius Hald,http://maemo.org/profile/view/conny,,502,
+brentdc,Brent Chiodo,http://maemo.org/profile/view/brentdc,,490,
+matan,Matan Ziv-Av,http://maemo.org/profile/view/matan,,488,
+etrunko,Eduardo Lima,http://maemo.org/profile/view/etrunko,openBossa/INdT,484,http://static.maemo.org/static/e/ef3e446c7dc011dc9eef192ff3eda51ea51e_avatar_thumbnail
+benson,Benson Mitchell,http://maemo.org/profile/view/benson,,479,
+vaibhavsharma,Vaibhav Sharma,http://maemo.org/profile/view/vaibhavsharma,TheMeeGoBlog.com,477,http://static.maemo.org/static/4/44b73d9c0f1711df9f55dd618a7a7ff97ff9_avatar_thumbnail
+rmoravcik,,http://maemo.org/profile/view/rmoravcik,,475,http://static.maemo.org/static/8/8b862b36b9e311dea0e83f065f1cd9b8d9b8_avatar_thumbnail

Terms of Use    Privacy Policy    Contribution Guidelines    Feedback

Powered By GForge Collaborative Development Environment