Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2008-08-07 02:37:11 (GMT)
committer Jonas Smedegaard <dr@jones.dk>2008-08-07 02:37:11 (GMT)
commite3367830c2c1c9d7862db0123976b14443d560e7 (patch)
tree36b0892a10e918127d4347b8e6b6fde1b83abe22
parent54a63ac3d67c62d6a4b063a98430fa52be5ee31f (diff)
parente6decf93da396f6f9900ff0c2d098aed2a9650bf (diff)
Merge commit 'v0.81.8' into upstream
-rw-r--r--configure.ac2
-rw-r--r--po/ar.po24
-rw-r--r--po/ja.po72
-rw-r--r--po/mn.po75
-rw-r--r--po/nl.po75
-rw-r--r--po/te.po67
-rw-r--r--src/sugar/activity/activity.py81
-rw-r--r--src/sugar/activity/activityfactory.py5
-rw-r--r--src/sugar/activity/bundlebuilder.py8
-rw-r--r--src/sugar/bundle/activitybundle.py15
-rw-r--r--src/sugar/bundle/bundle.py13
-rw-r--r--src/sugar/bundle/contentbundle.py41
-rw-r--r--src/sugar/datastore/datastore.py18
-rw-r--r--src/sugar/env.py2
-rw-r--r--src/sugar/graphics/icon.py3
-rw-r--r--src/sugar/gsm-session.c3
-rw-r--r--src/sugar/presence/activity.py100
-rw-r--r--src/sugar/session.py2
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])
diff --git a/po/ar.po b/po/ar.po
index 4894569..cd0418a 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -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 ثانية"
diff --git a/po/ja.po b/po/ja.po
index 93a56e3..3b902e9 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -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 分"
diff --git a/po/mn.po b/po/mn.po
index 93a56e3..3d98302 100644
--- a/po/mn.po
+++ b/po/mn.po
@@ -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 минут"
diff --git a/po/nl.po b/po/nl.po
index 93a56e3..0c2958b 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -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"
diff --git a/po/te.po b/po/te.po
index 93a56e3..bc632b1 100644
--- a/po/te.po
+++ b/po/te.po
@@ -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()