Imported Upstream version 0.2.4 upstream/0.2.4
authorJulien Valroff <julien@kirya.net>
Tue, 30 Mar 2010 17:44:08 +0000 (19:44 +0200)
committerJulien Valroff <julien@kirya.net>
Tue, 30 Mar 2010 17:44:08 +0000 (19:44 +0200)
40 files changed:
AUTHORS
pino.desktop
pino.vide [new file with mode: 0644]
po/POTFILES.in [new file with mode: 0644]
po/ar.po
po/de.po
po/es.po
po/fr.po
po/it.po
po/lv.po
po/pl.po
po/pt.po
po/pt_BR.po
po/ru.po
po/sv.po
po/th.po
po/zh_CN.po
src/accounts.vala
src/cache.vala
src/main_window.vala
src/oauth-client.vala [new file with mode: 0644]
src/popups.vala
src/pref_dialog.vala
src/prefs.vala
src/re_tweet.vala
src/rest_api_abstract.vala
src/rest_api_acc.vala
src/rest_api_direct.vala
src/rest_api_re.vala
src/rest_api_timeline.vala
src/template.vala
src/timeline_list.vala
src/timeline_list_abstract.vala
src/url_short.vala
src/vapi/config.vapi
src/vapi/sha1.c [new file with mode: 0644]
src/vapi/sha1.h [new file with mode: 0644]
src/wscript
templates/main.tpl
wscript

diff --git a/AUTHORS b/AUTHORS
index 52894d4..13a55c8 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -61,3 +61,6 @@ Piotr Drąg <piotrdrag@gmail.com>
 
 Rolands Bondars <r.bondars@gmail.com>
     Latvian translation
+
+Tiago Medeiros <madcat@altocircuito.net>
+    Portuguese (Brazilian) translation
index 7b4ad07..97104a1 100644 (file)
@@ -1,15 +1,15 @@
 [Desktop Entry]
 Exec=pino
-Name=Pino Twitter Client
-Name[ua]=Twitter клієнт Pino
-Name[ru]=Twitter клиент Pino
+Name=Pino - Twitter and Identi.ca client
+Name[ua]=Pino - клієнт для Twitter і Identi.ca
+Name[ru]=Pino - клиент для Twitter и Identi.ca
 Icon=pino
 Type=Application
 Categories=GTK;Network;InstantMessaging;
-Comment=Fast, easy, and free Twitter client
+Comment=Fast, easy, and free Twitter and Identi.ca client
 Comment[ua]=Швидкий, простий та вільний Twitter клієнт
 Comment[ru]=Быстрый, простой и свободный Twitter клиент
 GenericName=Twitter Client
-GenericName[ua]=Twitter клієнт
-GenericName[ru]=Twitter клиент
+GenericName[ua]=Pino
+GenericName[ru]=Pino
 Terminal=false
diff --git a/pino.vide b/pino.vide
new file mode 100644 (file)
index 0000000..c0baeb9
--- /dev/null
+++ b/pino.vide
@@ -0,0 +1,55 @@
+--- !Project
+path: /home/troorl/Desktop/apps/pino
+name: pino
+author: troorl
+version: 0.1.0
+license: GPL-2.0
+builder: Native
+builder-options: !NativeBuilderOptions
+  debug: false
+  thread: false
+  disable-assert: false
+  disable-checking: false
+  disable-non-null: false
+  save-temps: false
+  quiet: false
+  other: 
+executable-options:
+  program: 
+  arguments: 
+  working-dir: /home/troorl/Desktop/apps/pino
+  environment: []
+files:
+- path: src/timeline_list.vala
+- path: src/twitter_url.vala
+- path: src/rest_url_interface.vala
+- path: src/rest_api_abstract.vala
+- path: src/tray_icon.vala
+- path: src/vapi/config.vapi
+- path: src/timer.vala
+- path: src/pref_dialog.vala
+- path: COPYING
+- path: src/main.vala
+- path: src/main_window.vala
+- path: src/template.vala
+- path: src/twitter_interface.vala
+- path: src/status_bar_smart.vala
+- path: src/gtk_style.vala
+- path: src/re_tweet.vala
+- path: src/prefs.vala
+- path: src/hig_table.vala
+- path: src/cache.vala
+- path: src/rest_api_timeline.vala
+- path: src/timeline_list_abstract.vala
+packages:
+- name: posix
+- name: gee-1.0
+- name: gio-2.0
+- name: gtk+-2.0
+- name: libnotify
+- name: libsexy
+- name: libsoup-2.4
+- name: libxml-2.0
+- name: webkit-1.0
+vapi_dir:
+- path: /home/troorl/Desktop/apps/pino/vapi
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644 (file)
index 0000000..1923bd3
--- /dev/null
@@ -0,0 +1,11 @@
+src/template.vala
+src/re_tweet.vala
+src/gtk_style.vala
+src/defs.vala
+src/timer.vala
+src/prefs.vala
+src/status_bar_smart.vala
+src/pref_dialog.vala
+src/main_window.vala
+src/main.vala
+src/twitter_interface.vala
index 0630b66..d4b5501 100644 (file)
--- a/po/ar.po
+++ b/po/ar.po
@@ -2,7 +2,7 @@
 # Copyright (C) 2009 the Free Software Foundation, Inc.
 # This file is distributed under the same license as the pino package.
 # MaXeR <mmaxer@gmail.com>, 2009.
-#
+# 
 msgid ""
 msgstr ""
 "Project-Id-Version: pino 0.1.0b4\n"
@@ -30,15 +30,14 @@ msgstr "الخدمة"
 
 #: src/account_widget.vala:77
 msgid "API proxy"
-msgstr ""
+msgstr "وكيل API"
 
 #: src/account_widget.vala:159
 msgid "Sure you want to delete this account?"
 msgstr "متأكد أنك تريد حذف هذا الحساب؟"
 
 #: src/dm_entry.vala:35
-msgid ""
-"You can't send direct message to this user. He (or she) must follow you too"
+msgid "You can't send direct message to this user. He (or she) must follow you too"
 msgstr "لايمكنك إرسال رسالة مباشرة إلى هذا المستخدم. هو يجب أن يتابعك أولاً"
 
 #: src/dm_entry.vala:42
@@ -67,7 +66,7 @@ msgstr "كلمة المرور"
 
 #: src/edit_account.vala:97
 msgid "API proxy or other service"
-msgstr ""
+msgstr "وكيل API أو خدمة أخرى"
 
 #: src/edit_account.vala:109 src/pref_dialog.vala:209
 msgid "Account"
@@ -75,11 +74,11 @@ msgstr "الحساب"
 
 #: src/edit_account.vala:183
 msgid "You must enter a proxy address"
-msgstr ""
+msgstr "يجب أن تدخل عناوين وكيل"
 
 #: src/edit_account.vala:198
 msgid "Proxy address must contain a valid url"
-msgstr ""
+msgstr "عناوين الوكيل يجب أن تتضمن رابطاً صحيحاً"
 
 #: src/edit_account.vala:216
 msgid "You must fill in all fields"
@@ -111,11 +110,11 @@ msgstr "إظهار الرسائل المباشرة"
 
 #: src/main_window.vala:147
 msgid "User info"
-msgstr ""
+msgstr "معلومات المستخدم"
 
 #: src/main_window.vala:147
 msgid "Show information about user"
-msgstr ""
+msgstr "إظهار معلومات حول المستخدم"
 
 #: src/main_window.vala:273 src/main_window.vala:274 src/main_window.vala:275
 #: src/status_bar_smart.vala:93 src/status_bar_smart.vala:96
@@ -139,13 +138,12 @@ msgid "Create new direct message"
 msgstr "إنشاء رسالة مباشرة جديدة"
 
 #: src/main_window.vala:382
-#, fuzzy
 msgid "Show user"
-msgstr "إظÙ\87ار Ø§Ù\84Ù\82ائÙ\85Ø©"
+msgstr "إظÙ\87ار Ø§Ù\84Ù\85ستخدÙ\85"
 
 #: src/main_window.vala:383
 msgid "Show information about specified user"
-msgstr ""
+msgstr "إظهار معلومات عن مستخدم محدد"
 
 #: src/main_window.vala:389
 msgid "Update timeline"
@@ -399,7 +397,7 @@ msgstr "محادثة"
 
 #: src/status_view_dialog.vala:63
 msgid "go to the web page"
-msgstr ""
+msgstr "ذهاب لصفحة ويب"
 
 #: src/template.vala:164 src/template.vala:224
 msgid "Reply"
@@ -469,44 +467,40 @@ msgid "%s - a twitter client"
 msgstr "%s - عميل Twitter"
 
 #: src/user_info_list.vala:48
-#, fuzzy
 msgid "Followers:"
-msgstr "رد Ù\84Ù\80 <b>%s</b>"
+msgstr "اÙ\84Ù\85تابعÙ\8aÙ\86:"
 
 #: src/user_info_list.vala:49
 msgid "Friends:"
-msgstr ""
+msgstr "الأصدقاء:"
 
 #: src/user_info_list.vala:50
-#, fuzzy
 msgid "Statuses:"
-msgstr "اÙ\84حاÙ\84ات"
+msgstr "اÙ\84تحدÙ\8aثات:"
 
 #: src/user_info_list.vala:69
 msgid "Web:"
-msgstr ""
+msgstr "الموقع:"
 
 #: src/user_info_list.vala:90
 msgid "follow"
-msgstr ""
+msgstr "متابعة"
 
 #: src/user_info_list.vala:183
 msgid "This user does not exist"
-msgstr ""
+msgstr "هذا العضو غير موجود"
 
 #: src/user_info_list.vala:300
 msgid "Now you follow this user"
-msgstr ""
+msgstr "أنت تتابع هذا العضو"
 
 #: src/user_info_list.vala:302
 msgid "User was unfollowed"
-msgstr ""
+msgstr "أوقفت متابعة العضو"
 
-#, fuzzy
 #~ msgid "Friends:  <b>%s</b>"
 #~ msgstr "رد لـ <b>%s</b>"
 
-#, fuzzy
 #~ msgid "Statuses:  <b>%s</b>"
 #~ msgstr "رد لـ <b>%s</b>"
 
index 35000d5..0fdc48f 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -2,7 +2,7 @@
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
+# 
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
@@ -29,18 +29,15 @@ msgstr "Dienst"
 
 #: src/account_widget.vala:77
 msgid "API proxy"
-msgstr ""
+msgstr "API Proxy"
 
 #: src/account_widget.vala:159
 msgid "Sure you want to delete this account?"
 msgstr "Möchten Sie dieses Konto wirklich löschen?"
 
 #: src/dm_entry.vala:35
-msgid ""
-"You can't send direct message to this user. He (or she) must follow you too"
-msgstr ""
-"Direktnachrichten an diesen Benutzer sind nicht möglich, da der Benutzer dir "
-"nicht folgt"
+msgid "You can't send direct message to this user. He (or she) must follow you too"
+msgstr "Direktnachrichten an diesen Benutzer sind nicht möglich, da der Benutzer dir nicht folgt"
 
 #: src/dm_entry.vala:42
 msgid "Check"
@@ -68,7 +65,7 @@ msgstr "Passwort"
 
 #: src/edit_account.vala:97
 msgid "API proxy or other service"
-msgstr ""
+msgstr "API Proxy oder anderer Dienst"
 
 #: src/edit_account.vala:109 src/pref_dialog.vala:209
 msgid "Account"
@@ -76,11 +73,11 @@ msgstr "Konto"
 
 #: src/edit_account.vala:183
 msgid "You must enter a proxy address"
-msgstr ""
+msgstr "Es muss eine Proxy-Adresse eingegeben werden"
 
 #: src/edit_account.vala:198
 msgid "Proxy address must contain a valid url"
-msgstr ""
+msgstr "Die Proxy-Adresse muss eine gültige URL sein"
 
 #: src/edit_account.vala:216
 msgid "You must fill in all fields"
@@ -112,11 +109,11 @@ msgstr "Direktnachrichten anzeigen"
 
 #: src/main_window.vala:147
 msgid "User info"
-msgstr ""
+msgstr "Benutzerinfo"
 
 #: src/main_window.vala:147
 msgid "Show information about user"
-msgstr ""
+msgstr "Informationen über den Benutzer anzeigen"
 
 #: src/main_window.vala:273 src/main_window.vala:274 src/main_window.vala:275
 #: src/status_bar_smart.vala:93 src/status_bar_smart.vala:96
@@ -140,13 +137,12 @@ msgid "Create new direct message"
 msgstr "Neue Direktnachricht erstellen"
 
 #: src/main_window.vala:382
-#, fuzzy
 msgid "Show user"
-msgstr "Menü anzeigen"
+msgstr "Benutzer anzeigen"
 
 #: src/main_window.vala:383
 msgid "Show information about specified user"
-msgstr ""
+msgstr "Informationen über einen bestimmten Benutzer anzeigen"
 
 #: src/main_window.vala:389
 msgid "Update timeline"
@@ -400,7 +396,7 @@ msgstr "Unterhaltung"
 
 #: src/status_view_dialog.vala:63
 msgid "go to the web page"
-msgstr ""
+msgstr "Webseite öffnen"
 
 #: src/template.vala:164 src/template.vala:224
 msgid "Reply"
@@ -470,44 +466,40 @@ msgid "%s - a twitter client"
 msgstr "%s - ein Twitter Client"
 
 #: src/user_info_list.vala:48
-#, fuzzy
 msgid "Followers:"
-msgstr "Antwort an <b>%s</b>:"
+msgstr "Follower:"
 
 #: src/user_info_list.vala:49
 msgid "Friends:"
-msgstr ""
+msgstr "Freunde:"
 
 #: src/user_info_list.vala:50
-#, fuzzy
 msgid "Statuses:"
-msgstr "Nachrichten"
+msgstr "Nachrichten:"
 
 #: src/user_info_list.vala:69
 msgid "Web:"
-msgstr ""
+msgstr "Web:"
 
 #: src/user_info_list.vala:90
 msgid "follow"
-msgstr ""
+msgstr "Folgen"
 
 #: src/user_info_list.vala:183
 msgid "This user does not exist"
-msgstr ""
+msgstr "Diesen Benutzer gibt es nicht"
 
 #: src/user_info_list.vala:300
 msgid "Now you follow this user"
-msgstr ""
+msgstr "Du folgst dem Benutzer jetzt"
 
 #: src/user_info_list.vala:302
 msgid "User was unfollowed"
-msgstr ""
+msgstr "Du folgst dem Benutzer nicht mehr"
 
-#, fuzzy
 #~ msgid "Friends:  <b>%s</b>"
 #~ msgstr "Antwort an <b>%s</b>:"
 
-#, fuzzy
 #~ msgid "Statuses:  <b>%s</b>"
 #~ msgstr "Antwort an <b>%s</b>:"
 
index 71aa4e1..c5dd58f 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -2,7 +2,7 @@
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
+# 
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
@@ -29,18 +29,15 @@ msgstr "Servicio"
 
 #: src/account_widget.vala:77
 msgid "API proxy"
-msgstr ""
+msgstr "API Proxy"
 
 #: src/account_widget.vala:159
 msgid "Sure you want to delete this account?"
 msgstr "¿Seguro que quieres eliminar esta cuenta?"
 
 #: src/dm_entry.vala:35
-msgid ""
-"You can't send direct message to this user. He (or she) must follow you too"
-msgstr ""
-"No puedes enviarle un mensaje directo a este usuario. Para ello él debe "
-"seguirte también."
+msgid "You can't send direct message to this user. He (or she) must follow you too"
+msgstr "No puedes enviarle un mensaje directo a este usuario. Para ello él debe seguirte también."
 
 #: src/dm_entry.vala:42
 msgid "Check"
@@ -68,7 +65,7 @@ msgstr "Contraseña"
 
 #: src/edit_account.vala:97
 msgid "API proxy or other service"
-msgstr ""
+msgstr "API Proxy o otros servicios"
 
 #: src/edit_account.vala:109 src/pref_dialog.vala:209
 msgid "Account"
@@ -76,11 +73,11 @@ msgstr "Cuenta"
 
 #: src/edit_account.vala:183
 msgid "You must enter a proxy address"
