diff options
author | Jonas Smedegaard <dr@jones.dk> | 2008-08-07 02:37:11 (GMT) |
---|---|---|
committer | Jonas Smedegaard <dr@jones.dk> | 2008-08-07 02:37:11 (GMT) |
commit | e3367830c2c1c9d7862db0123976b14443d560e7 (patch) | |
tree | 36b0892a10e918127d4347b8e6b6fde1b83abe22 | |
parent | 54a63ac3d67c62d6a4b063a98430fa52be5ee31f (diff) | |
parent | e6decf93da396f6f9900ff0c2d098aed2a9650bf (diff) |
Merge commit 'v0.81.8' into upstream
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | po/ar.po | 24 | ||||
-rw-r--r-- | po/ja.po | 72 | ||||
-rw-r--r-- | po/mn.po | 75 | ||||
-rw-r--r-- | po/nl.po | 75 | ||||
-rw-r--r-- | po/te.po | 67 | ||||
-rw-r--r-- | src/sugar/activity/activity.py | 81 | ||||
-rw-r--r-- | src/sugar/activity/activityfactory.py | 5 | ||||
-rw-r--r-- | src/sugar/activity/bundlebuilder.py | 8 | ||||
-rw-r--r-- | src/sugar/bundle/activitybundle.py | 15 | ||||
-rw-r--r-- | src/sugar/bundle/bundle.py | 13 | ||||
-rw-r--r-- | src/sugar/bundle/contentbundle.py | 41 | ||||
-rw-r--r-- | src/sugar/datastore/datastore.py | 18 | ||||
-rw-r--r-- | src/sugar/env.py | 2 | ||||
-rw-r--r-- | src/sugar/graphics/icon.py | 3 | ||||
-rw-r--r-- | src/sugar/gsm-session.c | 3 | ||||
-rw-r--r-- | src/sugar/presence/activity.py | 100 | ||||
-rw-r--r-- | src/sugar/session.py | 2 |
18 files changed, 332 insertions, 274 deletions
diff --git a/configure.ac b/configure.ac index 935c4eb..edfc8d5 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([sugar-toolkit],[0.81.6],[],[sugar-toolkit]) +AC_INIT([sugar-toolkit],[0.81.8],[],[sugar-toolkit]) AC_PREREQ([2.59]) @@ -11,13 +11,13 @@ msgstr "" "Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n" "Language-Team: Arabic <doc@arabeyes.org>\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n>=3 && " "n<=10 ? 3 : n>=11 && n<=99 ? 4 : 5;\n" "X-Generator: Pootle 1.1.0rc2\n" -"Nplurals=6; Plural=N==0 ? 0: n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? " -"3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" +"Nplurals=6; Plural=N==0 ? 0: n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 " +": n%100>=11 && n%100<=99 ? 4 : 5;\n" #: ../src/sugar/activity/activity.py:120 msgid "Share with:" @@ -560,23 +560,5 @@ msgstr[5] "%d دقيقة" #~ msgid "OK" #~ msgstr "حسنا" -#~ msgid "%d years" -#~ msgstr "%d سنوات" - -#~ msgid "%d months" -#~ msgstr "%d شهور" - -#~ msgid "%d weeks" -#~ msgstr "%d أسابيع" - -#~ msgid "%d days" -#~ msgstr "%d أيام" - -#~ msgid "%d hours" -#~ msgstr "%d ساعات" - -#~ msgid "%d minutes" -#~ msgstr "%d دقائق" - #~ msgid "%d second" #~ msgstr "%d ثانية" @@ -2,152 +2,148 @@ # 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. -#, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-06-24 00:07+0530\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"PO-Revision-Date: 2008-07-27 09:55-0400\n" +"Last-Translator: korakurider <korakurider@gmail.com>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Translate Toolkit 1.1.1rc4\n" +"X-Generator: Pootle 1.1.0rc2\n" #: ../src/sugar/activity/activity.py:120 msgid "Share with:" -msgstr "" +msgstr "次の人と共有:" #: ../src/sugar/activity/activity.py:122 msgid "Private" -msgstr "" +msgstr "(共有しない)" #: ../src/sugar/activity/activity.py:123 msgid "My Neighborhood" -msgstr "" +msgstr "私のお隣さん" #: ../src/sugar/activity/activity.py:130 msgid "Keep" -msgstr "" +msgstr "残しておく" #: ../src/sugar/activity/activity.py:136 msgid "Stop" -msgstr "" +msgstr "停止" #: ../src/sugar/activity/activity.py:251 msgid "Undo" -msgstr "" +msgstr "元に戻す" #: ../src/sugar/activity/activity.py:256 msgid "Redo" -msgstr "" +msgstr "やり直し" #: ../src/sugar/activity/activity.py:266 msgid "Copy" -msgstr "" +msgstr "コピー" #: ../src/sugar/activity/activity.py:271 msgid "Paste" -msgstr "" +msgstr "貼り付け" #: ../src/sugar/activity/activity.py:297 msgid "Activity" -msgstr "" +msgstr "アクティビティ" #: ../src/sugar/activity/activity.py:469 #, python-format msgid "%s Activity" -msgstr "" +msgstr "%s アクティビティ" #: ../src/sugar/activity/activity.py:856 msgid "Keep error" -msgstr "" +msgstr "保存エラー" #: ../src/sugar/activity/activity.py:857 msgid "Keep error: all changes will be lost" -msgstr "" +msgstr "保存エラー: 全ての変更は失われてしまいます" #: ../src/sugar/activity/activity.py:860 msgid "Don't stop" -msgstr "" +msgstr "やめない" #: ../src/sugar/activity/activity.py:863 msgid "Stop anyway" -msgstr "" +msgstr "とにかくやめる" #: ../src/sugar/graphics/alert.py:166 ../src/sugar/graphics/alert.py:209 msgid "Cancel" -msgstr "" +msgstr "中止" #: ../src/sugar/graphics/alert.py:170 ../src/sugar/graphics/alert.py:247 msgid "Ok" -msgstr "" +msgstr "了解" #: ../src/sugar/graphics/alert.py:219 msgid "Continue" -msgstr "" +msgstr "続ける" #: ../src/sugar/util.py:181 msgid " and " -msgstr "" +msgstr " そして " #: ../src/sugar/util.py:182 msgid ", " -msgstr "" +msgstr ", " #. TRANS: Indicating something that just happened, eg. "just now", "moments ago" #: ../src/sugar/util.py:185 msgid "Seconds ago" -msgstr "" +msgstr "ちょっと前" #. TRANS: Indicating time passed, eg. "[10 day, 5 hours] ago", #. "[2 minutes] in the past", or "[3 years, 1 month] earlier" #: ../src/sugar/util.py:189 #, python-format msgid "%s ago" -msgstr "" +msgstr "だけ前" #. TRANS: Relative dates (eg. 1 month and 5 days). #: ../src/sugar/util.py:202 #, python-format msgid "%d year" msgid_plural "%d years" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d 年" +# これは期間をあらわすので"ヶ月"の方がよいのでは。(Spiky) #: ../src/sugar/util.py:203 #, python-format msgid "%d month" msgid_plural "%d months" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d 月" +# おなじく"週間"ではないでしょうか? #: ../src/sugar/util.py:204 #, python-format msgid "%d week" msgid_plural "%d weeks" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d 週" +# おなじく"日間"ではないでしょうか? #: ../src/sugar/util.py:205 #, python-format msgid "%d day" msgid_plural "%d days" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d 日" #: ../src/sugar/util.py:206 #, python-format msgid "%d hour" msgid_plural "%d hours" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d 時間" #: ../src/sugar/util.py:207 #, python-format msgid "%d minute" msgid_plural "%d minutes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d 分" @@ -2,152 +2,151 @@ # 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. -#, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-06-24 00:07+0530\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"PO-Revision-Date: 2008-06-27 06:28-0400\n" +"Last-Translator: Odontsetseg Bat-Erdene <obat-erdene@suffolk.edu>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Translate Toolkit 1.1.1rc4\n" +"X-Generator: Pootle 1.1.0rc2\n" #: ../src/sugar/activity/activity.py:120 msgid "Share with:" -msgstr "" +msgstr "Хуваалцах:" #: ../src/sugar/activity/activity.py:122 msgid "Private" -msgstr "" +msgstr "Хувийн" #: ../src/sugar/activity/activity.py:123 msgid "My Neighborhood" -msgstr "" +msgstr "Миний Хөршүүд" #: ../src/sugar/activity/activity.py:130 msgid "Keep" -msgstr "" +msgstr "Хадгалах" #: ../src/sugar/activity/activity.py:136 msgid "Stop" -msgstr "" +msgstr "Хаах" #: ../src/sugar/activity/activity.py:251 msgid "Undo" -msgstr "" +msgstr "Буцаах" #: ../src/sugar/activity/activity.py:256 msgid "Redo" -msgstr "" +msgstr "Давтах" #: ../src/sugar/activity/activity.py:266 msgid "Copy" -msgstr "" +msgstr "Хуулах" #: ../src/sugar/activity/activity.py:271 msgid "Paste" -msgstr "" +msgstr "Тавих" #: ../src/sugar/activity/activity.py:297 msgid "Activity" -msgstr "" +msgstr "Үйл ажиллагаа" #: ../src/sugar/activity/activity.py:469 #, python-format msgid "%s Activity" -msgstr "" +msgstr "%s үйл ажиллагаа" #: ../src/sugar/activity/activity.py:856 msgid "Keep error" -msgstr "" +msgstr "Хадгалахын алдаа " #: ../src/sugar/activity/activity.py:857 msgid "Keep error: all changes will be lost" -msgstr "" +msgstr "Хадгалахын алдаа: бүх өөрчлөлтүүд устгагдана" #: ../src/sugar/activity/activity.py:860 msgid "Don't stop" -msgstr "" +msgstr "Бүү хаа" #: ../src/sugar/activity/activity.py:863 msgid "Stop anyway" -msgstr "" +msgstr "Ямар ч нөхцөлд хаах" #: ../src/sugar/graphics/alert.py:166 ../src/sugar/graphics/alert.py:209 msgid "Cancel" -msgstr "" +msgstr "Болих" #: ../src/sugar/graphics/alert.py:170 ../src/sugar/graphics/alert.py:247 msgid "Ok" -msgstr "" +msgstr "Тийм" #: ../src/sugar/graphics/alert.py:219 msgid "Continue" -msgstr "" +msgstr "Үргэлжлүүлэх" #: ../src/sugar/util.py:181 msgid " and " -msgstr "" +msgstr " ба_" #: ../src/sugar/util.py:182 msgid ", " -msgstr "" +msgstr " ,_" #. TRANS: Indicating something that just happened, eg. "just now", "moments ago" #: ../src/sugar/util.py:185 msgid "Seconds ago" -msgstr "" +msgstr "Секундын өмнө" #. TRANS: Indicating time passed, eg. "[10 day, 5 hours] ago", #. "[2 minutes] in the past", or "[3 years, 1 month] earlier" #: ../src/sugar/util.py:189 #, python-format msgid "%s ago" -msgstr "" +msgstr "%s-ын өмнө" #. TRANS: Relative dates (eg. 1 month and 5 days). #: ../src/sugar/util.py:202 #, python-format msgid "%d year" msgid_plural "%d years" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d жил" +msgstr[1] "%d жил" #: ../src/sugar/util.py:203 #, python-format msgid "%d month" msgid_plural "%d months" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d сар" +msgstr[1] "%d сар" #: ../src/sugar/util.py:204 #, python-format msgid "%d week" msgid_plural "%d weeks" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d долоо хоног" +msgstr[1] "%d долоо хоног" #: ../src/sugar/util.py:205 #, python-format msgid "%d day" msgid_plural "%d days" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d хоног" +msgstr[1] "%d хоног" #: ../src/sugar/util.py:206 #, python-format msgid "%d hour" msgid_plural "%d hours" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d цаг" +msgstr[1] "%d цаг" #: ../src/sugar/util.py:207 #, python-format msgid "%d minute" msgid_plural "%d minutes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d минут" +msgstr[1] "%d минут" @@ -2,152 +2,151 @@ # 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. -#, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-06-24 00:07+0530\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"PO-Revision-Date: 2008-06-25 15:47-0400\n" +"Last-Translator: Myckel Habets <myckel@sdf.lonestar.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Translate Toolkit 1.1.1rc4\n" +"X-Generator: Pootle 1.1.0rc2\n" #: ../src/sugar/activity/activity.py:120 msgid "Share with:" -msgstr "" +msgstr "Delen met:" #: ../src/sugar/activity/activity.py:122 msgid "Private" -msgstr "" +msgstr "Privé" #: ../src/sugar/activity/activity.py:123 msgid "My Neighborhood" -msgstr "" +msgstr "Mijn omgeving" #: ../src/sugar/activity/activity.py:130 msgid "Keep" -msgstr "" +msgstr "Behouden" #: ../src/sugar/activity/activity.py:136 msgid "Stop" -msgstr "" +msgstr "Stop" #: ../src/sugar/activity/activity.py:251 msgid "Undo" -msgstr "" +msgstr "Ongedaan maken" #: ../src/sugar/activity/activity.py:256 msgid "Redo" -msgstr "" +msgstr "Herhalen" #: ../src/sugar/activity/activity.py:266 msgid "Copy" -msgstr "" +msgstr "Kopiëren" #: ../src/sugar/activity/activity.py:271 msgid "Paste" -msgstr "" +msgstr "Plakken" #: ../src/sugar/activity/activity.py:297 msgid "Activity" -msgstr "" +msgstr "Activiteit" #: ../src/sugar/activity/activity.py:469 #, python-format msgid "%s Activity" -msgstr "" +msgstr "%s activiteit" #: ../src/sugar/activity/activity.py:856 msgid "Keep error" -msgstr "" +msgstr "Bewaarfout" #: ../src/sugar/activity/activity.py:857 msgid "Keep error: all changes will be lost" -msgstr "" +msgstr "Bewaarfout: alle veranderingen zijn verloren gegaan" #: ../src/sugar/activity/activity.py:860 msgid "Don't stop" -msgstr "" +msgstr "Niet stoppen" #: ../src/sugar/activity/activity.py:863 msgid "Stop anyway" -msgstr "" +msgstr "Toch stoppen" #: ../src/sugar/graphics/alert.py:166 ../src/sugar/graphics/alert.py:209 msgid "Cancel" -msgstr "" +msgstr "Annuleren" #: ../src/sugar/graphics/alert.py:170 ../src/sugar/graphics/alert.py:247 msgid "Ok" -msgstr "" +msgstr "Ok" #: ../src/sugar/graphics/alert.py:219 msgid "Continue" -msgstr "" +msgstr "Doorgaan" #: ../src/sugar/util.py:181 msgid " and " -msgstr "" +msgstr " en " #: ../src/sugar/util.py:182 msgid ", " -msgstr "" +msgstr ", " #. TRANS: Indicating something that just happened, eg. "just now", "moments ago" #: ../src/sugar/util.py:185 msgid "Seconds ago" -msgstr "" +msgstr "Seconden geleden" #. TRANS: Indicating time passed, eg. "[10 day, 5 hours] ago", #. "[2 minutes] in the past", or "[3 years, 1 month] earlier" #: ../src/sugar/util.py:189 #, python-format msgid "%s ago" -msgstr "" +msgstr "%s geleden" #. TRANS: Relative dates (eg. 1 month and 5 days). #: ../src/sugar/util.py:202 #, python-format msgid "%d year" msgid_plural "%d years" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d jaar" +msgstr[1] "%d jaren" #: ../src/sugar/util.py:203 #, python-format msgid "%d month" msgid_plural "%d months" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d maand" +msgstr[1] "%d maanden" #: ../src/sugar/util.py:204 #, python-format msgid "%d week" msgid_plural "%d weeks" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d week" +msgstr[1] "%d weken" #: ../src/sugar/util.py:205 #, python-format msgid "%d day" msgid_plural "%d days" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d dag" +msgstr[1] "%d dagen" #: ../src/sugar/util.py:206 #, python-format msgid "%d hour" msgid_plural "%d hours" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d uur" +msgstr[1] "%d uren" #: ../src/sugar/util.py:207 #, python-format msgid "%d minute" msgid_plural "%d minutes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d minuut" +msgstr[1] "%d minuten" @@ -2,14 +2,13 @@ # 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. -#, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-06-24 00:07+0530\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"PO-Revision-Date: 2008-07-24 12:55+0100\n" +"Last-Translator: Satyanarayana Murthy Saladi <saladism@gmail.com>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,136 +17,138 @@ msgstr "" #: ../src/sugar/activity/activity.py:120 msgid "Share with:" -msgstr "" +msgstr "తో పంచుకో:" #: ../src/sugar/activity/activity.py:122 msgid "Private" -msgstr "" +msgstr "సొంతం" #: ../src/sugar/activity/activity.py:123 msgid "My Neighborhood" -msgstr "" +msgstr "నా చుట్టుపక్కలవారు" #: ../src/sugar/activity/activity.py:130 msgid "Keep" -msgstr "" +msgstr "ఉంచు" #: ../src/sugar/activity/activity.py:136 msgid "Stop" -msgstr "" +msgstr "ఆపు" #: ../src/sugar/activity/activity.py:251 msgid "Undo" -msgstr "" +msgstr "చివరిది రద్దుచేయి" #: ../src/sugar/activity/activity.py:256 msgid "Redo" -msgstr "" +msgstr "చివరిది తిరిగిచేయి" #: ../src/sugar/activity/activity.py:266 msgid "Copy" -msgstr "" +msgstr "నకలు" #: ../src/sugar/activity/activity.py:271 msgid "Paste" -msgstr "" +msgstr "అతికించు" #: ../src/sugar/activity/activity.py:297 msgid "Activity" -msgstr "" +msgstr "వ్యాపకం" #: ../src/sugar/activity/activity.py:469 #, python-format msgid "%s Activity" -msgstr "" +msgstr "%s వ్యాపకం" #: ../src/sugar/activity/activity.py:856 msgid "Keep error" -msgstr "" +msgstr "పొరబాటు జరిగింది" #: ../src/sugar/activity/activity.py:857 msgid "Keep error: all changes will be lost" -msgstr "" +msgstr "పొరబాటు జరిగింది : అన్ని మార్పులూ పోతాయి" #: ../src/sugar/activity/activity.py:860 msgid "Don't stop" -msgstr "" +msgstr "ఆపవద్దు" #: ../src/sugar/activity/activity.py:863 msgid "Stop anyway" -msgstr "" +msgstr "ఏదేమైనా ఆపువేయి" -#: ../src/sugar/graphics/alert.py:166 ../src/sugar/graphics/alert.py:209 +#: ../src/sugar/graphics/alert.py:166 +#: ../src/sugar/graphics/alert.py:209 msgid "Cancel" -msgstr "" +msgstr "రద్దు చేయి" -#: ../src/sugar/graphics/alert.py:170 ../src/sugar/graphics/alert.py:247 +#: ../src/sugar/graphics/alert.py:170 +#: ../src/sugar/graphics/alert.py:247 msgid "Ok" -msgstr "" +msgstr "సరి" #: ../src/sugar/graphics/alert.py:219 msgid "Continue" -msgstr "" +msgstr "సాగించు" #: ../src/sugar/util.py:181 msgid " and " -msgstr "" +msgstr "మరియు" #: ../src/sugar/util.py:182 msgid ", " -msgstr "" +msgstr ", " #. TRANS: Indicating something that just happened, eg. "just now", "moments ago" #: ../src/sugar/util.py:185 msgid "Seconds ago" -msgstr "" +msgstr "సెకనులు ముందు" #. TRANS: Indicating time passed, eg. "[10 day, 5 hours] ago", #. "[2 minutes] in the past", or "[3 years, 1 month] earlier" #: ../src/sugar/util.py:189 #, python-format msgid "%s ago" -msgstr "" +msgstr "%s ముందు" #. TRANS: Relative dates (eg. 1 month and 5 days). #: ../src/sugar/util.py:202 #, python-format msgid "%d year" msgid_plural "%d years" -msgstr[0] "" +msgstr[0] "%d సంవత్సరము" msgstr[1] "" #: ../src/sugar/util.py:203 #, python-format msgid "%d month" msgid_plural "%d months" -msgstr[0] "" +msgstr[0] "%d నెల" msgstr[1] "" #: ../src/sugar/util.py:204 #, python-format msgid "%d week" msgid_plural "%d weeks" -msgstr[0] "" +msgstr[0] "%d వారము" msgstr[1] "" #: ../src/sugar/util.py:205 #, python-format msgid "%d day" msgid_plural "%d days" -msgstr[0] "" +msgstr[0] "%d రోజు" msgstr[1] "" #: ../src/sugar/util.py:206 #, python-format msgid "%d hour" msgid_plural "%d hours" -msgstr[0] "" +msgstr[0] "%d గంట" msgstr[1] "" #: ../src/sugar/util.py:207 #, python-format msgid "%d minute" msgid_plural "%d minutes" -msgstr[0] "" +msgstr[0] "%d నిమిషము " msgstr[1] "" diff --git a/src/sugar/activity/activity.py b/src/sugar/activity/activity.py index 95d2960..3b5d529 100644 --- a/src/sugar/activity/activity.py +++ b/src/sugar/activity/activity.py @@ -436,6 +436,7 @@ class Activity(Window, gtk.Container): self._preview = _sugarext.Preview() self._updating_jobject = False self._closing = False + self._quit_requested = False self._deleting = False self._max_participants = 0 self._invites_queue = [] @@ -564,10 +565,15 @@ class Activity(Window, gtk.Container): canvas.connect('map', self.__canvas_map_cb) def __sm_quit_requested_cb(self, client): - client.will_quit(True) + self._quit_requested = True + + if not self._prepare_close(): + client.will_quit(False) + elif not self._updating_jobject: + client.will_quit(True) def __sm_quit_cb(self, client): - self.close(force=True) + self._complete_close() def __canvas_map_cb(self, canvas): if self._jobject and self._jobject.file_path: @@ -641,16 +647,19 @@ class Activity(Window, gtk.Container): def __save_cb(self): logging.debug('Activity.__save_cb') self._updating_jobject = False - if self._closing: - self._cleanup_jobject() - self.destroy() + if self._quit_requested: + self._xsmp_client.will_quit(True) + elif self._closing: + self._complete_close() def __save_error_cb(self, err): logging.debug('Activity.__save_error_cb') self._updating_jobject = False + if self._quit_requested: + self._xsmp_client.will_quit(False) if self._closing: - self._cleanup_jobject() - self.destroy() + self._show_keep_failed_dialog() + self._closing = False logging.debug("Error saving activity object to datastore: %s" % err) def _cleanup_jobject(self): @@ -713,6 +722,10 @@ class Activity(Window, gtk.Container): own implementation of write_file() to save your Activity specific data. """ + if self._jobject is None: + logging.debug('Cannot save, no journal object.') + return + logging.debug('Activity.save: %r' % self._jobject.object_id) if self._updating_jobject: @@ -852,7 +865,7 @@ class Activity(Window, gtk.Container): self.__share_cb) self._pservice.share_activity(self, private=private) - def _display_keep_failed_dialog(self): + def _show_keep_failed_dialog(self): alert = Alert() alert.props.title = _('Keep error') alert.props.msg = _('Keep error: all changes will be lost') @@ -866,6 +879,8 @@ class Activity(Window, gtk.Container): self.add_alert(alert) alert.connect('response', self._keep_failed_dialog_response_cb) + self.present() + def _keep_failed_dialog_response_cb(self, alert, response_id): self.remove_alert(alert) if response_id == gtk.RESPONSE_OK: @@ -877,7 +892,30 @@ class Activity(Window, gtk.Container): return True - def close(self, force=False, skip_save=False): + def _prepare_close(self, skip_save=False): + if not skip_save: + try: + self.save() + except Exception: + logging.info(traceback.format_exc()) + self._show_keep_failed_dialog() + return False + + if self._shared_activity: + self._shared_activity.leave() + + self._closing = True + + return True + + def _complete_close(self): + self._cleanup_jobject() + self.destroy() + + # Make the exported object inaccessible + dbus.service.Object.remove_from_connection(self._bus) + + def close(self, skip_save=False): """Request that the activity be stopped and saved to the Journal Activities should not override this method, but should implement @@ -885,28 +923,15 @@ class Activity(Window, gtk.Container): to control wether it can close, it should override can_close(). """ - if not force: - if not self.can_close(): - return - - try: - if not skip_save: - self.save() - except Exception: - logging.info(traceback.format_exc()) - self._display_keep_failed_dialog() + if not self.can_close(): return - if self._shared_activity: - self._shared_activity.leave() - - if self._updating_jobject: - self._closing = True - else: - self.destroy() + if not self._closing: + if not self._prepare_close(skip_save): + return - # Make the exported object inaccessible - dbus.service.Object.remove_from_connection(self._bus) + if not self._updating_jobject: + self._complete_close() def __realize_cb(self, window): wm.set_bundle_id(window.window, self.get_bundle_id()) diff --git a/src/sugar/activity/activityfactory.py b/src/sugar/activity/activityfactory.py index 4d6871f..c9729d4 100644 --- a/src/sugar/activity/activityfactory.py +++ b/src/sugar/activity/activityfactory.py @@ -29,7 +29,7 @@ from sugar.activity import registry from sugar import util from sugar import env -from errno import EEXIST +from errno import EEXIST, ENOSPC import os @@ -150,6 +150,9 @@ def open_log_file(activity): except OSError, e: if e.errno == EEXIST: i += 1 + elif e.errno == ENOSPC: + # not the end of the world; let's try to keep going. + return ('/dev/null', open('/dev/null','w')) else: raise e diff --git a/src/sugar/activity/bundlebuilder.py b/src/sugar/activity/bundlebuilder.py index 2480b03..f0cd574 100644 --- a/src/sugar/activity/bundlebuilder.py +++ b/src/sugar/activity/bundlebuilder.py @@ -81,6 +81,10 @@ class Builder(object): def build_locale(self): po_dir = os.path.join(self.config.source_dir, 'po') + if not self.config.bundle.is_dir(po_dir): + logging.warn("Missing po/ dir, cannot build_locale") + return + for f in os.listdir(po_dir): if not f.endswith('.po'): continue @@ -214,6 +218,10 @@ def cmd_dist_xo(config, options, args): packager = XOPackager(config) packager.package() +def cmd_dist(config, options, args): + logging.warn("dist deprecated, use dist_xo.") + cmd_dist_xo(config, options, args) + def cmd_dist_source(config, options, args): packager = SourcePackager(config) packager.package() diff --git a/src/sugar/bundle/activitybundle.py b/src/sugar/bundle/activitybundle.py index b126bd3..2c235d8 100644 --- a/src/sugar/bundle/activitybundle.py +++ b/src/sugar/bundle/activitybundle.py @@ -275,11 +275,13 @@ class ActivityBundle(Bundle): return False def need_upgrade(self): - act = activity.get_registry().get_activity(self._bundle_id) - if act is None or act.version != self._activity_version: - return True - else: - return False + """Returns True if installing this activity bundle is meaningful - + that is, if an identical version of this activity is not + already installed. + + Until we have cryptographic hashes to check identity, returns + True always. See http://dev.laptop.org/ticket/7534.""" + return True def unpack(self, install_dir, strict_manifest=False): self._unzip(install_dir) @@ -377,8 +379,7 @@ class ActivityBundle(Bundle): logging.warning('Not uninstalling system activity') return - install_path = os.path.join(env.get_user_activities_path(), - self._zip_root_dir) + install_path = act.path xdg_data_home = os.getenv('XDG_DATA_HOME', os.path.expanduser('~/.local/share')) diff --git a/src/sugar/bundle/bundle.py b/src/sugar/bundle/bundle.py index 9e876c2..3b12932 100644 --- a/src/sugar/bundle/bundle.py +++ b/src/sugar/bundle/bundle.py @@ -132,7 +132,18 @@ class Bundle: zip_file.close() return True - + + def is_dir(self, filename): + if self._unpacked: + path = os.path.join(self._path, filename) + return os.path.isdir(path) + else: + zip_file = zipfile.ZipFile(self._path) + path = os.path.join(self._zip_root_dir, filename, "") + for f in zip_file.namelist(): + if f.startswith(path): + return True + return False def get_path(self): """Get the bundle path.""" diff --git a/src/sugar/bundle/contentbundle.py b/src/sugar/bundle/contentbundle.py index effab23..32f38e3 100644 --- a/src/sugar/bundle/contentbundle.py +++ b/src/sugar/bundle/contentbundle.py @@ -19,6 +19,7 @@ from ConfigParser import ConfigParser import os +import urllib from sugar import env from sugar.bundle.bundle import Bundle, NotInstalledException, \ @@ -49,13 +50,13 @@ class ContentBundle(Bundle): self._library_version = None self._bundle_class = None - info_file = self._get_file('library/library.info') + info_file = self.get_file('library/library.info') if info_file is None: raise MalformedBundleException('No library.info file') self._parse_info(info_file) - if (self._get_file('index.html') is None and - self._get_file('library/library.xml') is None): + if (self.get_file('index.html') is None and + self.get_file('library/library.xml') is None): raise MalformedBundleException( 'Content bundle %s has neither index.html nor library.xml' % self._path) @@ -140,6 +141,11 @@ class ContentBundle(Bundle): else: self._bundle_class = None + if cp.has_option(section, 'activity_start'): + self._activity_start = cp.get(section, 'activity_start') + else: + self._activity_start = 'index.html' + def get_name(self): return self._name @@ -167,18 +173,30 @@ class ContentBundle(Bundle): def get_bundle_class(self): return self._bundle_class + def get_activity_start(self): + return self._activity_start + def _run_indexer(self): - if os.environ.has_key('XDG_DATA_DIRS'): - for path in os.environ['XDG_DATA_DIRS'].split(':'): - indexer = os.path.join(path, 'library-common', 'make_index.py') - if os.path.exists(indexer): - os.spawnlp(os.P_WAIT, 'python', 'python', indexer) + xdg_data_dirs = os.getenv('XDG_DATA_DIRS', + '/usr/local/share/:/usr/share/') + for path in xdg_data_dirs.split(':'): + indexer = os.path.join(path, 'library-common', 'make_index.py') + if os.path.exists(indexer): + os.spawnlp(os.P_WAIT, 'python', 'python', indexer) + + def get_root_dir(self): + return os.path.join(env.get_user_library_path(), self._zip_root_dir) + + def get_start_path(self): + return os.path.join(self.get_root_dir(), self._activity_start) + + def get_start_uri(self): + return "file://" + urllib.pathname2url(self.get_start_path()) def is_installed(self): if self._unpacked: return True - elif os.path.isdir(os.path.join(env.get_user_library_path(), - self._zip_root_dir)): + elif os.path.isdir(self.get_root_dir()): return True else: return False @@ -193,7 +211,6 @@ class ContentBundle(Bundle): raise NotInstalledException install_dir = self._path else: - install_dir = os.path.join(env.get_user_library_path(), - self._zip_root_dir) + install_dir = os.path.join(self.get_root_dir()) self._uninstall(install_dir) self._run_indexer() diff --git a/src/sugar/datastore/datastore.py b/src/sugar/datastore/datastore.py index b7792f4..b88a877 100644 --- a/src/sugar/datastore/datastore.py +++ b/src/sugar/datastore/datastore.py @@ -169,6 +169,24 @@ class DSObject(object): logging.debug('activityfactory.creating bundle with id %r', bundle.get_bundle_id()) activityfactory.create(bundle.get_bundle_id()) + + elif self.is_content_bundle() and not bundle_id: + + logging.debug('Creating content bundle') + bundle = ContentBundle(self.file_path) + if not bundle.is_installed(): + logging.debug('Installing content bundle') + bundle.install() + + activities = self._get_activities_for_mime('text/html') + if len(activities) == 0: + logging.warning('No activity can open HTML content bundles') + return + + uri = bundle.get_start_uri() + logging.debug('activityfactory.creating with uri %s', uri) + activityfactory.create_with_uri(activities[0].bundle_id, + bundle.get_start_uri()) else: if not self.get_activities() and bundle_id is None: logging.warning('No activity can open this object, %s.' % diff --git a/src/sugar/env.py b/src/sugar/env.py index 16327fc..b9c259f 100644 --- a/src/sugar/env.py +++ b/src/sugar/env.py @@ -43,7 +43,7 @@ def get_profile_path(path=None): return base def get_logs_path(path=None): - base = get_profile_path('logs') + base = os.environ.get('SUGAR_LOGS_DIR', get_profile_path('logs')) if path != None: return os.path.join(base, path) else: diff --git a/src/sugar/graphics/icon.py b/src/sugar/graphics/icon.py index 24b5ca5..f99eade 100644 --- a/src/sugar/graphics/icon.py +++ b/src/sugar/graphics/icon.py @@ -581,11 +581,10 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): palette = property(get_palette, set_palette) def get_icon_state(base_name, perc, step=5): - assert step > 0, 'get_icon_state(): step must be positive\n' strength = round(perc / step) * step icon_theme = gtk.icon_theme_get_default() - while strength <= 100: + while strength <= 100 and strength >= 0: icon_name = '%s-%03d' % (base_name, strength) if icon_theme.has_icon(icon_name): return icon_name diff --git a/src/sugar/gsm-session.c b/src/sugar/gsm-session.c index 3e621ca..95dd7cb 100644 --- a/src/sugar/gsm-session.c +++ b/src/sugar/gsm-session.c @@ -539,7 +539,8 @@ client_disconnected (GsmClient *client, gpointer data) g_object_unref (client); - g_signal_emit (session, signals[SHUTDOWN_COMPLETED], 0); + if (session->phase == GSM_SESSION_PHASE_SHUTDOWN && !session->clients) + g_signal_emit (session, signals[SHUTDOWN_COMPLETED], 0); } GsmSession * diff --git a/src/sugar/presence/activity.py b/src/sugar/presence/activity.py index ad21158..ab3cfff 100644 --- a/src/sugar/presence/activity.py +++ b/src/sugar/presence/activity.py @@ -235,12 +235,18 @@ class Activity(gobject.GObject): def get_joined_buddies(self): """Retrieve the set of Buddy objects attached to this activity - returns list of presence Buddy objects + returns list of presence Buddy objects that we can successfully + create from the buddy object paths that PS has for this activity. """ resp = self._activity.GetJoinedBuddies() buddies = [] for item in resp: - buddies.append(self._ps_new_object(item)) + try: + buddies.append(self._ps_new_object(item)) + except dbus.DBusException: + _logger.debug( + 'get_joined_buddies failed to get buddy object for %r', + item) return buddies def get_buddy_by_handle(self, handle): @@ -271,78 +277,70 @@ class Activity(gobject.GObject): def set_up_tubes(self, reply_handler, error_handler): - cpaths = [] + chans = [] - def tubes_chan_ready(chan): - _logger.debug('%r: Tubes channel %r is ready', self, chan) - self.telepathy_tubes_chan = chan + def tubes_ready(): + if self.telepathy_text_chan is None or \ + self.telepathy_tubes_chan is None: + return _logger.debug('%r: finished setting up tubes', self) reply_handler() - def got_tubes_chan(path): - _logger.debug('%r: got Tubes channel at %s', self, path) - telepathy.client.Channel(self.telepathy_conn.service_name, - path, ready_handler=tubes_chan_ready, - error_handler=error_handler) + def tubes_chan_ready(chan): + _logger.debug('%r: Tubes channel %r is ready', self, chan) + self.telepathy_tubes_chan = chan + tubes_ready() def text_chan_ready(chan): _logger.debug('%r: Text channel %r is ready', self, chan) self.telepathy_text_chan = chan - - self.telepathy_conn.RequestChannel(telepathy.CHANNEL_TYPE_TUBES, - telepathy.HANDLE_TYPE_ROOM, - self._telepathy_room_handle, - True, - reply_handler=got_tubes_chan, - error_handler=error_handler) - - def got_text_chan(path): - _logger.debug('%r: got Text channel at %s', self, path) - telepathy.client.Channel(self.telepathy_conn.service_name, - path, ready_handler=text_chan_ready, - error_handler=error_handler) + tubes_ready() def conn_ready(conn): _logger.debug('%r: Connection %r is ready', self, conn) self.telepathy_conn = conn - - # For the moment we'll do this synchronously. - # If the PS gained a GetRoom method, we could - # do this async too - - for channel_path in cpaths: - channel = telepathy.client.Channel(conn.service_name, - channel_path) - handle_type, handle = channel.GetHandle() - if handle_type == telepathy.HANDLE_TYPE_ROOM: - room = handle - break - - if room is None: + found_text_channel = False + found_tubes_channel = False + + for chan_path, chan_iface, handle_type, handle in chans: + if handle_type != telepathy.HANDLE_TYPE_ROOM: + return + + if chan_iface == telepathy.CHANNEL_TYPE_TEXT: + telepathy.client.Channel( + conn.service_name, chan_path, + ready_handler=text_chan_ready, + error_handler=error_handler) + found_text_channel = True + + elif chan_iface == telepathy.CHANNEL_TYPE_TUBES: + telepathy.client.Channel( + conn.service_name, chan_path, + ready_handler=tubes_chan_ready, + error_handler=error_handler) + found_tubes_channel = True + + if not found_text_channel: error_handler(AssertionError("Presence Service didn't create " "a chatroom")) - else: - self._telepathy_room_handle = room - - conn.RequestChannel(telepathy.CHANNEL_TYPE_TEXT, - telepathy.HANDLE_TYPE_ROOM, - room, True, - reply_handler=got_text_chan, - error_handler=error_handler) + elif not found_tubes_channel: + error_handler(AssertionError("Presence Service didn't create " + "tubes channel")) - def got_channels(bus_name, conn_path, channel_paths): - _logger.debug('%r: Connection on %s at %s, channel paths: %r', - self, bus_name, conn_path, channel_paths) + def channels_listed(bus_name, conn_path, channels): + _logger.debug('%r: Connection on %s at %s, channels: %r', + self, bus_name, conn_path, channels) # can't use assignment for this due to Python scoping - cpaths.extend(channel_paths) + chans.extend(channels) telepathy.client.Connection(bus_name, conn_path, ready_handler=conn_ready, error_handler=error_handler) - self._activity.GetChannels(reply_handler=got_channels, + + self._activity.ListChannels(reply_handler=channels_listed, error_handler=error_handler) def _join_cb(self): diff --git a/src/sugar/session.py b/src/sugar/session.py index 4b0c4ef..a3fb5e8 100644 --- a/src/sugar/session.py +++ b/src/sugar/session.py @@ -40,7 +40,7 @@ class SessionManager(object): self.session.initiate_shutdown() def shutdown_completed(self): - pass + _sugarext.xsmp_shutdown() def __shutdown_completed_cb(self, session): self.shutdown_completed() |