-msgstr ""
+msgstr "Debes introducir una dirección de proxy"
 
 #: src/edit_account.vala:198
 msgid "Proxy address must contain a valid url"
-msgstr ""
+msgstr "La dirección de proxy debe contener una URL válida"
 
 #: src/edit_account.vala:216
 msgid "You must fill in all fields"
@@ -112,11 +109,11 @@ msgstr "Mostrar mensajes directos"
 
 #: src/main_window.vala:147
 msgid "User info"
-msgstr ""
+msgstr "Información de Usuario"
 
 #: src/main_window.vala:147
 msgid "Show information about user"
-msgstr ""
+msgstr "Mostrar información del usuario"
 
 #: src/main_window.vala:273 src/main_window.vala:274 src/main_window.vala:275
 #: src/status_bar_smart.vala:93 src/status_bar_smart.vala:96
@@ -140,13 +137,12 @@ msgid "Create new direct message"
 msgstr "Crear nuevo mensaje directo"
 
 #: src/main_window.vala:382
-#, fuzzy
 msgid "Show user"
 msgstr "Mostrar menú"
 
 #: src/main_window.vala:383
 msgid "Show information about specified user"
-msgstr ""
+msgstr "Mostrar información acerca del usuario especificado"
 
 #: src/main_window.vala:389
 msgid "Update timeline"
@@ -203,13 +199,13 @@ msgid "Updates"
 msgstr "Actualizaciones"
 
 #: src/popups.vala:140
-#, fuzzy, c-format
-msgid "in the home timeline: %d\n"
+#, c-format
+msgid "in the home timeline: %d"
 msgstr "en timeline: %d"
 
 #: src/popups.vala:143
-#, fuzzy, c-format
-msgid "in mentions: %d\n"
+#, c-format
+msgid "in mentions: %d"
 msgstr "en menciones: %d"
 
 #: src/popups.vala:146
@@ -400,7 +396,7 @@ msgstr "Conversación"
 
 #: src/status_view_dialog.vala:63
 msgid "go to the web page"
-msgstr ""
+msgstr "ir a la página web"
 
 #: src/template.vala:164 src/template.vala:224
 msgid "Reply"
@@ -470,44 +466,40 @@ msgid "%s - a twitter client"
 msgstr "%s - un cliente de twitter"
 
 #: src/user_info_list.vala:48
-#, fuzzy
 msgid "Followers:"
-msgstr "Responder a <b>%s</b>:"
+msgstr "Seguidores:"
 
 #: src/user_info_list.vala:49
 msgid "Friends:"
-msgstr ""
+msgstr "Amigos:"
 
 #: src/user_info_list.vala:50
-#, fuzzy
 msgid "Statuses:"
-msgstr "Tweets"
+msgstr "Tweets:"
 
 #: src/user_info_list.vala:69
 msgid "Web:"
-msgstr ""
+msgstr "Web:"
 
 #: src/user_info_list.vala:90
 msgid "follow"
-msgstr ""
+msgstr "seguir"
 
 #: src/user_info_list.vala:183
 msgid "This user does not exist"
-msgstr ""
+msgstr "Este usuario no existe"
 
 #: src/user_info_list.vala:300
 msgid "Now you follow this user"
-msgstr ""
+msgstr "Ahora sigues a este usuario"
 
 #: src/user_info_list.vala:302
 msgid "User was unfollowed"
-msgstr ""
+msgstr "Usuario sin seguir"
 
-#, fuzzy
 #~ msgid "Friends:  <b>%s</b>"
 #~ msgstr "Responder a <b>%s</b>:"
 
-#, fuzzy
 #~ msgid "Statuses:  <b>%s</b>"
 #~ msgstr "Responder a <b>%s</b>:"
 
index 0ff1aef..3a9936b 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -3,7 +3,7 @@
 # This file is distributed under the same license as the PACKAGE package.
 # Dorian JAMINAIS <dorian.jaminais@gmail.com>, 2009.
 # Frederic Bezies <fredbezies@gmail.com>, 2010.
-#
+# 
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
@@ -30,18 +30,15 @@ msgstr "Service"
 
 #: src/account_widget.vala:77
 msgid "API proxy"
-msgstr ""
+msgstr "Proxy API"
 
 #: src/account_widget.vala:159
 msgid "Sure you want to delete this account?"
 msgstr "Êtes vous sûr de vouloir supprimer ce compte ?"
 
 #: src/dm_entry.vala:35
-msgid ""
-"You can't send direct message to this user. He (or she) must follow you too"
-msgstr ""
-"Vous ne pouvez pas envoyer de messages directs à cet utilisateur. Lui (ou "
-"elle) doit aussi vous suivre"
+msgid "You can't send direct message to this user. He (or she) must follow you too"
+msgstr "Vous ne pouvez pas envoyer de messages directs à cet utilisateur. Lui (ou elle) doit aussi vous suivre"
 
 #: src/dm_entry.vala:42
 msgid "Check"
@@ -69,7 +66,7 @@ msgstr "Mot de passe"
 
 #: src/edit_account.vala:97
 msgid "API proxy or other service"
-msgstr ""
+msgstr "Proxy API ou autre service"
 
 #: src/edit_account.vala:109 src/pref_dialog.vala:209
 msgid "Account"
@@ -77,11 +74,11 @@ msgstr "Compte"
 
 #: src/edit_account.vala:183
 msgid "You must enter a proxy address"
-msgstr ""
+msgstr "Vous devez entrer une adresse de proxy"
 
 #: src/edit_account.vala:198
 msgid "Proxy address must contain a valid url"
-msgstr ""
+msgstr "L'adresse du proxy doit contenir une URL valide"
 
 #: src/edit_account.vala:216
 msgid "You must fill in all fields"
@@ -113,11 +110,11 @@ msgstr "Afficher les messages directs"
 
 #: src/main_window.vala:147
 msgid "User info"
-msgstr ""
+msgstr "Information utilisateur"
 
 #: src/main_window.vala:147
 msgid "Show information about user"
-msgstr ""
+msgstr "Affiche les informations sur l'utilisateur"
 
 #: src/main_window.vala:273 src/main_window.vala:274 src/main_window.vala:275
 #: src/status_bar_smart.vala:93 src/status_bar_smart.vala:96
@@ -141,13 +138,12 @@ msgid "Create new direct message"
 msgstr "Creer un nouveau status"
 
 #: src/main_window.vala:382
-#, fuzzy
 msgid "Show user"
-msgstr "Afficher le menu"
+msgstr "Afficher l'utilisateur"
 
 #: src/main_window.vala:383
 msgid "Show information about specified user"
-msgstr ""
+msgstr "Affiche les informations d'un utilisateur donné"
 
 #: src/main_window.vala:389
 msgid "Update timeline"
@@ -401,7 +397,7 @@ msgstr "Discussion"
 
 #: src/status_view_dialog.vala:63
 msgid "go to the web page"
-msgstr ""
+msgstr "Aller à la page web"
 
 #: src/template.vala:164 src/template.vala:224
 msgid "Reply"
@@ -471,44 +467,40 @@ msgid "%s - a twitter client"
 msgstr "%s - un client twitter"
 
 #: src/user_info_list.vala:48
-#, fuzzy
 msgid "Followers:"
-msgstr "Réponse à <b>%s</b>"
+msgstr "Suiveurs"
 
 #: src/user_info_list.vala:49
 msgid "Friends:"
-msgstr ""
+msgstr "Amis"
 
 #: src/user_info_list.vala:50
-#, fuzzy
 msgid "Statuses:"
 msgstr "Statuts"
 
 #: src/user_info_list.vala:69
 msgid "Web:"
-msgstr ""
+msgstr "Web"
 
 #: src/user_info_list.vala:90
 msgid "follow"
-msgstr ""
+msgstr "Suit"
 
 #: src/user_info_list.vala:183
 msgid "This user does not exist"
-msgstr ""
+msgstr "Cet utilisateur n'existe pas"
 
 #: src/user_info_list.vala:300
 msgid "Now you follow this user"
-msgstr ""
+msgstr "Maintenant vous suivez cet utilisateur"
 
 #: src/user_info_list.vala:302
 msgid "User was unfollowed"
-msgstr ""
+msgstr "Cet utilisateur n'était pas suivi"
 
-#, fuzzy
 #~ msgid "Friends:  <b>%s</b>"
 #~ msgstr "Réponse à <b>%s</b>"
 
-#, fuzzy
 #~ msgid "Statuses:  <b>%s</b>"
 #~ msgstr "Réponse à <b>%s</b>"
 
index 47dde27..1f17919 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -2,7 +2,7 @@
 # Copyright (C) 2009 the Free Software Foundation, Inc.
 # This file is distributed under the same license as the pino package.
 # Daniele Napolitano <dnax88@gmail.com>, 2009.
-#
+# 
 msgid ""
 msgstr ""
 "Project-Id-Version: pino\n"
@@ -29,18 +29,15 @@ msgstr "Servizio"
 
 #: src/account_widget.vala:77
 msgid "API proxy"
-msgstr ""
+msgstr "Proxy per l'API"
 
 #: src/account_widget.vala:159
 msgid "Sure you want to delete this account?"
 msgstr "Si è sicuri di voler eliminare questo account?"
 
 #: src/dm_entry.vala:35
-msgid ""
-"You can't send direct message to this user. He (or she) must follow you too"
-msgstr ""
-"Non è possibile inviare un messaggio diretto a questo utente. Anche lui (o "
-"lei) deve seguirti"
+msgid "You can't send direct message to this user. He (or she) must follow you too"
+msgstr "Non è possibile inviare un messaggio diretto a questo utente. Anche lui (o lei) deve seguirti"
 
 #: src/dm_entry.vala:42
 msgid "Check"
@@ -68,7 +65,7 @@ msgstr "Password"
 
 #: src/edit_account.vala:97
 msgid "API proxy or other service"
-msgstr ""
+msgstr "Proxy API o un altro servizio"
 
 #: src/edit_account.vala:109 src/pref_dialog.vala:209
 msgid "Account"
@@ -76,11 +73,11 @@ msgstr "Account"
 
 #: src/edit_account.vala:183
 msgid "You must enter a proxy address"
-msgstr ""
+msgstr "È necessario inserire l'indirizzo di un proxy"
 
 #: src/edit_account.vala:198
 msgid "Proxy address must contain a valid url"
-msgstr ""
+msgstr "L'indirizzo del proxy deve contenere un url valido"
 
 #: src/edit_account.vala:216
 msgid "You must fill in all fields"
@@ -112,11 +109,11 @@ msgstr "Mostra messaggi diretti"
 
 #: src/main_window.vala:147
 msgid "User info"
-msgstr ""
+msgstr "Informazioni utente"
 
 #: src/main_window.vala:147
 msgid "Show information about user"
-msgstr ""
+msgstr "Mostra informazioni sull'utente"
 
 #: src/main_window.vala:273 src/main_window.vala:274 src/main_window.vala:275
 #: src/status_bar_smart.vala:93 src/status_bar_smart.vala:96
@@ -140,13 +137,12 @@ msgid "Create new direct message"
 msgstr "Crea un nuovo messaggio diretto"
 
 #: src/main_window.vala:382
-#, fuzzy
 msgid "Show user"
-msgstr "Mostra menù"
+msgstr "Mostra utente"
 
 #: src/main_window.vala:383
 msgid "Show information about specified user"
-msgstr ""
+msgstr "Mostra informazioni sull'utente specificato"
 
 #: src/main_window.vala:389
 msgid "Update timeline"
@@ -343,7 +339,7 @@ msgstr "Niente da accorciare"
 
 #: src/re_tweet.vala:123 src/re_tweet.vala:215
 msgid "New status:"
-msgstr "Nuovo stato:"
+msgstr "Nuovo status:"
 
 #: src/re_tweet.vala:132
 msgid "Hide"
@@ -400,7 +396,7 @@ msgstr "Conversazione"
 
 #: src/status_view_dialog.vala:63
 msgid "go to the web page"
-msgstr ""
+msgstr "vai alla pagina web"
 
 #: src/template.vala:164 src/template.vala:224
 msgid "Reply"
@@ -470,44 +466,40 @@ msgid "%s - a twitter client"
 msgstr "%s - un client twitter"
 
 #: src/user_info_list.vala:48
-#, fuzzy
 msgid "Followers:"
-msgstr "Rispondi a <b>%s</b>:"
+msgstr "Follower:"
 
 #: src/user_info_list.vala:49
 msgid "Friends:"
-msgstr ""
+msgstr "Amici"
 
 #: src/user_info_list.vala:50
-#, fuzzy
 msgid "Statuses:"
-msgstr "Stati"
+msgstr "Stati:"
 
 #: src/user_info_list.vala:69
 msgid "Web:"
-msgstr ""
+msgstr "Web:"
 
 #: src/user_info_list.vala:90
 msgid "follow"
-msgstr ""
+msgstr "segue"
 
 #: src/user_info_list.vala:183
 msgid "This user does not exist"
-msgstr ""
+msgstr "Questo utente non esiste"
 
 #: src/user_info_list.vala:300
 msgid "Now you follow this user"
-msgstr ""
+msgstr "Ora stai seguendo quest'utente"
 
 #: src/user_info_list.vala:302
 msgid "User was unfollowed"
-msgstr ""
+msgstr "L'utente non è più seguito"
 
-#, fuzzy
 #~ msgid "Friends:  <b>%s</b>"
 #~ msgstr "Rispondi a <b>%s</b>:"
 
-#, fuzzy
 #~ msgid "Statuses:  <b>%s</b>"
 #~ msgstr "Rispondi a <b>%s</b>:"
 
index 643cf38..c35bd34 100644 (file)
--- a/po/lv.po
+++ b/po/lv.po
@@ -13,32 +13,30 @@ msgstr ""
 "X-Poedit-Country: LATVIA\n"
 
 #: src/account_action.vala:42
-#, fuzzy
 msgid "Accounts"
-msgstr "Konts"
+msgstr "Konti"
 
-#: src/account_widget.vala:75 src/edit_account.vala:74
+#: src/account_widget.vala:75
+#: src/edit_account.vala:74
 msgid "Login"
 msgstr "Lietotājvārds"
 
-#: src/account_widget.vala:76 src/edit_account.vala:83
+#: src/account_widget.vala:76
+#: src/edit_account.vala:83
 msgid "Service"
-msgstr ""
+msgstr "Serviss"
 
 #: src/account_widget.vala:77
 msgid "API proxy"
-msgstr ""
+msgstr "API starpserveris"
 
 #: src/account_widget.vala:159
-#, fuzzy
 msgid "Sure you want to delete this account?"
-msgstr "Vai jūs tiešām vēlaties dzēst šo ziņojumu?"
+msgstr "Vai jūs tiešām vēlaties dzēst šo kontu?"
 
 #: src/dm_entry.vala:35
-msgid ""
-"You can't send direct message to this user. He (or she) must follow you too"
-msgstr ""
-"Jūs nevarat sūtīt vēstuli šim lietotājam. Viņam (vai viņai) jāseko jums."
+msgid "You can't send direct message to this user. He (or she) must follow you too"
+msgstr "Jūs nevarat sūtīt vēstuli šim lietotājam. Viņam (vai viņai) jāseko jums."
 
 #: src/dm_entry.vala:42
 msgid "Check"
@@ -53,14 +51,12 @@ msgid "Checking..."
 msgstr "Pārbauda..."
 
 #: src/edit_account.vala:70
-#, fuzzy
 msgid "Edit account"
-msgstr "Konts"
+msgstr "Labot kontu"
 
 #: src/edit_account.vala:72
-#, fuzzy
 msgid "Create new account"
-msgstr "Izveidot jaunu kontu..."
+msgstr "Izveidot jaunu kontu"
 
 #: src/edit_account.vala:78
 msgid "Password"
@@ -68,23 +64,24 @@ msgstr "Parole"
 
 #: src/edit_account.vala:97
 msgid "API proxy or other service"
-msgstr ""
+msgstr "API starpserveris vai cits serviss"
 
-#: src/edit_account.vala:109 src/pref_dialog.vala:209
+#: src/edit_account.vala:109
+#: src/pref_dialog.vala:209
 msgid "Account"
 msgstr "Konts"
 
 #: src/edit_account.vala:183
 msgid "You must enter a proxy address"
-msgstr ""
+msgstr "Jums jāievada starpservera adrese"
 
 #: src/edit_account.vala:198
 msgid "Proxy address must contain a valid url"
-msgstr ""
+msgstr "Starpservera adresei jābūt derīgai"
 
 #: src/edit_account.vala:216
 msgid "You must fill in all fields"
-msgstr ""
+msgstr "Jums jāaizpilda visi lauki"
 
 #: src/main_window.vala:127
 msgid "Home timeline"
@@ -112,14 +109,17 @@ msgstr "Rādīt vēstules"
 
 #: src/main_window.vala:147
 msgid "User info"
-msgstr ""
+msgstr "Lietotāja informācija"
 
 #: src/main_window.vala:147
 msgid "Show information about user"
-msgstr ""
+msgstr "Rādīt informāciju par lietotāju"
 
-#: src/main_window.vala:273 src/main_window.vala:274 src/main_window.vala:275
-#: src/status_bar_smart.vala:93 src/status_bar_smart.vala:96
+#: src/main_window.vala:273
+#: src/main_window.vala:274
+#: src/main_window.vala:275
+#: src/status_bar_smart.vala:93
+#: src/status_bar_smart.vala:96
 msgid "updated "
 msgstr "atjaunots"
 
@@ -140,13 +140,12 @@ msgid "Create new direct message"
 msgstr "Izveidot jaunu vēstuli"
 
 #: src/main_window.vala:382
-#, fuzzy
 msgid "Show user"
-msgstr "Rādīt izvēlni"
+msgstr "Rādīt lietotāju"
 
 #: src/main_window.vala:383
 msgid "Show information about specified user"
-msgstr ""
+msgstr "Rādīt informāciju par izvēlēto lietotāju"
 
 #: src/main_window.vala:389
 msgid "Update timeline"
@@ -158,9 +157,10 @@ msgstr "Iziet"
 
 #: src/main_window.vala:397
 msgid "Edit"
-msgstr "Rediģēt"
+msgstr "Labot"
 
-#: src/main_window.vala:400 src/pref_dialog.vala:57
+#: src/main_window.vala:400
+#: src/pref_dialog.vala:57
 msgid "Preferences"
 msgstr "Iestatījumi"
 
@@ -189,7 +189,9 @@ msgstr "Par %s"
 msgid "Get older entries"
 msgstr "Iegūt vecākus ierakstus"
 
-#: src/popups.vala:75 src/template.vala:166 src/template.vala:227
+#: src/popups.vala:75
+#: src/template.vala:166
+#: src/template.vala:227
 #, c-format
 msgid "Direct message"
 msgstr "Vēstule"
@@ -231,12 +233,11 @@ msgstr "Adrešu saīsināšanas serviss"
 
 #: src/pref_dialog.vala:80
 msgid "Starting up in tray"
-msgstr "Sākt sistēmas ikonu joslā"
+msgstr "Sākt sistēmjoslā"
 
 #: src/pref_dialog.vala:83
-#, fuzzy
 msgid "Show tray icon"
-msgstr "Rādīt atsauksmes"
+msgstr "Rādīt sistēmjoslas ikonu"
 
 #: src/pref_dialog.vala:86
 msgid "For timeline"
@@ -271,9 +272,8 @@ msgid "Cache"
 msgstr "Kešatmiņa"
 
 #: src/pref_dialog.vala:130
-#, fuzzy
 msgid "Notification area"
-msgstr "Paziņojumi"
+msgstr "Paziņojumu lauks"
 
 #: src/pref_dialog.vala:134
 msgid "Notification"
@@ -297,7 +297,7 @@ msgstr "Noapaļoti stūri"
 
 #: src/pref_dialog.vala:177
 msgid "Right-to-left languages detection"
-msgstr "RTL valodu noteikšana"
+msgstr "No labās uz kreiso valodu noteikšana"
 
 #: src/pref_dialog.vala:180
 msgid "Full names instead of nicknames"
@@ -321,7 +321,7 @@ msgstr "Galvenais"
 
 #: src/pref_dialog.vala:208
 msgid "Desktop"
-msgstr ""
+msgstr "Darbvirsma"
 
 #: src/pref_dialog.vala:210
 msgid "Appearance"
@@ -343,7 +343,8 @@ msgstr "Adreses tika veiksmīgi saīsinātas"
 msgid "Nothing to shorten"
 msgstr "Nav ko īsināt"
 
-#: src/re_tweet.vala:123 src/re_tweet.vala:215
+#: src/re_tweet.vala:123
+#: src/re_tweet.vala:215
 msgid "New status:"
 msgstr "Jauns ziņojums:"
 
@@ -398,17 +399,19 @@ msgstr "atjauno..."
 
 #: src/status_view_dialog.vala:35
 msgid "Conversation"
-msgstr ""
+msgstr "Saruna"
 
 #: src/status_view_dialog.vala:63
 msgid "go to the web page"
-msgstr ""
+msgstr "doties uz mājaslapu"
 
-#: src/template.vala:164 src/template.vala:224
+#: src/template.vala:164
+#: src/template.vala:224
 msgid "Reply"
 msgstr "Atbildēt"
 
-#: src/template.vala:165 src/template.vala:225
+#: src/template.vala:165
+#: src/template.vala:225
 msgid "Delete"
 msgstr "Dzēst"
 
@@ -472,38 +475,36 @@ msgid "%s - a twitter client"
 msgstr "%s - twitter klients"
 
 #: src/user_info_list.vala:48
-#, fuzzy
 msgid "Followers:"
-msgstr "Atbilde <b>%s</b>:"
+msgstr "Sekotāji:"
 
 #: src/user_info_list.vala:49
 msgid "Friends:"
-msgstr ""
+msgstr "Draugi:"
 
 #: src/user_info_list.vala:50
-#, fuzzy
 msgid "Statuses:"
-msgstr "Ziņojumi"
+msgstr "Ziņojumi:"
 
 #: src/user_info_list.vala:69
 msgid "Web:"
-msgstr ""
+msgstr "Mājaslapa:"
 
 #: src/user_info_list.vala:90
 msgid "follow"
-msgstr ""
+msgstr "sekot"
 
 #: src/user_info_list.vala:183
 msgid "This user does not exist"
-msgstr ""
+msgstr "Šāds lietotājs neeksistē"
 
 #: src/user_info_list.vala:300
 msgid "Now you follow this user"
-msgstr ""
+msgstr "Tagad jūs sekojat šim lietotājam"
 
 #: src/user_info_list.vala:302
 msgid "User was unfollowed"
-msgstr ""
+msgstr "Jūs vairs nesekojat lietotājam"
 
 #, fuzzy
 #~ msgid "Friends:  <b>%s</b>"
@@ -512,9 +513,8 @@ msgstr ""
 #, fuzzy
 #~ msgid "Statuses:  <b>%s</b>"
 #~ msgstr "Atbilde <b>%s</b>:"
-
 #~ msgid "Twitter"
 #~ msgstr "Twitter"
-
 #~ msgid "Remember password"
 #~ msgstr "Atcerēties paroli"
+
index 0095c2e..f1e709c 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@ msgstr ""
 "Project-Id-Version: pl\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-03-07 11:29+0200\n"
-"PO-Revision-Date: 2010-02-21 23:37+0100\n"
+"PO-Revision-Date: 2010-03-08 13:05+0100\n"
 "Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
 "Language-Team: Polish <trans-pl@lists.fedoraproject.org>\n"
 "MIME-Version: 1.0\n"
@@ -27,7 +27,7 @@ msgstr "Usługa"
 
 #: src/account_widget.vala:77
 msgid "API proxy"
-msgstr ""
+msgstr "Pośrednik API"
 
 #: src/account_widget.vala:159
 msgid "Sure you want to delete this account?"
@@ -66,7 +66,7 @@ msgstr "Hasło"
 
 #: src/edit_account.vala:97
 msgid "API proxy or other service"
-msgstr ""
+msgstr "Pośrednik API lub inny serwis"
 
 #: src/edit_account.vala:109 src/pref_dialog.vala:209
 msgid "Account"
@@ -74,11 +74,11 @@ msgstr "Konto"
 
 #: src/edit_account.vala:183
 msgid "You must enter a proxy address"
-msgstr ""
+msgstr "Należy podać adres pośrednika"
 
 #: src/edit_account.vala:198
 msgid "Proxy address must contain a valid url"
-msgstr ""
+msgstr "Adres pośrednika musi zawierać prawidłowy adres URL"
 
 #: src/edit_account.vala:216
 msgid "You must fill in all fields"
@@ -110,11 +110,11 @@ msgstr "Wyświetlanie bezpośrednich wiadomości"
 
 #: src/main_window.vala:147
 msgid "User info"
-msgstr ""
+msgstr "Informacje o użytkowniku"
 
 #: src/main_window.vala:147
 msgid "Show information about user"
-msgstr ""
+msgstr "Wyświetlanie informacji o użytkowniku"
 
 #: src/main_window.vala:273 src/main_window.vala:274 src/main_window.vala:275
 #: src/status_bar_smart.vala:93 src/status_bar_smart.vala:96
@@ -138,13 +138,12 @@ msgid "Create new direct message"
 msgstr "Utwórz nową bezpośrednią wiadomość"
 
 #: src/main_window.vala:382
-#, fuzzy
 msgid "Show user"
-msgstr "Wyświetlanie menu"
+msgstr "Wyświetlanie użytkownika"
 
 #: src/main_window.vala:383
 msgid "Show information about specified user"
-msgstr ""
+msgstr "Wyświetlanie informacji o podanym użytkowniku"
 
 #: src/main_window.vala:389
 msgid "Update timeline"
@@ -398,7 +397,7 @@ msgstr "Rozmowa"
 
 #: src/status_view_dialog.vala:63
 msgid "go to the web page"
-msgstr ""
+msgstr "przejdź na stronę WWW"
 
 #: src/template.vala:164 src/template.vala:224
 msgid "Reply"
@@ -468,49 +467,33 @@ msgid "%s - a twitter client"
 msgstr "%s - klient serwisu Twitter"
 
 #: src/user_info_list.vala:48
-#, fuzzy
 msgid "Followers:"
-msgstr "Odpowiedź na <b>%s</b>:"
+msgstr "Obserwujący:"
 
 #: src/user_info_list.vala:49
 msgid "Friends:"
-msgstr ""
+msgstr "Przyjaciele:"
 
 #: src/user_info_list.vala:50
-#, fuzzy
 msgid "Statuses:"
-msgstr "Stany"
+msgstr "Stany:"
 
 #: src/user_info_list.vala:69
 msgid "Web:"
-msgstr ""
+msgstr "WWW:"
 
 #: src/user_info_list.vala:90
 msgid "follow"
-msgstr ""
+msgstr "obserwuj"
 
 #: src/user_info_list.vala:183
 msgid "This user does not exist"
-msgstr ""
+msgstr "Ten użytkownik nie istnieje"
 
 #: src/user_info_list.vala:300
 msgid "Now you follow this user"
-msgstr ""
+msgstr "Ten użytkownik jest teraz obserwowany"
 
 #: src/user_info_list.vala:302
 msgid "User was unfollowed"
-msgstr ""
-
-#, fuzzy
-#~ msgid "Friends:  <b>%s</b>"
-#~ msgstr "Odpowiedź na <b>%s</b>:"
-
-#, fuzzy
-#~ msgid "Statuses:  <b>%s</b>"
-#~ msgstr "Odpowiedź na <b>%s</b>:"
-
-#~ msgid "Twitter"
-#~ msgstr "Twitter"
-
-#~ msgid "Remember password"
-#~ msgstr "Zapamiętanie hasła"
+msgstr "Użytkownik nie jest już obserwowany"
index d21723e..6efbbc4 100644 (file)
--- a/po/pt.po
+++ b/po/pt.po
@@ -2,7 +2,7 @@
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
+# 
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
@@ -29,18 +29,15 @@ msgstr "Serviço"
 
 #: src/account_widget.vala:77
 msgid "API proxy"
-msgstr ""
+msgstr "API Proxy"
 
 #: src/account_widget.vala:159
 msgid "Sure you want to delete this account?"
 msgstr "Tem a certeza que deseja apagar esta Conta?"
 
 #: src/dm_entry.vala:35
-msgid ""
-"You can't send direct message to this user. He (or she) must follow you too"
-msgstr ""
-"Não pode enviar uma Mensagem Directa a este utilizador. Ele (ou ela) têm que "
-"o seguir também."
+msgid "You can't send direct message to this user. He (or she) must follow you too"
+msgstr "Não pode enviar uma Mensagem Directa a este utilizador. Ele (ou ela) têm que o seguir também."
 
 #: src/dm_entry.vala:42
 msgid "Check"
@@ -68,7 +65,7 @@ msgstr "Palavra-passe"
 
 #: src/edit_account.vala:97
 msgid "API proxy or other service"
-msgstr ""
+msgstr "API Proxy ou outro serviço"
 
 #: src/edit_account.vala:109 src/pref_dialog.vala:209
 msgid "Account"
@@ -76,11 +73,11 @@ msgstr "Conta"
 
 #: src/edit_account.vala:183
 msgid "You must enter a proxy address"
-msgstr ""
+msgstr "Precisa introduzir um endereço de proxy"
 
 #: src/edit_account.vala:198
 msgid "Proxy address must contain a valid url"
-msgstr ""
+msgstr "O endereço de proxy tem que ter um URL válido"
 
 #: src/edit_account.vala:216
 msgid "You must fill in all fields"
@@ -112,11 +109,11 @@ msgstr "Mostrar Mensagens Directas"
 
 #: src/main_window.vala:147
 msgid "User info"
-msgstr ""
+msgstr "Informação do Utilizador"
 
 #: src/main_window.vala:147
 msgid "Show information about user"
-msgstr ""
+msgstr "Mostrar Informação sobre o Utilizador"
 
 #: src/main_window.vala:273 src/main_window.vala:274 src/main_window.vala:275
 #: src/status_bar_smart.vala:93 src/status_bar_smart.vala:96
@@ -140,13 +137,12 @@ msgid "Create new direct message"
 msgstr "Criar nova Mensagem Directa"
 
 #: src/main_window.vala:382
-#, fuzzy
 msgid "Show user"
-msgstr "Mostrar Menu"
+msgstr "Mostrar Utilizador"
 
 #: src/main_window.vala:383
 msgid "Show information about specified user"
-msgstr ""
+msgstr "Mostrar Informação sobre o Utilizador especificado"
 
 #: src/main_window.vala:389
 msgid "Update timeline"
@@ -400,7 +396,7 @@ msgstr "Conversação"
 
 #: src/status_view_dialog.vala:63
 msgid "go to the web page"
-msgstr ""
+msgstr "ir para a página web"
 
 #: src/template.vala:164 src/template.vala:224
 msgid "Reply"
@@ -470,44 +466,40 @@ msgid "%s - a twitter client"
 msgstr "%s - Um Cliente de Twitter"
 
 #: src/user_info_list.vala:48
-#, fuzzy
 msgid "Followers:"
-msgstr "Responder a <b>%s</b>"
+msgstr "Seguidores:"
 
 #: src/user_info_list.vala:49
 msgid "Friends:"
-msgstr ""
+msgstr "Amigos:"
 
 #: src/user_info_list.vala:50
-#, fuzzy
 msgid "Statuses:"
-msgstr "Estados"
+msgstr "Estados:"
 
 #: src/user_info_list.vala:69
 msgid "Web:"
-msgstr ""
+msgstr "Web:"
 
 #: src/user_info_list.vala:90
 msgid "follow"
-msgstr ""
+msgstr "seguir"
 
 #: src/user_info_list.vala:183
 msgid "This user does not exist"
-msgstr ""
+msgstr "Este Utilizador não existe"
 
 #: src/user_info_list.vala:300
 msgid "Now you follow this user"
-msgstr ""
+msgstr "Estás a seguir este Utilizador"
 
 #: src/user_info_list.vala:302
 msgid "User was unfollowed"
-msgstr ""
+msgstr "Deixaste de seguir o Utilizador"
 
-#, fuzzy
 #~ msgid "Friends:  <b>%s</b>"
 #~ msgstr "Responder a <b>%s</b>"
 
-#, fuzzy
 #~ msgid "Statuses:  <b>%s</b>"
 #~ msgstr "Responder a <b>%s</b>"
 
index 2ebbb8a..250903d 100644 (file)
@@ -30,7 +30,7 @@ msgstr "Serviço"
 
 #: src/account_widget.vala:77
 msgid "API proxy"
-msgstr ""
+msgstr "Proxy API"
 
 #: src/account_widget.vala:159
 msgid "Sure you want to delete this account?"
@@ -69,7 +69,7 @@ msgstr "Senha"
 
 #: src/edit_account.vala:97
 msgid "API proxy or other service"
-msgstr ""
+msgstr "Proxy API ou outro serviço"
 
 #: src/edit_account.vala:109 src/pref_dialog.vala:209
 msgid "Account"
@@ -77,11 +77,11 @@ msgstr "Conta"
 
 #: src/edit_account.vala:183
 msgid "You must enter a proxy address"
-msgstr ""
+msgstr "Você tem de introduzir um endereço proxy"
 
 #: src/edit_account.vala:198
 msgid "Proxy address must contain a valid url"
-msgstr ""
+msgstr "O endereço proxy tem de conter um url válido"
 
 #: src/edit_account.vala:216
 msgid "You must fill in all fields"
@@ -113,11 +113,11 @@ msgstr "Mostrar mensagens diretas"
 
 #: src/main_window.vala:147
 msgid "User info"
-msgstr ""
+msgstr "Info de usuário"
 
 #: src/main_window.vala:147
 msgid "Show information about user"
-msgstr ""
+msgstr "Mostrar informação sobre o usuário"
 
 #: src/main_window.vala:273 src/main_window.vala:274 src/main_window.vala:275
 #: src/status_bar_smart.vala:93 src/status_bar_smart.vala:96
@@ -141,13 +141,12 @@ msgid "Create new direct message"
 msgstr "Criar nova mensagem direta"
 
 #: src/main_window.vala:382
-#, fuzzy
 msgid "Show user"
-msgstr "Mostrar menu"
+msgstr "Mostrar utilizador"
 
 #: src/main_window.vala:383
 msgid "Show information about specified user"
-msgstr ""
+msgstr "Mostrar informação sobre o usuário especificado"
 
 #: src/main_window.vala:389
 msgid "Update timeline"
@@ -236,7 +235,7 @@ msgstr "Iniciar na bandeija"
 
 #: src/pref_dialog.vala:83
 msgid "Show tray icon"
-msgstr "Mostrar menções"
+msgstr "Mostrar icon de bandeja"
 
 #: src/pref_dialog.vala:86
 msgid "For timeline"
@@ -401,7 +400,7 @@ msgstr "Conversa"
 
 #: src/status_view_dialog.vala:63
 msgid "go to the web page"
-msgstr ""
+msgstr "ir para a página web"
 
 #: src/template.vala:164 src/template.vala:224
 msgid "Reply"
@@ -471,38 +470,36 @@ msgid "%s - a twitter client"
 msgstr "%s - Um cliente para o Twitter"
 
 #: src/user_info_list.vala:48
-#, fuzzy
 msgid "Followers:"
-msgstr "Responder para <b>%s</b>"
+msgstr "Seguidores:"
 
 #: src/user_info_list.vala:49
 msgid "Friends:"
-msgstr ""
+msgstr "Amigos:"
 
 #: src/user_info_list.vala:50
-#, fuzzy
 msgid "Statuses:"
 msgstr "Status"
 
 #: src/user_info_list.vala:69
 msgid "Web:"
-msgstr ""
+msgstr "Web:"
 
 #: src/user_info_list.vala:90
 msgid "follow"
-msgstr ""
+msgstr "seguir"
 
 #: src/user_info_list.vala:183
 msgid "This user does not exist"
-msgstr ""
+msgstr "Este usuário não existe"
 
 #: src/user_info_list.vala:300
 msgid "Now you follow this user"
-msgstr ""
+msgstr "Agora você segue este usuário"
 
 #: src/user_info_list.vala:302
 msgid "User was unfollowed"
-msgstr ""
+msgstr "Usuário foi des-seguido"
 
 #, fuzzy
 #~ msgid "Friends:  <b>%s</b>"
index 1418d3a..9c10057 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -29,16 +29,15 @@ msgstr "Сервис"
 
 #: src/account_widget.vala:77
 msgid "API proxy"
-msgstr ""
+msgstr "API прокси"
 
 #: src/account_widget.vala:159
 msgid "Sure you want to delete this account?"
 msgstr "Уверены, что хотите удалить эту учётную запись?"
 
 #: src/dm_entry.vala:35
-#, fuzzy
 msgid "You can't send direct message to this user. He (or she) must follow you too"
-msgstr "Вы не можете послать сообщение этому пользователю. Он (она) должен последовать за Вами"
+msgstr "Вы не можете послать личное сообщение этому пользователю. Он (она) должен подписаться на ваш микроблог"
 
 #: src/dm_entry.vala:42
 msgid "Check"
@@ -66,7 +65,7 @@ msgstr "Пароль"
 
 #: src/edit_account.vala:97
 msgid "API proxy or other service"
-msgstr ""
+msgstr "Адрес другого сервиса"
 
 #: src/edit_account.vala:109 src/pref_dialog.vala:209
 msgid "Account"
@@ -74,11 +73,11 @@ msgstr "Учетная запись"
 
 #: src/edit_account.vala:183
 msgid "You must enter a proxy address"
-msgstr ""
+msgstr "Вы должны ввести адрес сервиса"
 
 #: src/edit_account.vala:198
 msgid "Proxy address must contain a valid url"
-msgstr ""
+msgstr "Адрес прокси должен быть рабочим"
 
 #: src/edit_account.vala:216
 msgid "You must fill in all fields"
@@ -102,19 +101,19 @@ msgstr "Показать упоминания"
 
 #: src/main_window.vala:141
 msgid "Direct messages"
-msgstr "СообÑ\89ениÑ\8f Ð¾Ñ\82 Ð¿Ð¾Ð»Ñ\8cзоваÑ\82елей"
+msgstr "Ð\9eÑ\82веÑ\82Ñ\8b"
 
 #: src/main_window.vala:142
 msgid "Show direct messages"
-msgstr "Показать личные сообщения от пользователей"
+msgstr "Показать личные сообщения"
 
 #: src/main_window.vala:147
 msgid "User info"
-msgstr ""
+msgstr "Информация о пользователе"
 
 #: src/main_window.vala:147
 msgid "Show information about user"
-msgstr ""
+msgstr "Показать информацию о пользователе"
 
 #: src/main_window.vala:273 src/main_window.vala:274 src/main_window.vala:275
 #: src/status_bar_smart.vala:93 src/status_bar_smart.vala:96
@@ -131,21 +130,19 @@ msgstr "Создать новый статус"
 
 #: src/main_window.vala:375
 msgid "New direct message"
-msgstr "Ð\9dапиÑ\81аÑ\82Ñ\8c Ð¾Ð¿Ñ\80еделÑ\91нномÑ\83 Ð¿Ð¾Ð»Ñ\8cзоваÑ\82елÑ\8e"
+msgstr "Ð\9dапиÑ\81аÑ\82Ñ\8c Ð´Ñ\80Ñ\83гÑ\83"
 
 #: src/main_window.vala:376
-#, fuzzy
 msgid "Create new direct message"
-msgstr "Создать новый статус"
+msgstr "Создать новое сообщение другу"
 
 #: src/main_window.vala:382
-#, fuzzy
 msgid "Show user"
-msgstr "Ð\9fоказаÑ\82Ñ\8c Ð¼ÐµÐ½Ñ\8e"
+msgstr "Ð\9dайÑ\82и Ð¿Ð¾Ð»Ñ\8cзоваÑ\82елÑ\8f"
 
 #: src/main_window.vala:383
 msgid "Show information about specified user"
-msgstr ""
+msgstr "Показать информацию об указанном пользователе"
 
 #: src/main_window.vala:389
 msgid "Update timeline"
@@ -202,7 +199,7 @@ msgid "Updates"
 msgstr "Обновления"
 
 #: src/popups.vala:140
-#, fuzzy, c-format
+#, c-format
 msgid "in the home timeline: %d\n"
 msgstr "в домашней ленте новостей: %d\n"
 
@@ -214,7 +211,7 @@ msgstr "в упоминаниях: %d\n"
 #: src/popups.vala:146
 #, c-format
 msgid "in direct messages: %d"
-msgstr ""
+msgstr "в личных сообщениях: %d"
 
 #: src/pref_dialog.vala:66
 msgid "Update interval (in minutes)"
@@ -222,7 +219,7 @@ msgstr "Интервал обновления (в минутах)"
 
 #: src/pref_dialog.vala:70
 msgid "Default number of statuses"
-msgstr "Количество статусов по умолчанию"
+msgstr "Количество отображаемых статусов статусов"
 
 #: src/pref_dialog.vala:74
 msgid "URL shortening service"
@@ -246,7 +243,7 @@ msgstr "Для упоминаний"
 
 #: src/pref_dialog.vala:88
 msgid "For direct messages"
-msgstr ""
+msgstr "Для личных сообщений"
 
 #: src/pref_dialog.vala:97
 msgid "Retweets style"
@@ -257,9 +254,8 @@ msgid "Clear now"
 msgstr "Очистить сейчас"
 
 #: src/pref_dialog.vala:111
-#, fuzzy
 msgid "General"
-msgstr "Ð\98нÑ\82еÑ\80вал Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ\8f"
+msgstr "Ð\9eÑ\81новнÑ\8bе"
 
 #: src/pref_dialog.vala:116
 msgid "Retweets"
@@ -303,11 +299,11 @@ msgstr "Показывать полные имена"
 
 #: src/pref_dialog.vala:183
 msgid "Default font"
-msgstr "шрифт по умолчанию"
+msgstr "Шрифт по умолчанию"
 
 #: src/pref_dialog.vala:189
 msgid "Fresh statuses color"
-msgstr ""
+msgstr "Выделять новые статусы цветом"
 
 #: src/pref_dialog.vala:194
 msgid "Opacity"
@@ -327,11 +323,11 @@ msgstr "Внешний вид"
 
 #: src/re_tweet.vala:88
 msgid "Shorten URLs..."
-msgstr "СокÑ\80аÑ\89Ñ\91ннÑ\8bе URL"
+msgstr "СокÑ\80аÑ\82иÑ\82Ñ\8c URL..."
 
 #: src/re_tweet.vala:93
 msgid "Shortening URLs..."
-msgstr "Сокращение URL"
+msgstr "Сокращение URL..."
 
 #: src/re_tweet.vala:98
 msgid "URLs was shortened successfully"
@@ -339,7 +335,7 @@ msgstr "Сокращение URL успешно завершено"
 
 #: src/re_tweet.vala:100
 msgid "Nothing to shorten"
-msgstr ""
+msgstr "Нет адресов для сокращения"
 
 #: src/re_tweet.vala:123 src/re_tweet.vala:215
 msgid "New status:"
@@ -395,13 +391,12 @@ msgid "updating... "
 msgstr "обновление..."
 
 #: src/status_view_dialog.vala:35
-#, fuzzy
 msgid "Conversation"
 msgstr "Беседа"
 
 #: src/status_view_dialog.vala:63
 msgid "go to the web page"
-msgstr ""
+msgstr "Перейти к странице"
 
 #: src/template.vala:164 src/template.vala:224
 msgid "Reply"
@@ -471,38 +466,36 @@ msgid "%s - a twitter client"
 msgstr "%s - твиттер клиент"
 
 #: src/user_info_list.vala:48
-#, fuzzy
 msgid "Followers:"
-msgstr "Ð\9eÑ\82веÑ\82иÑ\82Ñ\8c <b>%s</b>:"
+msgstr "Ð\9fодпиÑ\81Ñ\87иков:"
 
 #: src/user_info_list.vala:49
 msgid "Friends:"
-msgstr ""
+msgstr "Друзей:"
 
 #: src/user_info_list.vala:50
-#, fuzzy
 msgid "Statuses:"
-msgstr "Статусы"
+msgstr "Сообщений:"
 
 #: src/user_info_list.vala:69
 msgid "Web:"
-msgstr ""
+msgstr "Страница:"
 
 #: src/user_info_list.vala:90
 msgid "follow"
-msgstr ""
+msgstr "подписаться"
 
 #: src/user_info_list.vala:183
 msgid "This user does not exist"
-msgstr ""
+msgstr "Не существует такого пользователя"
 
 #: src/user_info_list.vala:300
 msgid "Now you follow this user"
-msgstr ""
+msgstr "Теперь Вы подписаны на этот микроблог"
 
 #: src/user_info_list.vala:302
 msgid "User was unfollowed"
-msgstr ""
+msgstr "Вы больше не подписаны на этот микроблог"
 
 #~ msgid "Friends:  <b>%s</b>"
 #~ msgstr "Ответить <b>%s</b>:"
index 71cba8e..704a79d 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-03-07 11:29+0200\n"
-"PO-Revision-Date: 2010-02-12 21:08+0100\n"
+"PO-Revision-Date: 2010-03-07 17:51+0100\n"
 "Last-Translator: Johan Eriksson <hund@lathund.nu>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
@@ -21,28 +21,27 @@ msgstr ""
 msgid "Accounts"
 msgstr "Konton"
 
-#: src/account_widget.vala:75 src/edit_account.vala:74
+#: src/account_widget.vala:75
+#: src/edit_account.vala:74
 msgid "Login"
 msgstr "Användarnamn"
 
-#: src/account_widget.vala:76 src/edit_account.vala:83
+#: src/account_widget.vala:76
+#: src/edit_account.vala:83
 msgid "Service"
 msgstr "Tjänst"
 
 #: src/account_widget.vala:77
 msgid "API proxy"
-msgstr ""
+msgstr "API proxy"
 
 #: src/account_widget.vala:159
 msgid "Sure you want to delete this account?"
 msgstr "Är du säker på att du vill ta bort det här kontot?"
 
 #: src/dm_entry.vala:35
-msgid ""
-"You can't send direct message to this user. He (or she) must follow you too"
-msgstr ""
-"Du kan inte skicka direktmeddelanden till denna användare. Han/hon måste "
-"följa dig"
+msgid "You can't send direct message to this user. He (or she) must follow you too"
+msgstr "Du kan inte skicka direktmeddelanden till denna användare. Han/hon måste följa dig"
 
 #: src/dm_entry.vala:42
 msgid "Check"
@@ -70,19 +69,20 @@ msgstr "Lösenord"
 
 #: src/edit_account.vala:97
 msgid "API proxy or other service"
-msgstr ""
+msgstr "API proxy eller annan tjänst"
 
-#: src/edit_account.vala:109 src/pref_dialog.vala:209
+#: src/edit_account.vala:109
+#: src/pref_dialog.vala:209
 msgid "Account"
 msgstr "Konto"
 
 #: src/edit_account.vala:183
 msgid "You must enter a proxy address"
-msgstr ""
+msgstr "Du måste ange en proxy-adress"
 
 #: src/edit_account.vala:198
 msgid "Proxy address must contain a valid url"
-msgstr ""
+msgstr "Proxy-adressen måste innehålla en giltig URL"
 
 #: src/edit_account.vala:216
 msgid "You must fill in all fields"
@@ -114,14 +114,17 @@ msgstr "Visa direktmeddelanden"
 
 #: src/main_window.vala:147
 msgid "User info"
-msgstr ""
+msgstr "Användarinfo"
 
 #: src/main_window.vala:147
 msgid "Show information about user"
-msgstr ""
+msgstr "Visa information om användaren"
 
-#: src/main_window.vala:273 src/main_window.vala:274 src/main_window.vala:275
-#: src/status_bar_smart.vala:93 src/status_bar_smart.vala:96
+#: src/main_window.vala:273
+#: src/main_window.vala:274
+#: src/main_window.vala:275
+#: src/status_bar_smart.vala:93
+#: src/status_bar_smart.vala:96
 msgid "updated "
 msgstr "uppdaterad"
 
@@ -142,13 +145,12 @@ msgid "Create new direct message"
 msgstr "Skapa nytt direktmeddelande"
 
 #: src/main_window.vala:382
-#, fuzzy
 msgid "Show user"
-msgstr "Visa meny"
+msgstr "Visa användare"
 
 #: src/main_window.vala:383
 msgid "Show information about specified user"
-msgstr ""
+msgstr "Visa information om specifik användare"
 
 #: src/main_window.vala:389
 msgid "Update timeline"
@@ -162,7 +164,8 @@ msgstr "Avsluta"
 msgid "Edit"
 msgstr "Redigera"
 
-#: src/main_window.vala:400 src/pref_dialog.vala:57
+#: src/main_window.vala:400
+#: src/pref_dialog.vala:57
 msgid "Preferences"
 msgstr "Inställningar"
 
@@ -191,7 +194,9 @@ msgstr "Om %s"
 msgid "Get older entries"
 msgstr "Hämta äldre inlägg"
 
-#: src/popups.vala:75 src/template.vala:166 src/template.vala:227
+#: src/popups.vala:75
+#: src/template.vala:166
+#: src/template.vala:227
 #, c-format
 msgid "Direct message"
 msgstr "Direktmeddelande"
@@ -343,7 +348,8 @@ msgstr "URL:en förkortades framgångsrikt"
 msgid "Nothing to shorten"
 msgstr "Inget att förkorta"
 
-#: src/re_tweet.vala:123 src/re_tweet.vala:215
+#: src/re_tweet.vala:123
+#: src/re_tweet.vala:215
 msgid "New status:"
 msgstr "Ny status:"
 
@@ -402,13 +408,15 @@ msgstr "Konversation"
 
 #: src/status_view_dialog.vala:63
 msgid "go to the web page"
-msgstr ""
+msgstr "gå till webbadressen"
 
-#: src/template.vala:164 src/template.vala:224
+#: src/template.vala:164
+#: src/template.vala:224
 msgid "Reply"
 msgstr "Svara"
 
-#: src/template.vala:165 src/template.vala:225
+#: src/template.vala:165
+#: src/template.vala:225
 msgid "Delete"
 msgstr "Radera"
 
@@ -472,38 +480,36 @@ msgid "%s - a twitter client"
 msgstr "%s - en twitterklient"
 
 #: src/user_info_list.vala:48
-#, fuzzy
 msgid "Followers:"
-msgstr "Svara till <b>%s</b>:"
+msgstr "Följare"
 
 #: src/user_info_list.vala:49
 msgid "Friends:"
-msgstr ""
+msgstr "Vänner:"
 
 #: src/user_info_list.vala:50
-#, fuzzy
 msgid "Statuses:"
 msgstr "Statusar"
 
 #: src/user_info_list.vala:69
 msgid "Web:"
-msgstr ""
+msgstr "Webb:"
 
 #: src/user_info_list.vala:90
 msgid "follow"
-msgstr ""
+msgstr "följ"
 
 #: src/user_info_list.vala:183
 msgid "This user does not exist"
-msgstr ""
+msgstr "Användaren existerar inte"
 
 #: src/user_info_list.vala:300
 msgid "Now you follow this user"
-msgstr ""
+msgstr "Du följer nu användaren"
 
 #: src/user_info_list.vala:302
 msgid "User was unfollowed"
-msgstr ""
+msgstr "Användaren följs inte längre"
 
 #, fuzzy
 #~ msgid "Friends:  <b>%s</b>"
@@ -512,36 +518,26 @@ msgstr ""
 #, fuzzy
 #~ msgid "Statuses:  <b>%s</b>"
 #~ msgstr "Svara till <b>%s</b>:"
-
 #~ msgid "Twitter"
 #~ msgstr "Twitter"
-
 #~ msgid "Remember password"
 #~ msgstr "Kom ihåg lösenordet"
-
 #~ msgid "Show notification for each status"
 #~ msgstr "Visa notifikation för varje status"
-
 #~ msgid "Show overall notification"
 #~ msgstr "Visa övergripande notifikation"
-
 #~ msgid "REST API options"
 #~ msgstr "REST API val"
-
 #~ msgid "Tweets"
 #~ msgstr "Tweets"
-
 #~ msgid "Timeline"
 #~ msgstr "Tidslinje"
-
 #~ msgid "wrong login or password "
 #~ msgstr "felaktigt användarnamn eller lösenord"
-
 #~ msgid "problems with connection "
 #~ msgstr "problem med anslutningen"
-
 #~ msgid "some strange error "
 #~ msgstr "något konstigt fel"
-
 #~ msgid "Main developer and project owner:"
 #~ msgstr "Головний розробник і власник проекту:"
+
index aa7683a..ef0df03 100644 (file)
--- a/po/th.po
+++ b/po/th.po
@@ -2,8 +2,8 @@
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 # Athasiri Laohavanich <athasiri@gmail.com>, 2009.
-#
-#
+# 
+# 
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
@@ -17,7 +17,6 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 
 #: src/account_action.vala:42
-#, fuzzy
 msgid "Accounts"
 msgstr "บัญชีผู้ใช้"
 
@@ -27,20 +26,18 @@ msgstr "ชื่อบัญชีผู้ใช้"
 
 #: src/account_widget.vala:76 src/edit_account.vala:83
 msgid "Service"
-msgstr ""
+msgstr "บริการ"
 
 #: src/account_widget.vala:77
 msgid "API proxy"
 msgstr ""
 
 #: src/account_widget.vala:159
-#, fuzzy
 msgid "Sure you want to delete this account?"
-msgstr "à¸\84ุà¸\93à¹\81à¸\99à¹\88à¹\83à¸\88หรือà¹\84มà¹\88วà¹\88าà¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\81ารลà¸\9aสà¸\96าà¸\99ะนี้?"
+msgstr "à¸\84ุà¸\93à¹\81à¸\99à¹\88à¹\83à¸\88หรือà¹\84มà¹\88วà¹\88าà¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\81ารลà¸\9aà¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89นี้?"
 
 #: src/dm_entry.vala:35
-msgid ""
-"You can't send direct message to this user. He (or she) must follow you too"
+msgid "You can't send direct message to this user. He (or she) must follow you too"
 msgstr "คุณไม่สามารถส่งข้อความส่วนตัวถึงผู้ใช้นี้ได้ เขาหรือเธอต้อง follow คุณด้วย"
 
 #: src/dm_entry.vala:42
@@ -56,12 +53,10 @@ msgid "Checking..."
 msgstr "กำลังตรวจสอบ..."
 
 #: src/edit_account.vala:70
-#, fuzzy
 msgid "Edit account"
-msgstr "บัญชีผู้ใช้"
+msgstr "à¹\81à¸\81à¹\89à¹\84à¸\82à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89"
 
 #: src/edit_account.vala:72
-#, fuzzy
 msgid "Create new account"
 msgstr "สร้างบัญชีใหม่..."
 
@@ -90,14 +85,12 @@ msgid "You must fill in all fields"
 msgstr ""
 
 #: src/main_window.vala:127
-#, fuzzy
 msgid "Home timeline"
-msgstr "สำหรับเส้นเวลา"
+msgstr "Home timeline"
 
 #: src/main_window.vala:128
-#, fuzzy
 msgid "Show your home timeline"
-msgstr "แสดงตามเส้นเวลา"
+msgstr "แสดง home timeline"
 
 #: src/main_window.vala:134
 msgid "Mentions"
@@ -117,11 +110,11 @@ msgstr "แสดงข้อความส่วนตัว"
 
 #: src/main_window.vala:147
 msgid "User info"
-msgstr ""
+msgstr "ข้อมูลผู้ใช้"
 
 #: src/main_window.vala:147
 msgid "Show information about user"
-msgstr ""
+msgstr "แสดงข้อมูลเกี่ยวกับผู้ใช้"
 
 #: src/main_window.vala:273 src/main_window.vala:274 src/main_window.vala:275
 #: src/status_bar_smart.vala:93 src/status_bar_smart.vala:96
@@ -145,13 +138,12 @@ msgid "Create new direct message"
 msgstr "สร้างข้อความส่วนตัวใหม่"
 
 #: src/main_window.vala:382
-#, fuzzy
 msgid "Show user"
-msgstr "à¹\81สà¸\94à¸\87à¹\80มà¸\99ู"
+msgstr "à¹\81สà¸\94à¸\87à¸\9cูà¹\89à¹\83à¸\8aà¹\89"
 
 #: src/main_window.vala:383
 msgid "Show information about specified user"
-msgstr ""
+msgstr "แสดงข้อมูลเกี่ยวกับผู้ใช้นี้"
 
 #: src/main_window.vala:389
 msgid "Update timeline"
@@ -210,7 +202,7 @@ msgstr "อัพเดต"
 #: src/popups.vala:140
 #, c-format
 msgid "in the home timeline: %d\n"
-msgstr ""
+msgstr "ใน home timeline: %d\n"
 
 #: src/popups.vala:143
 #, c-format
@@ -264,9 +256,8 @@ msgid "Clear now"
 msgstr "ล้างข้อมูล"
 
 #: src/pref_dialog.vala:111
-#, fuzzy
 msgid "General"
-msgstr "à¸\8aà¹\88วà¸\87à¹\80วลา"
+msgstr "à¸\97ัà¹\88วà¹\84à¸\9b"
 
 #: src/pref_dialog.vala:116
 msgid "Retweets"
@@ -327,7 +318,7 @@ msgstr "หลัก"
 
 #: src/pref_dialog.vala:208
 msgid "Desktop"
-msgstr ""
+msgstr "Desktop"
 
 #: src/pref_dialog.vala:210
 msgid "Appearance"
@@ -404,11 +395,11 @@ msgstr "กำลังอัพเดต... "
 
 #: src/status_view_dialog.vala:35
 msgid "Conversation"
-msgstr ""
+msgstr "ข้อความ"
 
 #: src/status_view_dialog.vala:63
 msgid "go to the web page"
-msgstr ""
+msgstr "ไปที่หน้าเว็บเพจ"
 
 #: src/template.vala:164 src/template.vala:224
 msgid "Reply"
@@ -478,44 +469,40 @@ msgid "%s - a twitter client"
 msgstr "%s - โปรแกรม twitter"
 
 #: src/user_info_list.vala:48
-#, fuzzy
 msgid "Followers:"
-msgstr "à¸\95อà¸\9aà¸\81ลัà¸\9aà¸\96ึà¸\87 <b>%s</b>:"
+msgstr "à¸\9cูà¹\89à¸\95ิà¸\94à¸\95าม:"
 
 #: src/user_info_list.vala:49
 msgid "Friends:"
-msgstr ""
+msgstr "เพื่อน"
 
 #: src/user_info_list.vala:50
-#, fuzzy
 msgid "Statuses:"
 msgstr "สถานะ"
 
 #: src/user_info_list.vala:69
 msgid "Web:"
-msgstr ""
+msgstr "เว็บ:"
 
 #: src/user_info_list.vala:90
 msgid "follow"
-msgstr ""
+msgstr "ติดตาม"
 
 #: src/user_info_list.vala:183
 msgid "This user does not exist"
-msgstr ""
+msgstr "ผู้ใช้นี้ไม่มีตัวตน"
 
 #: src/user_info_list.vala:300
 msgid "Now you follow this user"
-msgstr ""
+msgstr "คุณได้ติดตามผู้ใช้นี้"
 
 #: src/user_info_list.vala:302
 msgid "User was unfollowed"
-msgstr ""
+msgstr "ผู้ใช้ยกเลิกการติดตาม"
 
-#, fuzzy
 #~ msgid "Friends:  <b>%s</b>"
 #~ msgstr "ตอบกลับถึง <b>%s</b>:"
 
-#, fuzzy
 #~ msgid "Statuses:  <b>%s</b>"
 #~ msgstr "ตอบกลับถึง <b>%s</b>:"
 
index ac9de86..d8da5c8 100644 (file)
@@ -2,7 +2,7 @@
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <sospartan@gmail.com>, 2009.
-#
+# 
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
@@ -29,15 +29,14 @@ msgstr "服务"
 
 #: src/account_widget.vala:77
 msgid "API proxy"
-msgstr ""
+msgstr "API代理"
 
 #: src/account_widget.vala:159
 msgid "Sure you want to delete this account?"
 msgstr "确定要删除这条消息么?"
 
 #: src/dm_entry.vala:35
-msgid ""
-"You can't send direct message to this user. He (or she) must follow you too"
+msgid "You can't send direct message to this user. He (or she) must follow you too"
 msgstr "在他(她)关注你之前,不能够向该用户发送私信"
 
 #: src/dm_entry.vala:42
@@ -66,7 +65,7 @@ msgstr "密码"
 
 #: src/edit_account.vala:97
 msgid "API proxy or other service"
-msgstr ""
+msgstr "API代理或其他服务"
 
 #: src/edit_account.vala:109 src/pref_dialog.vala:209
 msgid "Account"
@@ -74,11 +73,11 @@ msgstr "账户"
 
 #: src/edit_account.vala:183
 msgid "You must enter a proxy address"
-msgstr ""
+msgstr "你必须输入一个代理地址"
 
 #: src/edit_account.vala:198
 msgid "Proxy address must contain a valid url"
-msgstr ""
+msgstr "代理地址不是合法的url"
 
 #: src/edit_account.vala:216
 msgid "You must fill in all fields"
@@ -110,11 +109,11 @@ msgstr "显示私信"
 
 #: src/main_window.vala:147
 msgid "User info"
-msgstr ""
+msgstr "用户信息"
 
 #: src/main_window.vala:147
 msgid "Show information about user"
-msgstr ""
+msgstr "显示用户的信息"
 
 #: src/main_window.vala:273 src/main_window.vala:274 src/main_window.vala:275
 #: src/status_bar_smart.vala:93 src/status_bar_smart.vala:96
@@ -138,13 +137,12 @@ msgid "Create new direct message"
 msgstr "创建私信"
 
 #: src/main_window.vala:382
-#, fuzzy
 msgid "Show user"
-msgstr "显示菜单"
+msgstr "显示用户"
 
 #: src/main_window.vala:383
 msgid "Show information about specified user"
-msgstr ""
+msgstr "显示关于特定用户的信息"
 
 #: src/main_window.vala:389
 msgid "Update timeline"
@@ -401,7 +399,7 @@ msgstr "对话"
 
 #: src/status_view_dialog.vala:63
 msgid "go to the web page"
-msgstr ""
+msgstr "跳转到网页"
 
 #: src/template.vala:164 src/template.vala:224
 msgid "Reply"
@@ -471,44 +469,40 @@ msgid "%s - a twitter client"
 msgstr "%s - twitter 客户端"
 
 #: src/user_info_list.vala:48
-#, fuzzy
 msgid "Followers:"
-msgstr "å\9b\9eå¤\8dç»\99 <b>%s</b>:"
+msgstr "å\85³æ³¨ä½ ç\9a\84人:"
 
 #: src/user_info_list.vala:49
 msgid "Friends:"
-msgstr ""
+msgstr "好友:"
 
 #: src/user_info_list.vala:50
-#, fuzzy
 msgid "Statuses:"
-msgstr "消息"
+msgstr "消息:"
 
 #: src/user_info_list.vala:69
 msgid "Web:"
-msgstr ""
+msgstr "网址:"
 
 #: src/user_info_list.vala:90
 msgid "follow"
-msgstr ""
+msgstr "关注"
 
 #: src/user_info_list.vala:183
 msgid "This user does not exist"
-msgstr ""
+msgstr "这个用户不存在"
 
 #: src/user_info_list.vala:300
 msgid "Now you follow this user"
-msgstr ""
+msgstr "你已关注这个用户"
 
 #: src/user_info_list.vala:302
 msgid "User was unfollowed"
-msgstr ""
+msgstr "这个用户已不关注了"
 
-#, fuzzy
 #~ msgid "Friends:  <b>%s</b>"
 #~ msgstr "回复给 <b>%s</b>:"
 
-#, fuzzy
 #~ msgid "Statuses:  <b>%s</b>"
 #~ msgstr "回复给 <b>%s</b>:"
 
index a73d589..28ebe23 100644 (file)
@@ -85,15 +85,17 @@ public class Accounts : Object {
        
        /* load accounts from file */
        private void load() {
-               string conf_dir = Environment.get_home_dir() + "/.config/";
+               //string conf_dir = Environment.get_home_dir() + "/.config/";
+               string pino_dir = Environment.get_user_config_dir() + "/%s".printf(Config.APPNAME);
                
-               var dir = File.new_for_path(conf_dir);
+               /*var dir = File.new_for_path(conf_dir);
                if(!dir.query_exists(null))
                        dir.make_directory(null);
                
                string pino_dir = conf_dir + "/pino";
                
-               dir = File.new_for_path(pino_dir);
+               dir = File.new_for_path(pino_dir);*/
+               var dir = File.new_for_path(pino_dir);
                if(!dir.query_exists(null))
                        dir.make_directory(null);
                
index c7b18f7..fbb76ac 100644 (file)
@@ -105,9 +105,11 @@ public class Cache : Object {
        }
        
        private void check_cache_dir() {
-               string conf_dir = Environment.get_home_dir() + "/.config/pino/";
+               //string conf_dir = Environment.get_home_dir() + "/.config/pino/";
+               
+               //cache_path = conf_dir + "/cache";
+               cache_path = Environment.get_user_cache_dir() + "/%s".printf(Config.APPNAME);
                
-               cache_path = conf_dir + "/cache";
                var cache_dir = File.new_for_path(cache_path);
                if(!cache_dir.query_exists(null))
                        cache_dir.make_directory(null);
index 716f314..94facea 100644 (file)
@@ -23,6 +23,8 @@ using Gtk;
 using WebKit;
 using RestAPI;
 using Auth;
+//using OAuth;
+using Soup;
 
 public class MainWindow : Window {
        
@@ -72,6 +74,60 @@ public class MainWindow : Window {
                logo = new Gdk.Pixbuf.from_file(Config.LOGO_PATH);
                logo_fresh = new Gdk.Pixbuf.from_file(Config.LOGO_FRESH_PATH);
                
+               /** testing oauth
+               string cons_key = "k6R1A0PPkmpRcThEdPF1Q";
+               string cons_sec = "TKneXwqslxkbaR3RQGcvvvGU4Qk01qh8HAhRIMN74";
+               string request_token_url = "https://api.twitter.com/oauth/request_token";
+               string access_token_url = "https://twitter.com/oauth/access_token";
+               string auth_url = "http://api.twitter.com/oauth/authorize?oauth_token=%s";
+               
+               Soup.SessionSync session = new Soup.SessionSync();
+               Client client = new Client(Config.CONS_KEY, Config.CONS_SEC,
+               SignatureMethod.HMAC_SHA1, session);
+               
+               /*
+               client.fetch_request_token ("POST", request_token_url);
+               warning(auth_url, client.request_token.lookup("oauth_token"));
+               warning("input PIN");
+               string? pin = stdin.read_line();
+               warning(pin);
+               client.fetch_access_token("POST", access_token_url, pin);
+               warning("%s, %s", client.request_token.lookup("oauth_token"),
+                       client.request_token.lookup("oauth_token_secret"));
+               
+               string oauth_token = "18604056-PlBJS2DNHgixESyaW2bo99qD3iwIysec1ANB8QpBr";
+               string oauth_token_secret = "9LGC6VqPrEfYqu5WByANcyr391oBaWcM2ubiKeSPjM";
+               
+               client.request_token.replace("oauth_token", oauth_token);
+               client.request_token.replace("oauth_token_secret", oauth_token_secret);
+               
+               var table = new HashTable<string, string>(str_hash, str_equal);
+               string signature = client.generate_signature("GET", "http://api.twitter.com/statuses/home_timeline.xml",
+                       oauth_token_secret, table);
+               //signature = signature.substring(0, signature.length - 1);
+               
+               warning(signature);
+               
+               string auth_header = """OAuth realm="%s",oauth_consumer_key="%s",oauth_token="%s",oauth_signature_method="HMAC-SHA1",oauth_signature="%s",oauth_timestamp="%s",oauth_nonce="%s",oauth_version="1.0"""".printf("http://api.twitter.com/",
+                Config.CONS_KEY, oauth_token, signature, client.timestamp,
+                client.nonce);
+        
+        warning(auth_header);
+        
+        string h = client.generate_authorization("GET", "http://api.twitter.com/statuses/home_timeline.xml", "http://api.twitter.com");
+        warning(h);
+        
+        Message message = new Message("GET", "http://api.twitter.com/statuses/home_timeline.xml");
+        message.set_http_version (HTTPVersion.1_1);
+        MessageHeaders headers = new MessageHeaders(MessageHeadersType.MULTIPART);
+        headers.append("Authorization", h);
+        
+        message.request_headers = headers;
+        
+        session.send_message(message);
+        warning((string)message.response_body.flatten().data);
+                end of testing */
+               
                //getting settings
                prefs = new Prefs();
                
@@ -233,6 +289,9 @@ public class MainWindow : Window {
                mentions.retweet.connect((status) => {
                        re_tweet.set_state_retweet(status);
                });
+               user_info.retweet.connect((status) => {
+                       re_tweet.set_state_retweet(status);
+               });
                home.directreply.connect((screen_name) => {
                        re_tweet.set_state_directreply(screen_name);
                });
@@ -242,12 +301,18 @@ public class MainWindow : Window {
                direct.directreply.connect((screen_name) => {
                        re_tweet.set_state_directreply(screen_name);
                });
+               user_info.directreply.connect((screen_name) => {
+                       re_tweet.set_state_directreply(screen_name);
+               });
                home.replyto.connect((status) => {
                        re_tweet.set_state_reply(status);
                });
                mentions.replyto.connect((status) => {
                        re_tweet.set_state_reply(status);
                });
+               user_info.replyto.connect((status) => {
+                       re_tweet.set_state_reply(status);
+               });
                home.deleted.connect((msg) => {
                        statusbar.set_status(StatusbarSmart.StatusType.DATA_SENT, msg);
                });
@@ -438,7 +503,7 @@ public class MainWindow : Window {
                        about_dlg.set_version(Config.APP_VERSION);
                        about_dlg.set_website("http://pino-app.appspot.com/");
                        about_dlg.set_authors({Config.AUTHORS});
-                       about_dlg.set_copyright("© 2009 troorl");
+                       about_dlg.set_copyright("© 2009-2010 troorl");
                        
                        about_dlg.set_transient_for(this);
                        about_dlg.run();
@@ -543,6 +608,7 @@ public class MainWindow : Window {
        }
        
        public void refresh_action() {
+               warning("refresh_action 1");
                updateAct.set_sensitive(false);
                
                statusbar.set_status(StatusbarSmart.StatusType.UPDATING);
@@ -550,11 +616,9 @@ public class MainWindow : Window {
                var home_list = home.update();
                var mentions_list = mentions.update();
                var direct_list = direct.update();
-               
                statusbar.set_status(StatusbarSmart.StatusType.FINISH_OK);
-               
                notify.start(home_list, mentions_list, direct_list);
-               
+               warning("notofication is ok");
                updateAct.set_sensitive(true);
        }
        
diff --git a/src/oauth-client.vala b/src/oauth-client.vala
new file mode 100644 (file)
index 0000000..cc79300
--- /dev/null
@@ -0,0 +1,348 @@
+/*
+ * OAuth client implementation using libsoup.
+ *
+ * Copyright (C) 2009 Mark Lee <oauth@lazymalevolence.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author : Mark Lee <oauth@lazymalevolence.com>
+ */
+
+using Soup;
+
+namespace OAuth
+{
+  const string VERSION = "1.0";
+  public enum SignatureMethod
+  {
+    UNKNOWN = 0,
+    PLAINTEXT,
+    HMAC_SHA1,
+    RSA_SHA1
+  }
+  public class Client : Object
+  {
+    private Session _session;
+    public Session session
+    {
+      get
+      {
+        return this._session;
+      }
+      construct
+      {
+        this._session = value;
+      }
+    }
+    public string timestamp
+    {
+      owned get
+      {
+        time_t ts = time_t ();
+        return ((long)ts).to_string ();
+      }
+    }
+    public string nonce
+    {
+      owned get
+      {
+        return Random.next_int ().to_string ();
+      }
+    }
+    private HashTable<string,string> _request_token;
+    public HashTable<string,string> request_token
+    {
+      get
+      {
+        return this._request_token;
+      }
+    }
+    private HashTable<string,string> _access_token;
+    public HashTable<string,string> access_token
+    {
+      get
+      {
+        return this._access_token;
+      }
+    }
+    private string _consumer_key;
+    public string consumer_key
+    {
+      get
+      {
+        return this._consumer_key;
+      }
+      construct
+      {
+        this._consumer_key = value;
+      }
+    }
+    private string _consumer_secret;
+    public string consumer_secret
+    {
+      construct
+      {
+        this._consumer_secret = value;
+      }
+    }
+    private SignatureMethod _signature_method;
+    private string _signature_method_str;
+    public SignatureMethod signature_method
+    {
+      get
+      {
+        return this._signature_method;
+      }
+      construct
+      {
+        this._signature_method = value;
+        this._signature_method_str = signature_method_to_string (value);
+      }
+    }
+    
+  public Client(string __consumer_key, string __consumer_secret,
+    SignatureMethod __signature_method, Session __session) {
+      
+    _consumer_key = __consumer_key;
+    _consumer_secret = __consumer_secret;
+    _signature_method = __signature_method;
+    _session = __session;
+  }
+    
+    public static string
+    signature_method_to_string (SignatureMethod method)
+    {
+      string result = null;
+      switch (method)
+      {
+        case SignatureMethod.PLAINTEXT:
+          result = "PLAINTEXT";
+          break;
+        case SignatureMethod.HMAC_SHA1:
+          result = "HMAC-SHA1";
+          break;
+        case SignatureMethod.RSA_SHA1:
+          result = "RSA-SHA1";
+          break;
+        default:
+          result = "HMAC-SHA1";
+          break;
+      }
+      return result;
+    }
+    public static SignatureMethod
+    string_to_signature_method (string repr)
+    {
+      SignatureMethod result;
+      switch (repr)
+      {
+        case "PLAINTEXT":
+          result = SignatureMethod.PLAINTEXT;
+          break;
+        case "HMAC-SHA1":
+          result = SignatureMethod.HMAC_SHA1;
+          break;
+        case "RSA-SHA1":
+          result = SignatureMethod.RSA_SHA1;
+          break;
+        default:
+          result = SignatureMethod.HMAC_SHA1;
+          break;
+      }
+      return result;
+    }
+    /**
+     * Conforms to 5.1, "Parameter Encoding".
+     * (Note: Soup.form_encode_hash does not conform.)
+     */
+    public string
+    encode_parameters (HashTable<string,string> input)
+    {
+      string encoded = "";
+      List<unowned string> keys = input.get_keys ();
+      keys.sort ((CompareFunc)strcmp);
+      foreach (unowned string key in keys)
+      {
+        unowned string? val = input.lookup (key);
+        if (val == null)
+        {
+          debug ("key (%s) is null", key);
+          continue;
+        }
+        if (encoded.len () != 0)
+        {
+          encoded += "&";
+        }
+        encoded += URI.encode (key, "&=") + "=" + URI.encode (val, "&=");
+      }
+      return encoded;
+    }
+    /**
+     * Conforms to Section 9, "Signing Requests".
+     */
+    public string
+    generate_signature (string method, string uri, string token_secret,
+                        HashTable<string,string> sig_params)
+    {
+      // 9.1. Signature Base String
+      string sig_base;
+      // 9.1.1. Normalize Request Parameters
+      // FIXME
+      string request_params = this.encode_parameters (sig_params);
+      debug ("params: %s", request_params);
+      // 9.1.2. Construct Request URL
+      URI soup_uri = new URI (uri);
+      soup_uri.set_host (soup_uri.host.down ());
+      soup_uri.query = null;
+      soup_uri.fragment = null;
+      string request_uri = soup_uri.to_string (false);
+      // 9.1.3. Concatenate Request Elements
+      sig_base = "%s&%s&%s".printf (method, URI.encode (request_uri, null),
+                                    URI.encode (request_params, "=&"));
+      string secrets = "%s&%s".printf (URI.encode (this._consumer_secret, null),
+                                       URI.encode (token_secret, null));
+      debug ("Signature Base: %s", sig_base);
+      string signature = null;
+      switch (this._signature_method)
+      {
+        case SignatureMethod.HMAC_SHA1: // 9.2
+          uchar[] hmac;
+          debug ("secrets: %li; sig: %li", secrets.len (), sig_base.len ());
+          SHA1.hmac (secrets, sig_base, out hmac);
+          debug ("hmac: %d", hmac.length);
+          assert (hmac.length == 20);
+          signature = Base64.encode (hmac);
+          break;
+        case SignatureMethod.RSA_SHA1: // 9.3
+          critical ("Not Implemented.");
+          break;
+        case SignatureMethod.PLAINTEXT: // 9.4
+          signature = secrets;
+          break;
+      }
+      debug ("signature generated: %s", signature);
+      return signature;
+    }
+    public HashTable<string,string>
+    generate_params (string method, string uri,
+                     HashTable<string,string>? extra=null)
+    {
+      HashTable<string,string> result;
+      string oauth_token_secret;
+      string signature;
+      if (extra == null)
+      {
+        result = new HashTable<string,string> (str_hash, str_equal);
+      }
+      else
+      {
+        result = extra;
+      }
+      result.replace ("oauth_consumer_key", this._consumer_key);
+      result.replace ("oauth_signature_method", this._signature_method_str);
+      result.replace ("oauth_version", VERSION);
+      if (this._request_token == null)
+      {
+        oauth_token_secret = "";
+      }
+      else
+      {
+        if (this._access_token == null)
+        {
+          oauth_token_secret = this._request_token.lookup ("oauth_token_secret");
+          result.replace ("oauth_token",
+                          this._request_token.lookup ("oauth_token"));
+        }
+        else
+        {
+          oauth_token_secret = this._access_token.lookup ("oauth_token_secret");
+          result.replace ("oauth_token",
+                          this._access_token.lookup ("oauth_token"));
+        }
+      }
+      result.replace ("oauth_timestamp", this.timestamp);
+      result.replace ("oauth_nonce", this.nonce);
+      signature = this.generate_signature (method, uri, oauth_token_secret,
+                                           result);
+      result.replace ("oauth_signature", signature);
+      return result;
+    }
+    public void
+    fetch_request_token (string method, string uri,
+                         HashTable<string,string>? extra_params=null)
+    {
+      HashTable<string,string> request_params;
+      Message msg;
+      string encoded;
+      
+      request_params = this.generate_params (method, uri, extra_params);
+      msg = new Message (method, uri);
+      encoded = this.encode_parameters (request_params);
+      debug ("encoded params: %s", encoded);
+      msg.request_body.append (MemoryUse.COPY, (void*)encoded, encoded.len ());
+      this._session.send_message (msg);
+      warning((string)msg.response_body.flatten().data);
+      this._request_token = form_decode ((string)msg.response_body.flatten().data);
+    }
+    public string
+    authorize_request_token (string uri)
+    {
+      string full_uri;
+      if (uri.contains ("%s"))
+      {
+        full_uri = uri.printf (this._request_token.lookup ("oauth_token"));
+      }
+      else
+      {
+        full_uri = uri;
+      }
+      return full_uri;
+    }
+    public void
+    fetch_access_token (string method, string uri, string pin)
+    {
+      HashTable<string,string> params;
+      Message msg;
+      
+      HashTable<string, string> extra = new HashTable<string,string> (str_hash, str_equal);
+      extra.insert("oauth_verifier", pin);
+      params = this.generate_params (method, uri, extra);
+      msg = form_request_new_from_hash (method, uri, params);
+      this._session.send_message (msg);
+      warning((string)msg.response_body.flatten().data);
+      this._access_token = form_decode ((string)msg.response_body.flatten().data);
+    }
+    public string generate_authorization (string method, string uri, string realm)
+    {
+      string header = "OAuth";
+      HashTable<string,string> params;
+
+      params = this.generate_params (method, uri);
+      params.insert ("realm", realm);
+      foreach (weak string key in params.get_keys ())
+      {
+        if (header.len () != 5)
+        {
+          header += ",";
+        }
+        string value = URI.encode (params.lookup (key), null);
+        header += " %s=\"%s\"".printf (URI.encode (key, null), value);
+      }
+      return header;
+    }
+  }
+}
+
+// vim: set et ts=2 sts=2 sw=2 ai :
index 58f15a6..28b6074 100644 (file)
@@ -57,13 +57,14 @@ public class Popups : Object {
        
        public void start(ArrayList<Status>? home, ArrayList<Status>? mentions,
                ArrayList<Status>? direct) {
-               if(home == null)
-                       return;
                
-               if(home.size > 3 || mentions.size > 3 || direct.size > 3)
+               if((home != null && home.size > 3) || (mentions != null && mentions.size > 3)
+                       || (direct != null && direct.size > 3)) {
+                       
                        low_notify(home, mentions, direct);
-               else
+               } else {
                        full_notify(home, mentions, direct);
+               }
        }
        
        private void show_popup(Status status, bool direct = false) {
@@ -98,12 +99,12 @@ public class Popups : Object {
        }
        
        /* one popup for each new status or DM */
-       private void full_notify(ArrayList<Status> home, ArrayList<Status> mentions,
-               ArrayList<Status> direct) {
+       private void full_notify(ArrayList<Status>? home, ArrayList<Status>? mentions,
+               ArrayList<Status>? direct) {
                
                ArrayList<string> ids = new ArrayList<string>();
                
-               if(prefs.showTimelineNotify) {
+               if(prefs.showTimelineNotify && home != null) {
                        for(int i = home.size -1; i > -1; i--) {
                                var status = home.get(i);
                                if(status.user_screen_name != login) {
@@ -113,7 +114,7 @@ public class Popups : Object {
                        }
                }
                
-               if(prefs.showMentionsNotify) {
+               if(prefs.showMentionsNotify && mentions != null) {
                        for(int i = mentions.size -1; i > -1; i--) {
                                var status = mentions.get(i);
                                if(!(status.id in ids))
@@ -121,7 +122,7 @@ public class Popups : Object {
                        }
                }
                
-               if(prefs.showDirectNotify) {
+               if(prefs.showDirectNotify && direct != null) {
                        for(int i = direct.size -1; i > -1; i--) {
                                var status = direct.get(i);
                                show_popup(status, true);
@@ -131,18 +132,18 @@ public class Popups : Object {
        }
        
        /* one popup on all updates */
-       private void low_notify(ArrayList<Status> home, ArrayList<Status> mentions,
-               ArrayList<Status> direct) {
+       private void low_notify(ArrayList<Status>? home, ArrayList<Status>? mentions,
+               ArrayList<Status>? direct) {
                
                string result = "";
                
-               if(prefs.showTimelineNotify && home.size > 0)
+               if(home != null && prefs.showTimelineNotify && home.size > 0)
                        result += _("in the home timeline: %d\n").printf(home.size);
                
-               if(prefs.showMentionsNotify && mentions.size > 0)
+               if(mentions != null && prefs.showMentionsNotify && mentions.size > 0)
                        result += _("in mentions: %d\n").printf(mentions.size);
                
-               if(prefs.showDirectNotify && direct.size > 0)
+               if(direct != null && prefs.showDirectNotify && direct.size > 0)
                        result += _("in direct messages: %d").printf(direct.size);
                
                if(result != "")
index 1cf7e18..740caee 100644 (file)
@@ -29,6 +29,7 @@ public class PrefDialog : Dialog {
        private SpinButton updateInterval;
        private SpinButton numberStatuses;
        private ComboBox urlShorten;
+       private CheckButton enableSpell;
        private CheckButton startMin;
        private CheckButton showTray;
        private CheckButton showTimelineNotify;
@@ -76,6 +77,9 @@ public class PrefDialog : Dialog {
                urlShorten.append_text("goo.gl");
                urlShorten.append_text("is.gd");
                
+               //enabling spell checking
+               enableSpell = new CheckButton.with_label(_("Enable spell checking"));
+               
                //start in tray
                startMin = new CheckButton.with_label(_("Starting up in tray"));
                
@@ -112,6 +116,7 @@ public class PrefDialog : Dialog {
                table_int.add_two_widgets(updateLabel, updateInterval);
                table_int.add_two_widgets(numberStatusesLabel, numberStatuses);
                table_int.add_two_widgets(urlShortenLabel, urlShorten);
+               table_int.add_widget(enableSpell);
                
                var table_re = new HigTable(_("Retweets"));
                table_re.add_two_widgets(reLabel, retweetStyle);
@@ -271,6 +276,7 @@ public class PrefDialog : Dialog {
                updateInterval.value = prefs.updateInterval;
                numberStatuses.value = prefs.numberStatuses;
                setup_urlshorten(prefs);
+               enableSpell.active = prefs.enableSpell;
                startMin.active = prefs.startMin;
                showTray.active = prefs.showTray;
                showTimelineNotify.active = prefs.showTimelineNotify;
@@ -318,6 +324,10 @@ public class PrefDialog : Dialog {
                        }
                });
                
+               enableSpell.toggled.connect(() => {
+                       prefs.enableSpell = enableSpell.active;
+               });
+               
                startMin.toggled.connect(() => {
                        prefs.startMin = startMin.active;
                        
index ab47d78..ec90651 100644 (file)
@@ -44,6 +44,16 @@ public class Prefs : Object {
                set{ _urlShorten = value; }
        }
        
+       public signal void enableSpellChanged();
+       private bool _enableSpell = true;
+       public bool enableSpell {
+               get{ return _enableSpell; }
+               set{
+                       _enableSpell = value;
+                       enableSpellChanged();
+               }
+       }
+       
        private bool _showTimelineNotify = true;
        public bool showTimelineNotify {
                get{ return _showTimelineNotify; }
@@ -258,15 +268,18 @@ public class Prefs : Object {
        }
        
        public LoadStatus load() {
-               string conf_dir = Environment.get_home_dir() + "/.config/";
+               //string conf_dir = Environment.get_home_dir() + "/.config/";
+               string pino_dir = Environment.get_user_config_dir() + "/%s".printf(Config.APPNAME);
                
+               /*
                var dir = File.new_for_path(conf_dir);
                if(!dir.query_exists(null))
                        dir.make_directory(null);
                
                string pino_dir = conf_dir + "/pino";
                
-               dir = File.new_for_path(pino_dir);
+               dir = File.new_for_path(pino_dir);*/
+               var dir = File.new_for_path(pino_dir);
                if(!dir.query_exists(null))
                        dir.make_directory(null);
                
@@ -314,6 +327,10 @@ public class Prefs : Object {
                                        _urlShorten = iter->get_content();
                                        break;
                                
+                               case "enableSpell":
+                                       _enableSpell = iter->get_content().to_bool();
+                                       break;
+                               
                                case "showTimelineNotify":
                                        _showTimelineNotify = iter->get_content().to_bool();
                                        break;
@@ -415,6 +432,8 @@ public class Prefs : Object {
         root->add_content("\n");
         root->new_text_child(ns, "urlShorten", _urlShorten);
         root->add_content("\n");
+        root->new_text_child(ns, "enableSpell", _enableSpell.to_string());
+        root->add_content("\n");
         root->new_text_child(ns, "showTimelineNotify", _showTimelineNotify.to_string());
         root->add_content("\n");
         root->new_text_child(ns, "showMentionsNotify", _showMentionsNotify.to_string());
index 2971837..5264f67 100644 (file)
@@ -156,9 +156,13 @@ public class ReTweet : VBox {
                entry.buffer.create_tag("tag", "foreground", gtk_style.sl_color,
                        "weight", Pango.Weight.BOLD);
                
+               prefs.enableSpellChanged.connect(spellEnabling);
+               spellEnabling();
+               
+               
                nicks = new Regex("(^|\\s)@([A-Za-z0-9_]+)");
                urls = new Regex("((http|https|ftp)://([\\S]+)\\.([\\S]+))");
-               tags = new Regex("((^|\\s)\\#[A-Za-z0-9_]+)");
+               tags = new Regex("((^|\\s)\\#[A-Za-z0-9_äëḧïöüẅẍÿÄÖÜßéèáàÉÈÁÀ]+)");
                
                var scroll = new ScrolledWindow(null, null);
         scroll.set_policy(PolicyType.AUTOMATIC, PolicyType.AUTOMATIC);
@@ -178,6 +182,27 @@ public class ReTweet : VBox {
                pack_start(frame, false, true, 0);
        }
        
+       private void spellEnabling() {
+               if(prefs.enableSpell) {
+                       if(prefs.enableSpell) {
+                               try {
+                                       Spell spell = new Spell.attach(entry, null);
+                               } catch(Error e) {
+                                       try {
+                                               Spell spell = new Spell.attach(entry, "en_US");
+                                       } catch(Error e) {
+                                               warning(e.message);
+                                       }
+                                       warning(e.message);
+                               }
+                       }
+               } else {
+                       Spell spell = Spell.get_from_text_view(entry);
+                       if(spell != null)
+                               spell.detach();
+               }
+       }
+       
        public void update_auth() {
                var acc = accounts.get_current_account();
                
@@ -365,6 +390,7 @@ public class ReTweet : VBox {
                        return;
                }
                
+               status.tmp = true;
                status_updated(status); //signal
                
                hide();
@@ -431,7 +457,7 @@ public class ReTweet : VBox {
                
                entry.buffer.get_bounds(out start_pos, out end_pos);
                
-               entry.buffer.remove_all_tags(start_pos, end_pos);
+               //entry.buffer.remove_all_tags(start_pos, end_pos);
                
                tagging(start_pos, text, urls, "url");
                tagging(start_pos, text, nicks, "nick");
index aba3963..1488739 100644 (file)
@@ -45,6 +45,8 @@ public class Status : Object {
        public string to_status_id = "";
        
        public bool is_retweet = false;
+       
+       public bool tmp = false;
 }
 
 public class FullStatus : Status {
@@ -172,7 +174,7 @@ public abstract class RestAPIAbstract : Object {
        }
        
        public string make_request(owned string req_url, string method,
-               HashTable<string, string> params = new HashTable<string, string>(null, null),
+               HashTable<string, string> params = new HashTable<string, string>(str_hash, str_equal),
                bool async = true, int retry = 3) throws RestError {
                
                if(account == null)
@@ -180,23 +182,17 @@ public abstract class RestAPIAbstract : Object {
                
                if(method == "GET") { //set get-parameters
                        string query = "";
-               
+                       warning(params.size().to_string());
                        if(params.size() > 0) {
                                query = "?";
                                
-                               //Very dirty. HashTable.loockup() doesn't work. Bug?
                                int tmp_iter = 0;
                                foreach(string key in params.get_keys()) {
-                                       int tmp_iter2 = 0;
-                                       foreach(string val in params.get_values()) {
-                                               if(tmp_iter2 == tmp_iter) {
-                                                       query += Soup.form_encode(key, val);
-                                                       if(tmp_iter < params.size() - 1)
-                                                               query += "&";
-                                                       break;
-                                               }
-                                               tmp_iter2++;
-                                       }
+                                       query += Soup.form_encode(key, params.lookup(key));
+                                       
+                                       if(tmp_iter < params.size() - 1)
+                                               query += "&";
+                                       
                                        tmp_iter++;
                                }
                        }
@@ -214,7 +210,7 @@ public abstract class RestAPIAbstract : Object {
                        session = new SessionSync();
                
         Message message = new Message(method, req_url);
-        message.set_http_version (HTTPVersion.1_1);
+        message.set_http_version(HTTPVersion.1_1);
         
         MessageHeaders headers = new MessageHeaders(MessageHeadersType.MULTIPART);
         headers.append("User-Agent", "%s/%s".printf(Config.APPNAME, Config.APP_VERSION));
@@ -252,7 +248,7 @@ public abstract class RestAPIAbstract : Object {
                
                string req_url = urls.friendship();
                
-               HashTable map = new HashTable<string, string>(null, null);
+               HashTable map = new HashTable<string, string>(str_hash, str_equal);
                map.insert("source_screen_name", account.login);
                map.insert("target_screen_name", screen_name);
                warning(req_url);
index a1d09a2..bacd132 100644 (file)
@@ -41,7 +41,7 @@ public class RestAPIAcc : RestAPIAbstract {
                
                string req_url = urls.user().printf(account.login);
                string data = make_request(req_url, "GET",
-                       new HashTable<string, string>(null, null), false);
+                       new HashTable<string, string>(str_hash, str_equal), false);
                
                return parse_userpic_url(data);
        }
index 7f818b0..fe1ebff 100644 (file)
@@ -46,7 +46,7 @@ public class RestAPIDirect : RestAPIAbstract {
                if(account == null)
                        no_account();
                
-               var map = new HashTable<string, string>(null, null);
+               var map = new HashTable<string, string>(str_hash, str_equal);
                if(count != 0)
                        map.insert("count", count.to_string());
                if(since_id != "")
index bbb7811..6bbf54b 100644 (file)
@@ -44,7 +44,7 @@ public class RestAPIRe : RestAPIAbstract {
                
                string req_url = urls.direct_new();
                
-               var map = new HashTable<string, string>(null, null);
+               var map = new HashTable<string, string>(str_hash, str_equal);
                map.insert("screen_name", user);
                map.insert("text", text);
                
@@ -63,7 +63,7 @@ public class RestAPIRe : RestAPIAbstract {
                
                string req_url = urls.status_update();
                
-               var map = new HashTable<string, string>(null, null);
+               var map = new HashTable<string, string>(str_hash, str_equal);
                map.insert("status", text);
                
                if(account != null && account.service == "identi.ca") //client name for identi.ca
index d867843..d0a1580 100644 (file)
@@ -64,7 +64,7 @@ public class RestAPITimeline : RestAPIAbstract {
                                break;
                }
                
-               var map = new HashTable<string, string>(null, null);
+               var map = new HashTable<string, string>(str_hash, str_equal);
                if(count != 0)
                        map.insert("count", count.to_string());
                if(since_id != "")
@@ -131,33 +131,34 @@ public class RestAPITimeline : RestAPIAbstract {
                                                                Xml.Node *iter_retweet;
                                                                
                                                                for(iter_retweet = iter_in->children->next; iter_retweet != null; iter_retweet = iter_retweet->next) {
-                                                                       switch(iter_retweet->name) {
-                                                                               case "user":
-                                                                                       Xml.Node *iter_re_user;
-                                                                                       
-                                                                                       for(iter_re_user = iter_retweet->children->next; iter_re_user != null; iter_re_user = iter_re_user->next) {
-                                                                                               switch(iter_re_user->name) {
-                                                                                                       case "name":
-                                                                                                               status.re_user_name = iter_re_user->get_content();
-                                                                                                               break;
-                                                                                                       
-                                                                                                       case "screen_name":
-                                                                                                               status.re_user_screen_name = iter_re_user->get_content();
-                                                                                                               break;
-                                                                                                       
-                                                                                                       case "profile_image_url":
-                                                                                                               status.re_user_avatar = iter_re_user->get_content();
-                                                                                                               break;
-                                                                                               }
-                                                                                       }
-                                                                                       delete iter_re_user;
-                                                                                       break;
+                                                                       if(iter_retweet->is_text() != 1) {
                                                                                
-                                                                               case "text":
-                                                                                       if(iter_retweet->get_content().substring(0, 3) != "\n  " ) {
-                                                                                               status.re_text = iter_retweet->get_content();
-                                                                                       }
-                                                                                       break;
+                                                                                       switch(iter_retweet->name) {
+                                                                                               case "text":
+                                                                                                       status.re_text = iter_retweet->get_content();
+                                                                                                       break;
+                                                                                               
+                                                                                               case "user":
+                                                                                                       Xml.Node *iter_re_user;
+                                                                                                       
+                                                                                                       for(iter_re_user = iter_retweet->children->next; iter_re_user != null; iter_re_user = iter_re_user->next) {
+                                                                                                               switch(iter_re_user->name) {
+                                                                                                                       case "name":
+                                                                                                                               status.re_user_name = iter_re_user->get_content();
+                                                                                                                               break;
+                                                                                                                       
+                                                                                                                       case "screen_name":
+                                                                                                                               status.re_user_screen_name = iter_re_user->get_content();
+                                                                                                                               break;
+                                                                                                                       
+                                                                                                                       case "profile_image_url":
+                                                                                                                               status.re_user_avatar = iter_re_user->get_content();
+                                                                                                                               break;
+                                                                                                               }
+                                                                                                       }
+                                                                                                       delete iter_re_user;
+                                                                                                       break;
+                                                                                       }
                                                                        }
                                                                }
                                                                
index ab0f9b1..be1870d 100644 (file)
@@ -59,8 +59,8 @@ public class Template : Object {
                reload();
                
                //compile regex
-               nicks = new Regex("@([A-Za-z0-9_]+)");
-               tags = new Regex("((^|\\s)\\#[A-Za-z0-9_]+)");
+               nicks = new Regex("(^|\\s)@([A-Za-z0-9_]+)");
+               tags = new Regex("((^|\\s)\\#[A-Za-z0-9_äëḧïöüẅẍÿÄÖÜßéèáàÉÈÁÀ]+)");
                groups = new Regex("(^|\\s)!([A-Za-z0-9_]+)"); //for identi.ca groups
                urls = new Regex("((http|https|ftp)://([\\S]+))"); //need something better
                
@@ -171,6 +171,8 @@ public class Template : Object {
                        rounded_str = "-webkit-border-radius:5px;";
                
                foreach(Status i in friends) {
+                       string text = strip_tags_plus(i.text);
+                       
                        //checking for new statuses
                        var fresh = "old";
                        if(last_focused > 0 && (int)i.created_at.mktime() > last_focused)
@@ -182,7 +184,6 @@ public class Template : Object {
                        var user_avatar = i.user_avatar;
                        var name = i.user_screen_name;
                        var screen_name = i.user_screen_name;
-                       var text = i.text;
                        
                        var map = new HashMap<string, string>();
                        map["avatar"] = cache.get_or_download(user_avatar, Cache.Method.ASYNC, false);
@@ -198,10 +199,10 @@ public class Template : Object {
                        map["time"] = time;
                        map["content"] = making_links(text);
                        
-                       if(prefs.rtlSupport && is_rtl(clear_notice.replace(i.text, -1, 0, "")))
+                       if(prefs.rtlSupport && is_rtl(clear_notice.replace(text, -1, 0, "")))
                                map["rtl_class"] = "rtl-notice";
                        else
-                               map["rtl_class"] = "";
+                               map["rtl_class"] = "norm-notice";
                        
                        map["delete_text"] = delete_text;
                        map["dm_text"] = dm_text;
@@ -232,6 +233,8 @@ public class Template : Object {
                        rounded_str = "-webkit-border-radius:5px;";
                
                foreach(Status i in friends) {
+                       string text = strip_tags_plus(i.text);
+                       
                        //checking for new statuses
                        var fresh = "old";
                        if(last_focused > 0 && (int)i.created_at.mktime() > last_focused)
@@ -263,12 +266,12 @@ public class Template : Object {
                                else
                                        map["name"] = i.user_screen_name;
                        
-                               map["content"] = making_links(i.text);
+                               map["content"] = making_links(strip_tags_plus(text));
 
-                               if(prefs.rtlSupport && is_rtl(clear_notice.replace(i.text, -1, 0, "")))
+                               if(prefs.rtlSupport && is_rtl(clear_notice.replace(text, -1, 0, "")))
                                        map["rtl_class"] = "rtl-notice";
                                else
-                                       map["rtl_class"] = "";
+                                       map["rtl_class"] = "norm-notice";
                                
                                map["delete_text"] = delete_text;
                                map["delete"] = Config.DELETE_PATH;
@@ -280,7 +283,7 @@ public class Template : Object {
                                var user_avatar = i.user_avatar;
                                var name = i.user_name;
                                var screen_name = i.user_screen_name;
-                               var text = i.text;
+                               //var text = i.text;
                                
                                if(i.is_retweet) {
                                        re_icon = "<span class='re'>Rt:</span> ";
@@ -288,7 +291,7 @@ public class Template : Object {
                                        name = i.re_user_name;
                                        screen_name = i.re_user_screen_name;
                                        user_avatar = i.re_user_avatar;
-                                       text = i.re_text;
+                                       text = strip_tags_plus(i.re_text);
                                }
                                
                                var map = new HashMap<string, string>();
@@ -306,10 +309,10 @@ public class Template : Object {
                                map["time"] = time;
                                map["content"] = making_links(text);
                                
-                               if(prefs.rtlSupport && is_rtl(clear_notice.replace(i.text, -1, 0, "")))
+                               if(prefs.rtlSupport && is_rtl(clear_notice.replace(text, -1, 0, "")))
                                        map["rtl_class"] = "rtl-notice";
                                else
-                                       map["rtl_class"] = "";
+                                       map["rtl_class"] = "norm-notice";
                                
                                map["by_who"] = by_who;
                                map["retweet_text"] = retweet_text;
@@ -360,7 +363,7 @@ public class Template : Object {
                        } else break;
                }
                
-               result = nicks.replace(result, -1, 0, "@<a class='re_nick' href='userinfo://\\1'>\\1</a>");
+               result = nicks.replace(result, -1, 0, "\\1@<a class='re_nick' href='userinfo://\\2'>\\2</a>");
                result = tags.replace(result, -1, 0, "<a class='tags' href='%s\\1'>\\1</a>".printf(search_url));
                
                if(service == "identi.ca") //for identi.ca only
@@ -435,4 +438,13 @@ public class Template : Object {
                        return true;
                return false;
        }
+       
+       /* Performaing to show in html context */
+       private string strip_tags_plus(owned string content) {
+               content = content.replace("\\", "&#92;");
+               content = content.replace("<", "&lt;");
+               content = content.replace(">", "&gt;");
+               
+               return content;
+       }
 }
index ce4a9e2..36edb4a 100644 (file)
@@ -61,7 +61,7 @@ public class TimelineList : TimelineListAbstract {
                                no_fresh();
                        }
                }
-       } 
+       }
        
        public signal void fresh();
        public signal void no_fresh();
@@ -95,6 +95,14 @@ public class TimelineList : TimelineListAbstract {
                string since_id = "";
                bool first_time = true;
                
+               //clearing temporary statuses
+               for(int i = 0; i < lst.size; i++) {
+                       if(lst.get(i).tmp) {
+                               lst.remove_at(i);
+                               i--;
+                       }
+               }
+               
                if(lst.size > 0) {
                        since_id = lst.get(0).id;
                        first_time = false;
@@ -147,9 +155,10 @@ public class TimelineList : TimelineListAbstract {
        /* insert new status */
        public void insert_status(Status status) {
                lst.insert(0, status);
-               delete_extra();
+               //tmp_lst.add(status);
+               //delete_extra();
                
-               last_focused = (int)lst.get(0).created_at.mktime();
+               //last_focused = (int)lst.get(0).created_at.mktime();
                
                refresh();
        }
index cf4d0a5..33a538e 100644 (file)
@@ -168,11 +168,11 @@ public abstract class TimelineListAbstract : HBox {
                parent = _parent;
                parent.focus_in_event.connect((w, e) => {
                        parent_focus = true;
-                       return true;
+                       return false;
                });
                parent.focus_out_event.connect((w, e) => {
                        parent_focus = false;
-                       return true;
+                       return false;
                });
                
                //create new action
index b49228d..a4fb17e 100644 (file)
@@ -108,7 +108,7 @@ public class UrlShort : Object {
        
        /* shorten with http://goo.gl */
        private string shorter_google(string url) throws RestError {
-               var map = new HashTable<string, string>(null, null);
+               var map = new HashTable<string, string>(str_hash, str_equal);
                map.insert("url", url);
                
                string req_url = "http://ggl-shortener.appspot.com/";
@@ -120,7 +120,7 @@ public class UrlShort : Object {
        
        /* shorten with http://is.gd */
        private string shorter_isgd(string url) throws RestError {
-               var map = new HashTable<string, string>(null, null);
+               var map = new HashTable<string, string>(str_hash, str_equal);
                map.insert("longurl", url);
                
                string req_url = "http://is.gd/api.php";
index 793cf10..9076368 100644 (file)
@@ -42,5 +42,41 @@ namespace Config
        public const string USERPIC_PATH;
        public const string TEMPLATES_PATH;
        public const string AUTHORS;
+       
+       public const string CONS_KEY;
+       public const string CONS_SEC;
 }
 
+namespace Gtk\r
+{\r
+  [CCode (cprefix = "GTKSPELL_ERROR_", cheader_filename = "gtkspell/gtkspell.h")]\r
+  public errordomain SpeelError\r
+  {\r
+    ERROR_BACKEND\r
+  }\r
+\r
+  [Compact]
+  [CCode (cheader_filename = "gtkspell/gtkspell.h", free_function = "")]\r
+  public class Spell\r
+  {\r
+    [CCode (cname = "gtkspell_new_attach")]\r
+    public Spell.attach (TextView view, string? lang) throws GLib.Error;\r
+    [CCode (cname = "gtkspell_get_from_text_view")]\r
+    public static Spell get_from_text_view (TextView view);\r
+    [CCode (cname = "gtkspell_detach")]\r
+    public void detach ();\r
+    [CCode (cname = "gtkspell_set_language")]\r
+    public bool set_language (string lang) throws GLib.Error;\r
+    [CCode (cname = "gtkspell_recheck_all")]\r
+    public void recheck_all ();
+  }\r
+}\r
+
+/*
+[CCode (cheader_filename = "sha1.h")]
+namespace SHA1
+{
+  [CCode (cname = "_oauth_hmac_sha1")]
+  public void hmac (string key, string message, out uchar[] output);
+}
+*/
diff --git a/src/vapi/sha1.c b/src/vapi/sha1.c
new file mode 100644 (file)
index 0000000..2651fb1
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * HMAC-SHA1 implementation via GLib.
+ *
+ * Copyright (C) 2009 Mark Lee <oauth@lazymalevolence.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author : Mark Lee <oauth@lazymalevolence.com>
+ */
+
+#include <string.h>
+#include "sha1.h"
+
+#define SHA1_BLOCKSIZE 64
+#define SHA1_LEN 20
+
+void
+_oauth_hmac_sha1 (gchar *key, gchar *message,
+                  guchar **output, gsize *output_length)
+{
+  gssize key_len;
+  gchar *final_key;
+  gchar opad[SHA1_BLOCKSIZE];
+  gchar ipad[SHA1_BLOCKSIZE];
+  GChecksum *checksum = g_checksum_new (G_CHECKSUM_SHA1);
+  if (strlen (key) > SHA1_BLOCKSIZE)
+  {
+    guchar new_key[SHA1_LEN];
+    key_len = SHA1_LEN;
+    g_checksum_update (checksum, key, strlen (key));
+    g_checksum_get_digest (checksum, new_key, &key_len);
+    g_assert (key_len == SHA1_LEN);
+    final_key = g_strdup ((gchar*)new_key);
+    g_checksum_reset (checksum);
+  }
+  else
+  {
+    final_key = g_strdup (key);
+    key_len = strlen (final_key);
+  }
+  memset (ipad, 0, sizeof (ipad));
+  memset (opad, 0, sizeof (opad));
+  memcpy (ipad, final_key, key_len);
+  memcpy (opad, final_key, key_len);
+  g_free (final_key);
+  for (gsize i = 0; i < SHA1_BLOCKSIZE; i++)
+  {
+    ipad[i] ^= 0x36;
+    opad[i] ^= 0x5c;
+  }
+  // inner
+  g_checksum_update (checksum, ipad, SHA1_BLOCKSIZE);
+  g_checksum_update (checksum, message, strlen (message));
+  guchar in[SHA1_LEN];
+  gssize in_len = SHA1_LEN;
+  g_checksum_get_digest (checksum, in, &in_len);
+  g_assert (in_len == SHA1_LEN);
+  // outer
+  g_checksum_reset (checksum);
+  g_checksum_update (checksum, opad, SHA1_BLOCKSIZE);
+  g_checksum_update (checksum, in, in_len);
+  *output = g_new0 (guchar, SHA1_LEN);
+  *output_length = SHA1_LEN;
+  g_checksum_get_digest (checksum, *output, output_length);
+  g_assert (*output_length == SHA1_LEN);
+  g_checksum_free (checksum);
+}
+
+/* vim: set et ts=2 sts=2 sw=2 ai cindent : */
diff --git a/src/vapi/sha1.h b/src/vapi/sha1.h
new file mode 100644 (file)
index 0000000..bb97014
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * HMAC-SHA1 implementation via GLib.
+ *
+ * Copyright (C) 2009 Mark Lee <oauth@lazymalevolence.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author : Mark Lee <oauth@lazymalevolence.com>
+ */
+
+#include <glib.h>
+
+void _oauth_hmac_sha1 (gchar *key, gchar *message,
+                       guchar **output, gsize *output_length);
index 3a1174a..36fa261 100644 (file)
@@ -5,11 +5,12 @@ def build(bld):
                'cc', 'program',
                name = 'pino',
                target = 'pino',
-               uselib = 'GTK+ GOBJECT LIBXML GEE LIBNOTIFY LIBSOUP WEBKIT GTHREAD LIBUNIQUE',
+               uselib = 'GTK+ GOBJECT LIBXML GEE LIBNOTIFY LIBSOUP WEBKIT GTHREAD LIBUNIQUE GTKSPELL',
                packages = 'gtk+-2.0 gee-1.0 gio-2.0 libnotify libsoup-2.4 libxml-2.0 webkit-1.0 config unique-1.0',
                ccflags = ['-include', 'config.h', '-DYAML_DECLARE_STATIC'],
                vapi_dirs = 'vapi/',
-               source = bld.path.ant_glob(incl = '*.vala vapi/*.c'),
+               source = bld.path.ant_glob(excl = 'oauth-client.vala', incl = 'vapi/*.c *.vala'),
                threading = True
        )
        prog.install_path = '${PREFIX}/bin'
+       prog.includes = 'vapi/'
index 5fc905c..e0b1159 100644 (file)
@@ -24,6 +24,7 @@ a.tags{text-decoration: none; font-weight: bold;}
 .footer {margin-top: 4px;}
 .footer-right {text-align:right;float:right;}
 .footer img {margin-left: 8px;}
+.norm-notice, .rtl-notice {word-wrap: break-word;}
 .rtl-notice {direction: rtl; text-align: right;}
 h2 {color: {{lt_color}};}
 td {font-size: {{font_size}}pt;}
diff --git a/wscript b/wscript
index 3222457..79698d4 100644 (file)
--- a/wscript
+++ b/wscript
@@ -2,7 +2,7 @@
 
 import intltool
 
-VERSION = "0.2.1"
+VERSION = "0.2.4"
 VERSION_MAJOR_MINOR =  ".".join(VERSION.split(".")[0:2])
 APPNAME = "pino"
 
@@ -37,7 +37,11 @@ def configure(conf):
                atleast_version='1.0', mandatory=True, args='--cflags --libs')
        conf.check_cfg(package='unique-1.0', uselib_store='LIBUNIQUE',
                atleast_version='1.0', mandatory=True, args='--cflags --libs')
+       conf.check_cfg(package='gtkspell-2.0', uselib_store='GTKSPELL',
+               atleast_version='2.0', mandatory=True, args='--cflags --libs')
 
+       conf.env.append_value('CCFLAGS', '-std=c99')
+       
        conf.define('PACKAGE', APPNAME)
        conf.define('PACKAGE_NAME', APPNAME)
        conf.define('PACKAGE_STRING', APPNAME + '-' + VERSION)
@@ -63,6 +67,8 @@ def configure(conf):
        conf.define('LOCALE_DIR', conf.env.PREFIX + '/share/locale/')
        conf.define('GETTEXT_PACKAGE', APPNAME)
        conf.define('APPNAME', APPNAME)
+       conf.define('CONS_KEY', 'k6R1A0PPkmpRcThEdPF1Q')
+       conf.define('CONS_SEC', 'TKneXwqslxkbaR3RQGcvvvGU4Qk01qh8HAhRIMN74')
        
        # AUTHORS --> About dialog
        f = open('AUTHORS', 'r')
@@ -88,6 +94,7 @@ def init_defs(prefix):
 
 def build(bld):
        bld.add_subdirs('src')
+       #bld.add_subdirs('liboauth-client')
        bld.add_subdirs('templates')
        bld.add_subdirs('po')