tux-droid-svn Mailing List for Tux Droid CE (Page 39)
Status: Beta
Brought to you by:
ks156
You can subscribe to this list here.
| 2007 |
Jan
|
Feb
(32) |
Mar
(108) |
Apr
(71) |
May
(38) |
Jun
(128) |
Jul
(1) |
Aug
(14) |
Sep
(77) |
Oct
(104) |
Nov
(90) |
Dec
(71) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2008 |
Jan
(81) |
Feb
(18) |
Mar
(40) |
Apr
(102) |
May
(151) |
Jun
(74) |
Jul
(151) |
Aug
(257) |
Sep
(447) |
Oct
(379) |
Nov
(404) |
Dec
(430) |
| 2009 |
Jan
(173) |
Feb
(236) |
Mar
(519) |
Apr
(300) |
May
(112) |
Jun
(232) |
Jul
(314) |
Aug
(58) |
Sep
(203) |
Oct
(293) |
Nov
(26) |
Dec
(109) |
| 2010 |
Jan
(19) |
Feb
(25) |
Mar
(33) |
Apr
(1) |
May
|
Jun
(3) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: remi <c2m...@c2...> - 2009-07-08 09:16:10
|
Author: remi
Date: 2009-07-08 11:15:58 +0200 (Wed, 08 Jul 2009)
New Revision: 5080
Modified:
software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/02_resourceGagdetsServer.py
software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/gadget/GadgetsContainer.py
software_suite_v3/smart-core/smart-server/trunk/util/misc/DirectoriesAndFilesTools.py
Log:
* Added a function copy a file.
* Added a method to export gadgets data to a directory.
(The resulting data structure will be used for the online gadgets download)
* Added a service to the method. example : (http://127.0.0.1:270/gadgets_server/export_gadgets?dest_path=c:\gadgets)
Modified: software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/02_resourceGagdetsServer.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/02_resourceGagdetsServer.py 2009-07-08 07:26:04 UTC (rev 5079)
+++ software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/02_resourceGagdetsServer.py 2009-07-08 09:15:58 UTC (rev 5080)
@@ -464,3 +464,29 @@
# Register the service into the resource
resourceGadgetsServer.addService(TDSServiceGadgetsServerRemoveGadget)
+
+# ------------------------------------------------------------------------------
+# Declaration of the service "export_gadgets".
+# ------------------------------------------------------------------------------
+class TDSServiceGadgetsServerExportGadgets(TDSService):
+
+ def configure(self):
+ self.parametersDict = {
+ 'dest_path' : 'string',
+ }
+ self.minimalUserLevel = TDS_CLIENT_LEVEL_ANONYMOUS
+ self.exclusiveExecution = True
+ self.name = "export_gadgets"
+ self.comment = "Export gadgets data to an external directory."
+
+ def execute(self, id, parameters):
+ headersStruct = self.getDefaultHeadersStruct()
+ contentStruct = self.getDefaultContentStruct()
+ contentStruct['root']['result'] = getStrError(E_TDREST_SUCCESS)
+ destPath = parameters['dest_path']
+ resourceGadgetsServer.getGadgetsContainer().exportGadgets(destPath)
+ return headersStruct, contentStruct
+
+# Register the service into the resource
+resourceGadgetsServer.addService(TDSServiceGadgetsServerExportGadgets)
+
Modified: software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/gadget/GadgetsContainer.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/gadget/GadgetsContainer.py 2009-07-08 07:26:04 UTC (rev 5079)
+++ software_suite_v3/smart-core/smart-server/trunk/util/applicationserver/gadget/GadgetsContainer.py 2009-07-08 09:15:58 UTC (rev 5080)
@@ -8,7 +8,10 @@
from util.filesystem.AutoDeployer import AutoDeployer
from util.xml.XmlSerializer import XmlSerializer
+from util.misc import DirectoriesAndFilesTools
+from util.applicationserver.plugin.Plugin import SUPPORTED_LANGUAGES_LIST
from Gadget import Gadget
+from GadgetGenerator import GadgetGenerator
# ------------------------------------------------------------------------------
# Gadgets container class.
@@ -110,6 +113,64 @@
gadgetName = "%s (%d)" % (baseGadgetName, i)
return gadgetName
+ # --------------------------------------------------------------------------
+ # Export gadgets data to an external directory.
+ # --------------------------------------------------------------------------
+ def exportGadgets(self, destDirectory = "c:/gadgetsV3"):
+ """Export gadgets data to an external directory.
+ @param destDirectory: Directory how to export the data.
+ """
+ baseDir = destDirectory
+ deflatedDir = os.path.join(baseDir, "deflated")
+ scgDir = os.path.join(baseDir, "scg")
+ gadgetXmlFile = os.path.join(baseDir, "gadgets.xml")
+ # Create directories arch
+ DirectoriesAndFilesTools.MKDirsF(baseDir)
+ if not os.path.isdir(baseDir):
+ return
+ DirectoriesAndFilesTools.MKDirs(deflatedDir)
+ DirectoriesAndFilesTools.MKDirs(scgDir)
+ # Loop on gadgets data
+ gadgetsXmlDict = {
+ 'gadgets' : {
+ 'count' : self.getCount(),
+ },
+ }
+ for i, gadget in enumerate(self.getGadgets()):
+ # Export scg file
+ src = gadget.getScgFile()
+ scgName = os.path.split(src)[-1]
+ dest = os.path.join(scgDir, scgName)
+ DirectoriesAndFilesTools.CPFile(src, dest)
+ # Export deflated directory
+ src = gadget.getWorkingPath()
+ symbolicName = os.path.split(gadget.getWorkingPath())[-1]
+ dest = os.path.join(deflatedDir, symbolicName)
+ DirectoriesAndFilesTools.CPDir(src, dest)
+ # Get some informations about the gadget
+ gadgetData = {}
+ gadgetData['symbolicName'] = symbolicName
+ gadgetData['version'] = gadget.getDescription().getVersion()
+ gadgetData['defaultLanguage'] = gadget.getDescription().getDefaultLanguage()
+ gadgetData['category'] = gadget.getDescription().getCategory()
+ gadgetData['author'] = gadget.getDescription().getAuthor()
+ gadgetData['name'] = {}
+ gadgetData['description'] = {}
+ gadgetData['helpFile'] = {}
+ for lang in SUPPORTED_LANGUAGES_LIST:
+ name = gadget.getDescription().getTranslatedName(lang)
+ gadgetData['name'][lang] = name
+ description = gadget.getDescription().getDescription(lang)
+ gadgetData['description'][lang] = description
+ helpFile = os.path.split(gadget.getDescription().getHelpFile(lang))[-1]
+ gadgetData['helpFile'][lang] = helpFile
+ gadgetsXmlDict['gadgets']['gadget_%.4d' % i] = gadgetData
+ # Export gadgets.xml file
+ gadgetsXmlFileContent = GadgetGenerator.gadgetDictToXml(gadgetsXmlDict)
+ f = open(gadgetXmlFile, "w")
+ f.write(gadgetsXmlFileContent)
+ f.close()
+
# ==========================================================================
# AUTO-DEPLOYER
# ==========================================================================
Modified: software_suite_v3/smart-core/smart-server/trunk/util/misc/DirectoriesAndFilesTools.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/util/misc/DirectoriesAndFilesTools.py 2009-07-08 07:26:04 UTC (rev 5079)
+++ software_suite_v3/smart-core/smart-server/trunk/util/misc/DirectoriesAndFilesTools.py 2009-07-08 09:15:58 UTC (rev 5080)
@@ -138,6 +138,23 @@
shutil.copytree(src, dest)
# ------------------------------------------------------------------------------
+# Copy a file.
+# ------------------------------------------------------------------------------
+def CPFile(src, dest):
+ """Copy a file.
+ @param src: Source file path.
+ @param dest: Destination file path.
+ @return: True or False.
+ """
+ if not os.path.isfile(src):
+ return False
+ try:
+ shutil.copy(src, dest)
+ except:
+ return False
+ return True
+
+# ------------------------------------------------------------------------------
# Retrieve the OS temporary directory.
# ------------------------------------------------------------------------------
def GetOSTMPDir():
|
|
From: remi <c2m...@c2...> - 2009-07-08 07:26:10
|
Author: remi
Date: 2009-07-08 09:26:04 +0200 (Wed, 08 Jul 2009)
New Revision: 5079
Modified:
software_suite_v3/smart-core/smart-server/trunk/TDSAutoUpdater.py
Log:
* Added class and method headers.
Modified: software_suite_v3/smart-core/smart-server/trunk/TDSAutoUpdater.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/TDSAutoUpdater.py 2009-07-08 07:20:44 UTC (rev 5078)
+++ software_suite_v3/smart-core/smart-server/trunk/TDSAutoUpdater.py 2009-07-08 07:26:04 UTC (rev 5079)
@@ -57,13 +57,19 @@
'smart_server',
]
+# ------------------------------------------------------------------------------
+# Tux Droid Server : Auto updater.
+# ------------------------------------------------------------------------------
class TDSAutoUpdater(object):
+ """Tux Droid Server : Auto updater.
"""
- """
+ # --------------------------------------------------------------------------
+ # Constructor.
+ # --------------------------------------------------------------------------
def __init__(self):
+ """Constructor.
"""
- """
if not os.path.isdir(TDS_UPDATES_PATH):
DirectoriesAndFilesTools.MKDirs(TDS_UPDATES_PATH)
self.__logger = SimpleLogger("auto_updater.log")
@@ -78,9 +84,12 @@
# Write default CVER files
self.__writeDefaultCVerFiles()
+ # --------------------------------------------------------------------------
+ # Write default cver files if not exists.
+ # --------------------------------------------------------------------------
def __writeDefaultCVerFiles(self):
+ """Write default cver files if not exists.
"""
- """
for partName in PART_NAMES:
defaultVersion = UPDATES_PARTS[partName][PART_DEFAULT_VER]
cverFile = os.path.join(TDS_UPDATES_PATH,
@@ -88,9 +97,14 @@
if not os.path.isfile(cverFile):
self.__writeCVerFile(partName, defaultVersion)
+ # --------------------------------------------------------------------------
+ # Write a cver file.
+ # --------------------------------------------------------------------------
def __writeCVerFile(self, partName, currentVersion):
+ """Write a cver file.
+ @param partName: Software part name.
+ @param currentVersion: Current version of the software part.
"""
- """
cverFile = os.path.join(TDS_UPDATES_PATH,
UPDATES_PARTS[partName][PART_CVER_FILE])
if currentVersion != "":
@@ -98,9 +112,14 @@
f.write(currentVersion)
f.close()
+ # --------------------------------------------------------------------------
+ # Get the current version of a software part.
+ # --------------------------------------------------------------------------
def __getCurrentPartVersion(self, partName):
+ """Get the current version of a software part.
+ @param partName: Software part name.
+ @return: A string.
"""
- """
cverFile = os.path.join(TDS_UPDATES_PATH,
UPDATES_PARTS[partName][PART_CVER_FILE])
if os.path.isfile(cverFile):
@@ -111,16 +130,22 @@
else:
return ""
+ # --------------------------------------------------------------------------
+ # Start the auto-updater.
+ # --------------------------------------------------------------------------
def start(self):
+ """Start the auto-updater.
"""
- """
self.__checkStartInstallers()
t = threading.Thread(target = self.__updateFromTheNet)
t.start()
+ # --------------------------------------------------------------------------
+ # Check / Start the installers.
+ # --------------------------------------------------------------------------
def __checkStartInstallers(self):
+ """Check / Start the installers.
"""
- """
for partName in PART_NAMES:
destConf = os.path.join(TDS_UPDATES_PATH,
UPDATES_PARTS[partName][PART_CONF_DEST])
@@ -165,9 +190,12 @@
else:
pass
+ # --------------------------------------------------------------------------
+ # Check for updates.
+ # --------------------------------------------------------------------------
def __updateFromTheNet(self):
+ """Check for updates.
"""
- """
# Wait for connection to internet enabled
while not URLTools.URLCheckConnection():
time.sleep(1.0)
|
|
From: remi <c2m...@c2...> - 2009-07-08 07:20:51
|
Author: remi
Date: 2009-07-08 09:20:44 +0200 (Wed, 08 Jul 2009)
New Revision: 5078
Modified:
software_suite_v3/smart-core/smart-server/trunk/TDSAutoUpdater.py
Log:
* Added logger in the auto-updater
Modified: software_suite_v3/smart-core/smart-server/trunk/TDSAutoUpdater.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/TDSAutoUpdater.py 2009-07-08 06:40:46 UTC (rev 5077)
+++ software_suite_v3/smart-core/smart-server/trunk/TDSAutoUpdater.py 2009-07-08 07:20:44 UTC (rev 5078)
@@ -21,6 +21,7 @@
from util.misc import DirectoriesAndFilesTools
from util.misc import URLTools
+from util.logger import *
DIST_STATE = "beta"
@@ -65,6 +66,15 @@
"""
if not os.path.isdir(TDS_UPDATES_PATH):
DirectoriesAndFilesTools.MKDirs(TDS_UPDATES_PATH)
+ self.__logger = SimpleLogger("auto_updater.log")
+ self.__logger.setTarget(TDS_CONF_LOG_TARGET)
+ self.__logger.setLevel(TDS_CONF_LOG_LEVEL)
+ self.__logger.resetLog()
+ self.__logger.logInfo("-----------------------------------------------")
+ self.__logger.logInfo("TDSAutoUpdater%s" % __version__)
+ self.__logger.logInfo("Author : %s" % __author__)
+ self.__logger.logInfo("Licence : %s" % __licence__)
+ self.__logger.logInfo("-----------------------------------------------")
# Write default CVER files
self.__writeDefaultCVerFiles()
@@ -121,6 +131,10 @@
try:
confDict = eval(f.read())
except:
+ self.__logger.logError("Conf file is corrupted [%s]" % UPDATES_PARTS[partName][PART_CONF_DEST])
+ f.close()
+ DirectoriesAndFilesTools.RMFile(destConf)
+ DirectoriesAndFilesTools.RMFile(cverFile)
continue
f.close()
archName = "win32"
@@ -145,9 +159,9 @@
"/S",
"/START=true",
]
- print "Install : [%s](%s)" % (installerName, currentVersion)
+ self.__logger.logInfo("Installation started [%s] (%s)" % (installerName, currentVersion))
process = subprocess.Popen(cmd)
- print "Installed : [%s](%s)" % (installerName, currentVersion)
+ self.__logger.logInfo("Installation finished")
else:
pass
@@ -157,6 +171,7 @@
# Wait for connection to internet enabled
while not URLTools.URLCheckConnection():
time.sleep(1.0)
+ self.__logger.logInfo("Internet connection is detected")
# Download conf files
for partName in PART_NAMES:
confUrl = UPDATES_PARTS[partName][PART_CONF_SRC_URL]
@@ -165,31 +180,40 @@
try:
confDict = eval(confStr)
except:
+ self.__logger.logError("Conf file is corrupted [%s]" % confUrl)
continue
archName = "win32"
if os.name == "nt":
if not confDict.has_key('win32'):
+ self.__logger.logWarning("Conf file have no information for your system [%s]" % confUrl)
continue
archName = "win32"
else:
if not confDict.has_key('unix'):
+ self.__logger.logWarning("Conf file have no information for your system [%s]" % confUrl)
continue
archName = "unix"
currentVersion = self.__getCurrentPartVersion(partName)
stateVersion = confDict[archName]["version"]
- print "[%s] : CV = [%s] SV = [%s]" % (partName, currentVersion,
- stateVersion)
+ self.__logger.logInfo("Versions for [%s] :" % partName)
+ self.__logger.logInfo("\tCurrent version : %s" % currentVersion)
+ self.__logger.logInfo("\tServer version : %s" % stateVersion)
if stateVersion != currentVersion:
+ self.__logger.logInfo("\tNew version available")
installerUrl = confDict[archName]["url"]
installerDest = os.path.join(TDS_UPDATES_PATH,
confDict[archName]["fileName"])
- print "Download installer : [%s]" % confDict[archName]["fileName"]
+ self.__logger.logInfo("\tStart to download the new version installer")
+ self.__logger.logInfo("\tFrom [%s]" % installerUrl)
+ self.__logger.logInfo("\tTo [%s]" % installerDest)
if URLTools.URLDownloadToFile(installerUrl, installerDest):
- print "Installer downloaded : [%s]" % confDict[archName]["fileName"]
+ self.__logger.logInfo("\tNew installer is successfully downloaded")
destConf = os.path.join(TDS_UPDATES_PATH,
UPDATES_PARTS[partName][PART_CONF_DEST])
f = open(destConf, "w")
f.write(str(confDict))
f.close()
else:
- print "Can't download installer : [%s]" % confDict[archName]["fileName"]
+ self.__logger.logInfo("\tCan't download the installer")
+ else:
+ self.__logger.logInfo("\tYour version up to date")
|
|
From: remi <c2m...@c2...> - 2009-07-08 07:06:28
|
Author: remi Date: 2009-07-08 08:40:46 +0200 (Wed, 08 Jul 2009) New Revision: 5077 Modified: software_suite_v3/smart-core/smart-server/trunk/util/misc/URLTools.py Log: * Url to check must start by "http://" Modified: software_suite_v3/smart-core/smart-server/trunk/util/misc/URLTools.py =================================================================== --- software_suite_v3/smart-core/smart-server/trunk/util/misc/URLTools.py 2009-07-08 06:36:37 UTC (rev 5076) +++ software_suite_v3/smart-core/smart-server/trunk/util/misc/URLTools.py 2009-07-08 06:40:46 UTC (rev 5077) @@ -23,7 +23,7 @@ # ------------------------------------------------------------------------------ # Check the internet connection. # ------------------------------------------------------------------------------ -def URLCheckConnection(urlToCheck = "www.kysoh.com"): +def URLCheckConnection(urlToCheck = "http://www.kysoh.com"): """Check the internet connection. @param urlToCheck: Check connection with this url. @return: The internet connection state. |
|
From: remi <c2m...@c2...> - 2009-07-08 06:36:59
|
Author: remi
Date: 2009-07-08 08:36:37 +0200 (Wed, 08 Jul 2009)
New Revision: 5076
Modified:
software_suite_v3/smart-core/smart-server/trunk/TDSAutoUpdater.py
software_suite_v3/smart-core/smart-server/trunk/util/misc/URLTools.py
Log:
* Wait that the connection to Internet is enabled before to start the check of the updates.
Modified: software_suite_v3/smart-core/smart-server/trunk/TDSAutoUpdater.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/TDSAutoUpdater.py 2009-07-07 20:21:00 UTC (rev 5075)
+++ software_suite_v3/smart-core/smart-server/trunk/TDSAutoUpdater.py 2009-07-08 06:36:37 UTC (rev 5076)
@@ -15,6 +15,7 @@
import os
import threading
import subprocess
+import time
from TDSConfiguration import *
@@ -153,6 +154,9 @@
def __updateFromTheNet(self):
"""
"""
+ # Wait for connection to internet enabled
+ while not URLTools.URLCheckConnection():
+ time.sleep(1.0)
# Download conf files
for partName in PART_NAMES:
confUrl = UPDATES_PARTS[partName][PART_CONF_SRC_URL]
Modified: software_suite_v3/smart-core/smart-server/trunk/util/misc/URLTools.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/util/misc/URLTools.py 2009-07-07 20:21:00 UTC (rev 5075)
+++ software_suite_v3/smart-core/smart-server/trunk/util/misc/URLTools.py 2009-07-08 06:36:37 UTC (rev 5076)
@@ -23,8 +23,9 @@
# ------------------------------------------------------------------------------
# Check the internet connection.
# ------------------------------------------------------------------------------
-def URLCheckConnection():
+def URLCheckConnection(urlToCheck = "www.kysoh.com"):
"""Check the internet connection.
+ @param urlToCheck: Check connection with this url.
@return: The internet connection state.
"""
# Save the old default connection timeout
@@ -35,7 +36,7 @@
result = True
# Attempt to connect to the google web site
try:
- f = urllib2.urlopen("http://www.google.com")
+ f = urllib2.urlopen(urlToCheck)
f.close()
except urllib2.HTTPError, exc:
result = False
|
|
From: remi <c2m...@c2...> - 2009-07-07 20:21:12
|
Author: remi
Date: 2009-07-07 22:21:00 +0200 (Tue, 07 Jul 2009)
New Revision: 5075
Added:
software_suite_v3/smart-core/smart-server/trunk/TDSAutoUpdater.py
Modified:
software_suite_v3/smart-core/smart-server/trunk/TDSConfiguration.py
software_suite_v3/smart-core/smart-server/trunk/TuxDroidServer.py
software_suite_v3/smart-core/smart-server/trunk/installer.nsi
Log:
* Added auto-update system for ("smart_server", "smart_api", "smart_content") (Only Windows for now)
Added: software_suite_v3/smart-core/smart-server/trunk/TDSAutoUpdater.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/TDSAutoUpdater.py (rev 0)
+++ software_suite_v3/smart-core/smart-server/trunk/TDSAutoUpdater.py 2009-07-07 20:21:00 UTC (rev 5075)
@@ -0,0 +1,191 @@
+# -*- coding: latin1 -*-
+
+import version
+__author__ = version.author
+__date__ = version.date
+__version__ = version.version
+__licence__ = version.licence
+del version
+
+# Copyright (C) 2009 C2ME Sa
+# Remi Jocaille <rem...@c2...>
+# Distributed under the terms of the GNU General Public License
+# http://www.gnu.org/copyleft/gpl.html
+
+import os
+import threading
+import subprocess
+
+from TDSConfiguration import *
+
+from util.misc import DirectoriesAndFilesTools
+from util.misc import URLTools
+
+DIST_STATE = "beta"
+
+PART_CONF_SRC_URL = 0
+PART_CONF_DEST = 1
+PART_CVER_FILE = 2
+PART_DEFAULT_VER = 3
+
+UPDATES_PARTS = {
+ 'smart_server' : [
+ 'http://ftp.kysoh.com/ssv3/smart_core/smart_server/%s.conf' % DIST_STATE,
+ 'smart_server.conf',
+ 'smart_server.cver',
+ __version__,
+ ],
+ 'smart_api' : [
+ 'http://ftp.kysoh.com/ssv3/smart_core/smart_api/%s.conf' % DIST_STATE,
+ 'smart_api.conf',
+ 'smart_api.cver',
+ '',
+ ],
+ 'smart_content' : [
+ 'http://ftp.kysoh.com/ssv3/smart_core/smart_content/%s.conf' % DIST_STATE,
+ 'smart_content.conf',
+ 'smart_content.cver',
+ '',
+ ],
+}
+
+PART_NAMES = [
+ 'smart_content',
+ 'smart_api',
+ 'smart_server',
+]
+
+class TDSAutoUpdater(object):
+ """
+ """
+
+ def __init__(self):
+ """
+ """
+ if not os.path.isdir(TDS_UPDATES_PATH):
+ DirectoriesAndFilesTools.MKDirs(TDS_UPDATES_PATH)
+ # Write default CVER files
+ self.__writeDefaultCVerFiles()
+
+ def __writeDefaultCVerFiles(self):
+ """
+ """
+ for partName in PART_NAMES:
+ defaultVersion = UPDATES_PARTS[partName][PART_DEFAULT_VER]
+ cverFile = os.path.join(TDS_UPDATES_PATH,
+ UPDATES_PARTS[partName][PART_CVER_FILE])
+ if not os.path.isfile(cverFile):
+ self.__writeCVerFile(partName, defaultVersion)
+
+ def __writeCVerFile(self, partName, currentVersion):
+ """
+ """
+ cverFile = os.path.join(TDS_UPDATES_PATH,
+ UPDATES_PARTS[partName][PART_CVER_FILE])
+ if currentVersion != "":
+ f = open(cverFile, "w")
+ f.write(currentVersion)
+ f.close()
+
+ def __getCurrentPartVersion(self, partName):
+ """
+ """
+ cverFile = os.path.join(TDS_UPDATES_PATH,
+ UPDATES_PARTS[partName][PART_CVER_FILE])
+ if os.path.isfile(cverFile):
+ f = open(cverFile, "r")
+ result = f.read()
+ f.close()
+ return result
+ else:
+ return ""
+
+ def start(self):
+ """
+ """
+ self.__checkStartInstallers()
+ t = threading.Thread(target = self.__updateFromTheNet)
+ t.start()
+
+ def __checkStartInstallers(self):
+ """
+ """
+ for partName in PART_NAMES:
+ destConf = os.path.join(TDS_UPDATES_PATH,
+ UPDATES_PARTS[partName][PART_CONF_DEST])
+ cverFile = os.path.join(TDS_UPDATES_PATH,
+ UPDATES_PARTS[partName][PART_CVER_FILE])
+ if os.path.isfile(destConf):
+ f = open(destConf, "r")
+ try:
+ confDict = eval(f.read())
+ except:
+ continue
+ f.close()
+ archName = "win32"
+ if os.name == "nt":
+ if not confDict.has_key('win32'):
+ continue
+ archName = "win32"
+ else:
+ if not confDict.has_key('unix'):
+ continue
+ archName = "unix"
+ installerName = confDict[archName]["fileName"]
+ currentVersion = confDict[archName]["version"]
+ if self.__getCurrentPartVersion(partName) == currentVersion:
+ continue
+ # Write CVER file
+ self.__writeCVerFile(partName, currentVersion)
+ installerFile = os.path.join(TDS_UPDATES_PATH, installerName)
+ if os.name == "nt":
+ cmd = [
+ installerFile,
+ "/S",
+ "/START=true",
+ ]
+ print "Install : [%s](%s)" % (installerName, currentVersion)
+ process = subprocess.Popen(cmd)
+ print "Installed : [%s](%s)" % (installerName, currentVersion)
+ else:
+ pass
+
+ def __updateFromTheNet(self):
+ """
+ """
+ # Download conf files
+ for partName in PART_NAMES:
+ confUrl = UPDATES_PARTS[partName][PART_CONF_SRC_URL]
+ confStr = URLTools.URLDownloadToString(confUrl)
+ if confStr != None:
+ try:
+ confDict = eval(confStr)
+ except:
+ continue
+ archName = "win32"
+ if os.name == "nt":
+ if not confDict.has_key('win32'):
+ continue
+ archName = "win32"
+ else:
+ if not confDict.has_key('unix'):
+ continue
+ archName = "unix"
+ currentVersion = self.__getCurrentPartVersion(partName)
+ stateVersion = confDict[archName]["version"]
+ print "[%s] : CV = [%s] SV = [%s]" % (partName, currentVersion,
+ stateVersion)
+ if stateVersion != currentVersion:
+ installerUrl = confDict[archName]["url"]
+ installerDest = os.path.join(TDS_UPDATES_PATH,
+ confDict[archName]["fileName"])
+ print "Download installer : [%s]" % confDict[archName]["fileName"]
+ if URLTools.URLDownloadToFile(installerUrl, installerDest):
+ print "Installer downloaded : [%s]" % confDict[archName]["fileName"]
+ destConf = os.path.join(TDS_UPDATES_PATH,
+ UPDATES_PARTS[partName][PART_CONF_DEST])
+ f = open(destConf, "w")
+ f.write(str(confDict))
+ f.close()
+ else:
+ print "Can't download installer : [%s]" % confDict[archName]["fileName"]
Modified: software_suite_v3/smart-core/smart-server/trunk/TDSConfiguration.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/TDSConfiguration.py 2009-07-07 20:08:38 UTC (rev 5074)
+++ software_suite_v3/smart-core/smart-server/trunk/TDSConfiguration.py 2009-07-07 20:21:00 UTC (rev 5075)
@@ -97,6 +97,8 @@
TDS_DEFAULT_CONTENT_PATH = os.path.join(ALLUSERSBASEDIR, "resources")
else:
TDS_DEFAULT_CONTENT_PATH = os.path.join(TUXDROID_BASE_PATH, "resources")
+# Path of the server updates
+TDS_UPDATES_PATH = os.path.join(TDS_DEFAULT_CONTENT_PATH, "updates")
# ------------------------------------------------------------------------------
# Resources configuration
Modified: software_suite_v3/smart-core/smart-server/trunk/TuxDroidServer.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/TuxDroidServer.py 2009-07-07 20:08:38 UTC (rev 5074)
+++ software_suite_v3/smart-core/smart-server/trunk/TuxDroidServer.py 2009-07-07 20:21:00 UTC (rev 5075)
@@ -28,6 +28,7 @@
from TDSHTTPServer import *
from TDSResourcesManager import *
from TDSConfiguration import *
+from TDSAutoUpdater import TDSAutoUpdater
# Define the events handler.
eventsHandler = TuxEventHandlers()
@@ -56,6 +57,9 @@
def initializeServer():
"""Initialize the server.
"""
+ # Check for updates
+ autoUpdater = TDSAutoUpdater()
+ autoUpdater.start()
# Load and start the resources manager
resourcesManager.load(TDS_RESOURCES_PATH)
resourcesManager.addDirectoryToServe("/data/web_interface/server_menu/xsl/")
Modified: software_suite_v3/smart-core/smart-server/trunk/installer.nsi
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/installer.nsi 2009-07-07 20:08:38 UTC (rev 5074)
+++ software_suite_v3/smart-core/smart-server/trunk/installer.nsi 2009-07-07 20:21:00 UTC (rev 5075)
@@ -39,6 +39,7 @@
DetailPrint "Uninstalling old versions"
SetDetailsPrint none
ExecWait '"$TUXDROID_PATH\uninstallers\sub\${UNINSTALLER_EXE}" /S _?=$TUXDROID_PATH\uninstallers'
+ Sleep 3000
SetDetailsPrint textonly
!endif
SectionEnd
@@ -66,6 +67,7 @@
File TDSHTTPServer.py
File TDSResourcesManager.py
File TDSService.py
+ File TDSAutoUpdater.py
File TuxDroidServer.py
CreateDirectory "$TUXDROID_PATH\softwares\smart-server\data"
@@ -122,12 +124,19 @@
; -----------------------------------------------------------------------------
Section "Uninstall"
; Kill troublesome tasks
- Processes::KillProcess "pythonForTuxdroid"
- Processes::KillProcess "pythonForTuxdroidA"
+ Processes::KillProcess "tux_wifi_channel"
+ Sleep 100
+ Processes::KillProcess "SCMSN"
+ Sleep 100
Processes::KillProcess "python"
+ Sleep 100
Processes::KillProcess "java"
+ Sleep 100
Processes::KillProcess "javaw"
- Processes::KillProcess "tux_wifi_channel"
+ Sleep 100
+ Processes::KillProcess "pythonForTuxdroid"
+ Sleep 100
+ Processes::KillProcess "pythonForTuxdroidA"
; Get the Tuxdroid installation paths
ReadRegStr $TUXDROID_PATH HKLM "SOFTWARE\Tux Droid\Installation" "Install_Dir"
|
|
From: remi <c2m...@c2...> - 2009-07-07 20:09:02
|
Author: remi
Date: 2009-07-07 22:08:38 +0200 (Tue, 07 Jul 2009)
New Revision: 5074
Modified:
software_suite_v3/smart-core/smart-api/python/trunk/installer.nsi
Log:
* Updated installer
Modified: software_suite_v3/smart-core/smart-api/python/trunk/installer.nsi
===================================================================
--- software_suite_v3/smart-core/smart-api/python/trunk/installer.nsi 2009-07-07 11:44:38 UTC (rev 5073)
+++ software_suite_v3/smart-core/smart-api/python/trunk/installer.nsi 2009-07-07 20:08:38 UTC (rev 5074)
@@ -84,13 +84,6 @@
; Section "Uninstall"
; -----------------------------------------------------------------------------
Section "Uninstall"
- ; Kill troublesome tasks
- Processes::KillProcess "pythonForTuxdroid"
- Processes::KillProcess "pythonForTuxdroidA"
- Processes::KillProcess "python"
- Processes::KillProcess "java"
- Processes::KillProcess "javaw"
- Processes::KillProcess "tux_wifi_channel"
; Get the Tuxdroid installation paths
ReadRegStr $TUXDROID_PATH HKLM "SOFTWARE\Tux Droid\Installation" "Install_Dir"
StrCpy $TUXDROID_PYTHON_PATH "$TUXDROID_PATH\softwares\python2.4"
|
|
From: remi <c2m...@c2...> - 2009-07-07 16:56:32
|
Author: remi
Date: 2009-07-07 12:55:38 +0200 (Tue, 07 Jul 2009)
New Revision: 5070
Modified:
software_suite_v3/software/tool/tool-attitunes-studio/trunk/resources/plugin.xml
software_suite_v3/software/tool/tool-attitunes-studio/trunk/src/MainFrame.java
Log:
* Smart-core can now pass a default output path to Attitunes Studio.
* Replace white space by "_" in the att output files.
Modified: software_suite_v3/software/tool/tool-attitunes-studio/trunk/resources/plugin.xml
===================================================================
--- software_suite_v3/software/tool/tool-attitunes-studio/trunk/resources/plugin.xml 2009-07-07 09:56:01 UTC (rev 5069)
+++ software_suite_v3/software/tool/tool-attitunes-studio/trunk/resources/plugin.xml 2009-07-07 10:55:38 UTC (rev 5070)
@@ -19,6 +19,11 @@
description="Path of the attitune to edit"
type="string"
defaultValue="template.att" />
+ <parameter
+ name="outputpath"
+ description="Default output path"
+ type="string"
+ defaultValue="my/path" />
</parameters>
<commands>
<command
Modified: software_suite_v3/software/tool/tool-attitunes-studio/trunk/src/MainFrame.java
===================================================================
--- software_suite_v3/software/tool/tool-attitunes-studio/trunk/src/MainFrame.java 2009-07-07 09:56:01 UTC (rev 5069)
+++ software_suite_v3/software/tool/tool-attitunes-studio/trunk/src/MainFrame.java 2009-07-07 10:55:38 UTC (rev 5070)
@@ -89,6 +89,7 @@
private JPanel jPanelBlockHead;
private JFileChooser fileChooser;
+ private File defaultIOPath;
private boolean confirmExit = false;
@@ -128,11 +129,18 @@
if (path == null)
{
+ String strDefaultIOPath = System.getenv("tgp_outputpath");
+ defaultIOPath = new File(new File(strDefaultIOPath).getAbsolutePath());
+ if (!defaultIOPath.isDirectory())
+ {
+ defaultIOPath = null;
+ }
attBlockViewer.loadAttitune(ATTConfig.ATT_TEMPLATE_PATH); //$NON-NLS-1$
attBlockViewer.setAttituneIsTemplate(true);
}
else
{
+ defaultIOPath = new File(new File(path).getAbsolutePath());
attBlockViewer.loadAttitune(path); //$NON-NLS-1$
attBlockViewer.setAttituneIsTemplate(false);
}
@@ -566,6 +574,11 @@
}
}
}
+ /* Set the default output path */
+ if (defaultIOPath != null)
+ {
+ fileChooser.setCurrentDirectory(defaultIOPath);
+ }
/* Load a file viewer to select an attitune */
if (fileChooser.showOpenDialog(this) != JFileChooser.APPROVE_OPTION)
{
@@ -632,6 +645,11 @@
JOptionPane.INFORMATION_MESSAGE);
return;
}
+ /* Set the default output path */
+ if (defaultIOPath != null)
+ {
+ fileChooser.setCurrentDirectory(defaultIOPath);
+ }
/* Open a file viewer to select an attitune */
if (fileChooser.showSaveDialog(this) != JFileChooser.APPROVE_OPTION)
{
@@ -643,8 +661,16 @@
return;
}
- String outPath = selFile.getPath();
+ String outPath = selFile.getParent();
+ String outFileName = selFile.getName();
+ outFileName = outFileName.replaceAll(" ", "_");
+ outPath = outPath + File.separator + outFileName;
+ JOptionPane.showMessageDialog(this,
+ outPath,
+ ATTMessages.getString("MainFrame.1"),
+ JOptionPane.INFORMATION_MESSAGE);
+
if (!outPath.toLowerCase().endsWith(".att"))
{
outPath += ".att";
|
|
From: remi <c2m...@c2...> - 2009-07-07 15:49:58
|
Author: remi Date: 2009-07-07 11:56:01 +0200 (Tue, 07 Jul 2009) New Revision: 5069 Added: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/ software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_alert.png software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_education.png software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_fun.png software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_kids.png software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_messages.png software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_music.png software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_others.png software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_system.png Log: * Added attitune icons Added: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_alert.png =================================================================== (Binary files differ) Property changes on: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_alert.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_education.png =================================================================== (Binary files differ) Property changes on: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_education.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_fun.png =================================================================== (Binary files differ) Property changes on: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_fun.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_kids.png =================================================================== (Binary files differ) Property changes on: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_kids.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_messages.png =================================================================== (Binary files differ) Property changes on: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_messages.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_music.png =================================================================== (Binary files differ) Property changes on: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_music.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_others.png =================================================================== (Binary files differ) Property changes on: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_others.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_system.png =================================================================== (Binary files differ) Property changes on: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/common/img/att_icon_system.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream |
|
From: remi <c2m...@c2...> - 2009-07-07 14:59:52
|
Author: remi
Date: 2009-07-07 13:26:05 +0200 (Tue, 07 Jul 2009)
New Revision: 5072
Modified:
software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/xsl/tools.xsl
software_suite_v3/smart-core/smart-server/trunk/resources/05_user_configurations/00_resourceUsers.py
software_suite_v3/smart-core/smart-server/trunk/resources/07_web_interfaces/01_resourceWIUser01.py
Log:
* Set the default attitunes user path on starting Attitunes Studio from the "tools" page.
Modified: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/xsl/tools.xsl
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/xsl/tools.xsl 2009-07-07 11:25:13 UTC (rev 5071)
+++ software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/xsl/tools.xsl 2009-07-07 11:26:05 UTC (rev 5072)
@@ -56,6 +56,15 @@
getRequest("/plugins_server/start_plugin", args);
}
+ function startAttitunesStudio()
+ {
+ var language = document.getElementById("language").value;
+ var args = {
+ "language" : language
+ }
+ getRequest("/wi_user_01/start_attitunes_studio", args);
+ }
+
function updateWindowAbout(uuid)
{
if (!icon1AlreadyPng)
@@ -140,7 +149,7 @@
<xsl:element name="a">
<xsl:attribute name="class">toolsBtnTitle toolsBtnStartEnable</xsl:attribute>
<xsl:attribute name="id">toolsStartAttitunesStatudio</xsl:attribute>
- <xsl:attribute name="onclick">javascript:startATool('<xsl:value-of select="root/data/attitunes_studio/uuid"/>');return false;</xsl:attribute>
+ <xsl:attribute name="onclick">javascript:startAttitunesStudio();return false;</xsl:attribute>
<xsl:attribute name="href">#</xsl:attribute><xsl:value-of select="root/translations/start"/>
</xsl:element>
<span class="toolsRowName"><xsl:value-of select="root/data/attitunes_studio/name"/></span>
Modified: software_suite_v3/smart-core/smart-server/trunk/resources/05_user_configurations/00_resourceUsers.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/resources/05_user_configurations/00_resourceUsers.py 2009-07-07 11:25:13 UTC (rev 5071)
+++ software_suite_v3/smart-core/smart-server/trunk/resources/05_user_configurations/00_resourceUsers.py 2009-07-07 11:26:05 UTC (rev 5072)
@@ -124,6 +124,13 @@
@return: The current user configuration as string.
"""
return self.__userConfiguration
+
+ def getCurrentUserBasePath(self):
+ """Get the current user base directory
+ @return: A string.
+ """
+ userName = self.__userConfiguration['name']
+ return os.path.join(TDS_USERS_CONF_PATH, userName)
def updateCurrentUserConfiguration(self, userConfiguration):
"""Update the current user configuration.
Modified: software_suite_v3/smart-core/smart-server/trunk/resources/07_web_interfaces/01_resourceWIUser01.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/resources/07_web_interfaces/01_resourceWIUser01.py 2009-07-07 11:25:13 UTC (rev 5071)
+++ software_suite_v3/smart-core/smart-server/trunk/resources/07_web_interfaces/01_resourceWIUser01.py 2009-07-07 11:26:05 UTC (rev 5072)
@@ -457,6 +457,41 @@
resourceWIUser01.addService(TDSServiceWIUser01ApplyGadget)
# ------------------------------------------------------------------------------
+# Declaration of the service "start_attitunes_studio".
+# ------------------------------------------------------------------------------
+class TDSServiceWIUser01StartAttitunesStudio(TDSService):
+
+ def configure(self):
+ self.parametersDict = {
+ 'language' : 'string',
+ }
+ self.minimalUserLevel = TDS_CLIENT_LEVEL_ANONYMOUS
+ self.exclusiveExecution = False
+ self.name = "start_attitunes_studio"
+ self.comment = "Edit an attitune with Attitunes Studio."
+
+ def execute(self, id, parameters):
+ headersStruct = self.getDefaultHeadersStruct()
+ contentStruct = self.getDefaultContentStruct()
+ contentStruct['root']['result'] = getStrError(E_TDREST_SUCCESS)
+ language = parameters['language']
+ outputPath = os.path.join(resourceUsers.getCurrentUserBasePath(),
+ "attitunes")
+ t = threading.Thread(target = resourcePluginsServer.startPlugin,
+ args = (
+ "548f7a9a-567d-773e-a0dd-102fe68a1b49",
+ "run",
+ {
+ 'outputpath' : outputPath,
+ 'language' : language,
+ }))
+ t.start()
+ return headersStruct, contentStruct
+
+# Register the service into the resource
+resourceWIUser01.addService(TDSServiceWIUser01StartAttitunesStudio)
+
+# ------------------------------------------------------------------------------
# Declaration of the service "edit_attitune".
# ------------------------------------------------------------------------------
class TDSServiceWIUser01EditAttitune(TDSService):
|
|
From: remi <c2m...@c2...> - 2009-07-07 11:45:03
|
Author: remi
Date: 2009-07-07 13:44:38 +0200 (Tue, 07 Jul 2009)
New Revision: 5073
Modified:
software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/xsl/attitunes.xsl
software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/00_resourceAttituneManager.py
software_suite_v3/smart-core/smart-server/trunk/resources/04_robot_content_interactions/00_resourceRobotContentInteractions.py
Log:
* Added a way to automatically refresh the attitunes list in the "attitunes" page when Attitunes Studio is closed.
Modified: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/xsl/attitunes.xsl
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/xsl/attitunes.xsl 2009-07-07 11:26:05 UTC (rev 5072)
+++ software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/xsl/attitunes.xsl 2009-07-07 11:44:38 UTC (rev 5073)
@@ -71,8 +71,12 @@
return;
}
var name = result.get("name");
- if (name != knowedPlayingAttituneName)
+ if (name == "1")
{
+ fillAttituneRows(knowedAttitunesFilter);
+ }
+ else if (name != knowedPlayingAttituneName)
+ {
knowedPlayingAttituneName = name;
if (knowedAttitunesDict != null)
{
Modified: software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/00_resourceAttituneManager.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/00_resourceAttituneManager.py 2009-07-07 11:26:05 UTC (rev 5072)
+++ software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/00_resourceAttituneManager.py 2009-07-07 11:44:38 UTC (rev 5073)
@@ -159,6 +159,7 @@
def __attituneStartingLoop(self, attitune, duration):
self.__setAttituneRunName(attitune.getDescription().getName())
self.__setAttituneRun(True)
+ duration += 0.5
timeout = int(duration * 10)
self.logger.logInfo("Attitune starting [%s]" % (
attitune.getDescription().getName(),))
@@ -339,6 +340,8 @@
def getAttitunesDictAll(self):
"""
"""
+ if self.getAttituneRunName() == "1":
+ self.__setAttituneRunName("0")
result = {}
count = 0
attitunes = self.getAttitunesContainer().getAttitunes()
@@ -355,6 +358,12 @@
count += 1
result['count'] = count
return result
+
+ def checkForUpdates(self):
+ """
+ """
+ self.__attitunesContainer.check()
+ self.__setAttituneRunName("1")
# Create an instance of the resource
resourceAttituneManager = TDSResourceAttituneManager("resourceAttituneManager")
Modified: software_suite_v3/smart-core/smart-server/trunk/resources/04_robot_content_interactions/00_resourceRobotContentInteractions.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/resources/04_robot_content_interactions/00_resourceRobotContentInteractions.py 2009-07-07 11:26:05 UTC (rev 5072)
+++ software_suite_v3/smart-core/smart-server/trunk/resources/04_robot_content_interactions/00_resourceRobotContentInteractions.py 2009-07-07 11:44:38 UTC (rev 5073)
@@ -1163,7 +1163,7 @@
# When Attitune Studio is stopped, we need to observe eventual changes
# In the deployed attitune directories.
if uuid == "548f7a9a-567d-773e-a0dd-102fe68a1b49":
- resourceAttituneManager.getAttitunesContainer().check()
+ resourceAttituneManager.checkForUpdates()
def __onHeadBtEvent(self, *args):
"""
|
|
From: remi <c2m...@c2...> - 2009-07-07 11:25:32
|
Author: remi
Date: 2009-07-07 13:25:13 +0200 (Tue, 07 Jul 2009)
New Revision: 5071
Modified:
software_suite_v3/software/tool/tool-attitunes-studio/trunk/src/MainFrame.java
Log:
* Removed a debug message
Modified: software_suite_v3/software/tool/tool-attitunes-studio/trunk/src/MainFrame.java
===================================================================
--- software_suite_v3/software/tool/tool-attitunes-studio/trunk/src/MainFrame.java 2009-07-07 10:55:38 UTC (rev 5070)
+++ software_suite_v3/software/tool/tool-attitunes-studio/trunk/src/MainFrame.java 2009-07-07 11:25:13 UTC (rev 5071)
@@ -666,11 +666,6 @@
outFileName = outFileName.replaceAll(" ", "_");
outPath = outPath + File.separator + outFileName;
- JOptionPane.showMessageDialog(this,
- outPath,
- ATTMessages.getString("MainFrame.1"),
- JOptionPane.INFORMATION_MESSAGE);
-
if (!outPath.toLowerCase().endsWith(".att"))
{
outPath += ".att";
|
|
From: remi <c2m...@c2...> - 2009-07-07 10:49:43
|
Author: remi
Date: 2009-07-07 11:51:33 +0200 (Tue, 07 Jul 2009)
New Revision: 5068
Added:
software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/img/frame_01_bottom_3.png
software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/img/frame_01_middle_4.png
software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/img/gadgets_btn_edit_activate.png
software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/img/gadgets_btn_edit_disable.png
software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/img/gadgets_btn_edit_enable.png
Modified:
software_suite_v3/smart-core/smart-server/trunk/TuxDroidServer.py
software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/css/attitunes.css
software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/xsl/attitunes.xsl
software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/00_resourceAttituneManager.py
software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/01_resourcePluginsServer.py
software_suite_v3/smart-core/smart-server/trunk/resources/04_robot_content_interactions/00_resourceRobotContentInteractions.py
software_suite_v3/smart-core/smart-server/trunk/resources/07_web_interfaces/01_resourceWIUser01.py
software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/default.pot
software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/en.po
software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/fr.po
software_suite_v3/smart-core/smart-server/trunk/util/attitunes/Attitune.py
software_suite_v3/smart-core/smart-server/trunk/util/attitunes/AttitunesContainer.py
Log:
* Updated "attitunes" page.
- Filters not yet implemented
- You need attitunes files in the server attitunes directory or in the user attitunes directory.
Modified: software_suite_v3/smart-core/smart-server/trunk/TuxDroidServer.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/TuxDroidServer.py 2009-07-06 15:01:22 UTC (rev 5067)
+++ software_suite_v3/smart-core/smart-server/trunk/TuxDroidServer.py 2009-07-07 09:51:33 UTC (rev 5068)
@@ -63,6 +63,8 @@
"data", "favicon", "favicon.ico"), "/favicon.ico")
# Load wiky scripts
resourcesManager.addDirectoryToServe("/data/web_interface/common/wiky/")
+ # Commons
+ resourcesManager.addDirectoryToServe("/data/web_interface/common/img/")
# Devel web interface
resourcesManager.addDirectoryToServe("/data/web_interface/devel/xsl/")
resourcesManager.addDirectoryToServe("/data/web_interface/devel/css/")
Modified: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/css/attitunes.css
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/css/attitunes.css 2009-07-06 15:01:22 UTC (rev 5067)
+++ software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/css/attitunes.css 2009-07-07 09:51:33 UTC (rev 5068)
@@ -9,9 +9,9 @@
div.frame01TopSpace{
margin-top:15px;
font-family:Verdana, Bitstream Vera Sans;
- background-image:url(/data/web_interface/user_01/img/frame_01_top.png);
+ background-image:url(/data/web_interface/user_01/img/frame_01_top_2.png);
background-repeat:no-repeat;
- height:10px;
+ height:40px;
width:855px;
overflow: hidden;
}
@@ -23,8 +23,19 @@
background-repeat:repeat;
height:1px;
width:855px;
+ overflow: hidden;
}
+div.frame01Middle2{
+ font-family:Verdana, Bitstream Vera Sans;
+ display:table;
+ background-image:url(/data/web_interface/user_01/img/frame_01_middle_2.png);
+ background-repeat:repeat;
+ height:1px;
+ width:855px;
+ overflow: hidden;
+}
+
div.frame01Sep{
font-family:Verdana, Bitstream Vera Sans;
display:table;
@@ -32,19 +43,91 @@
background-repeat:repeat;
height:4px;
width:855px;
+ overflow: hidden;
}
+div.frame01Sep2{
+ font-family:Verdana, Bitstream Vera Sans;
+ display:table;
+ background-image:url(/data/web_interface/user_01/img/frame_01_sep_2.png);
+ background-repeat:repeat;
+ height:2px;
+ width:845px;
+ overflow: hidden;
+}
+
+div.frame01Sep2{
+ margin-top:2px;
+ display:table;
+ background-image:url(/data/web_interface/user_01/img/frame_01_sep_2.png);
+ background-repeat:repeat;
+ height:2px;
+ width:845px;
+ overflow: hidden;
+}
+
div.frame01Bottom{
margin-top:0px;
font-family:Verdana, Bitstream Vera Sans;
- background-image:url(/data/web_interface/user_01/img/frame_01_bottom.png);
+ background-image:url(/data/web_interface/user_01/img/frame_01_bottom_3.png);
background-repeat:no-repeat;
height:20px;
width:855px;
overflow: hidden;
}
-.toolsBtnTitle{
+div.attitunesListScrollbox{
+ height:465px;
+ width:845px;
+ border-color:black;
+ border-style:solid;
+ border-width:0px;
+ background-color:#DCDADB;
+ overflow-y:auto;
+ overflow-x:hidden;
+ margin-left:5px;
+ margin-right:5px;
+ margin-top:0px;
+ background-image:url(/data/web_interface/user_01/img/frame_01_middle_4.png);
+}
+
+div.attitunesVSpacer{
+ height:34px;
+ width:8px;
+ margin-left:0px;
+ margin-top:0px;
+ display:table;
+ float:left;
+}
+
+.attitunesRowIcon{
+ height:34px;
+ width:34px;
+ margin-left:0px;
+ margin-top:2px;
+ display:table;
+ float:left;
+}
+
+.attitunesRowName{
+ width:470px;
+ height:34px;
+ margin-left:0px;
+ margin-top:2px;
+ display:table;
+ float:left;
+ line-height:34px;
+ font-size:12px;
+ color:#000;
+ text-align:left;
+ vertical-align:middle;
+ font-weight:bold;
+ overflow:hidden;
+ text-decoration:none;
+ font-family:Verdana, Bitstream Vera Sans;
+}
+
+.attitunesBtnTitle{
width:56px;
_width:72px;
height:34px;
@@ -65,31 +148,121 @@
font-family:Verdana, Bitstream Vera Sans;
}
-.toolsBtnStartEnable{
+.attitunesBtnNoTitle{
+ width:32px;
+ height:34px;
+ margin-left:0px;
+ margin-top:2px;
+ display:table;
+ float:left;
+ overflow:hidden;
+}
+
+.attitunesBtnStartEnable{
width:59px;
_width:72px;
padding-left:13px;
background-image:url(/data/web_interface/user_01/img/gadgets_btn_play_enable.png);
}
-.toolsBtnStartEnable:hover{
+.attitunesBtnStartEnable:hover{
background-image:url(/data/web_interface/user_01/img/gadgets_btn_play_activate.png);
}
-.toolsBtnStartActivate{
+.attitunesBtnStartActivate{
width:59px;
_width:72px;
padding-left:13px;
background-image:url(/data/web_interface/user_01/img/gadgets_btn_play_activate.png);
}
-.toolsBtnStartDisable{
+.attitunesBtnStartDisable{
width:59px;
_width:72px;
padding-left:13px;
background-image:url(/data/web_interface/user_01/img/gadgets_btn_play_disable.png);
}
+.attitunesBtnStopEnable{
+ width:53px;
+ _width:72px;
+ padding-left:19px;
+ background-image:url(/data/web_interface/user_01/img/gadgets_btn_stop_enable.png);
+}
+
+.attitunesBtnStopEnable:hover{
+ background-image:url(/data/web_interface/user_01/img/gadgets_btn_stop_activate.png);
+}
+
+.attitunesBtnStopActivate{
+ width:53px;
+ _width:72px;
+ padding-left:19px;
+ background-image:url(/data/web_interface/user_01/img/gadgets_btn_stop_activate.png);
+}
+
+.attitunesBtnStopDisable{
+ width:53px;
+ _width:72px;
+ padding-left:19px;
+ background-image:url(/data/web_interface/user_01/img/gadgets_btn_stop_disable.png);
+}
+
+.attitunesBtnEdit{
+ background-image:url(/data/web_interface/user_01/img/gadgets_btn_edit_enable.png);
+}
+
+.attitunesBtnEdit:hover{
+ background-image:url(/data/web_interface/user_01/img/gadgets_btn_edit_activate.png);
+}
+
+.attitunesBtnEditDisable{
+ background-image:url(/data/web_interface/user_01/img/gadgets_btn_edit_disable.png);
+}
+
+.attitunesBtnDelete{
+ background-image:url(/data/web_interface/user_01/img/gadgets_btn_delete_enable.png);
+}
+
+.attitunesBtnDelete:hover{
+ background-image:url(/data/web_interface/user_01/img/gadgets_btn_delete_activate.png);
+}
+
+.attitunesBtnDeleteDisable{
+ background-image:url(/data/web_interface/user_01/img/gadgets_btn_delete_disable.png);
+}
+
+.attitunesFilterRadio{
+ width:85px;
+ height:25px;
+ margin-left:0px;
+ margin-top:9px;
+ padding-top:-1px;
+ line-height:25px;
+ font-size:10px;
+ color:#FFFFFF;
+ text-align:center;
+ vertical-align:middle;
+ font-weight:bold;
+ overflow:hidden;
+ text-decoration:none;
+ display:table;
+ float:left;
+ font-family:Verdana, Bitstream Vera Sans;
+}
+
+.attitunesFilterRadioEnable{
+ background-image:url(/data/web_interface/user_01/img/gadgets_filter_radio_enable.png);
+}
+
+.attitunesFilterRadioEnable:hover{
+ background-image:url(/data/web_interface/user_01/img/gadgets_filter_radio_activate.png);
+}
+
+.attitunesFilterRadioActivate{
+ background-image:url(/data/web_interface/user_01/img/gadgets_filter_radio_activate.png);
+}
+
.leightbox {
color: #333;
display: none;
Added: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/img/frame_01_bottom_3.png
===================================================================
(Binary files differ)
Property changes on: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/img/frame_01_bottom_3.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/img/frame_01_middle_4.png
===================================================================
(Binary files differ)
Property changes on: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/img/frame_01_middle_4.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/img/gadgets_btn_edit_activate.png
===================================================================
(Binary files differ)
Property changes on: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/img/gadgets_btn_edit_activate.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/img/gadgets_btn_edit_disable.png
===================================================================
(Binary files differ)
Property changes on: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/img/gadgets_btn_edit_disable.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/img/gadgets_btn_edit_enable.png
===================================================================
(Binary files differ)
Property changes on: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/img/gadgets_btn_edit_enable.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/xsl/attitunes.xsl
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/xsl/attitunes.xsl 2009-07-06 15:01:22 UTC (rev 5067)
+++ software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/xsl/attitunes.xsl 2009-07-07 09:51:33 UTC (rev 5068)
@@ -36,9 +36,312 @@
<script type="text/javascript" src="/data/web_interface/user_01/js/lightbox.js"></script>
<script language="javascript">
<![CDATA[
+ var knowedAttitunesFilter = "all_attitunes";
+ var knowedAttitunesDict = null;
+ var knowedPlayingAttituneName = "0";
+ var lastAttituneNameInAction = "0";
+ var lastAttituneIconInAction = "0";
+ var translationStart = "";
+ var translationStop = ""
+ var translationDelete = "";
+
function initialization()
{
+ translationStart = document.getElementById("translationStart").value;
+ translationStop = document.getElementById("translationStop").value;
+ translationDelete = document.getElementById("translationDelete").value;
+ fillAttituneRows("all_attitunes");
+ updatePlayingAttituneName();
}
+
+ function updatePlayingAttituneName()
+ {
+ var result = requestData("/attitune_manager/get_current_playing_attitune",{});
+ if (result != null)
+ {
+ if (!result.containsKey("name"))
+ {
+ setTimeout("updatePlayingAttituneName()", 500);
+ return;
+ }
+ }
+ else
+ {
+ setTimeout("updatePlayingAttituneName()", 500);
+ return;
+ }
+ var name = result.get("name");
+ if (name != knowedPlayingAttituneName)
+ {
+ knowedPlayingAttituneName = name;
+ if (knowedAttitunesDict != null)
+ {
+ var attitunes = knowedAttitunesDict;
+ var attitunesCount = parseInt(attitunes.get("data0").get("count"));
+ for (i = 0; i < attitunesCount; i++)
+ {
+ name = attitunes.get("data0").get("attitune_" + i + "_name");
+ if (thisAttituneIsPlaying(name))
+ {
+ setStartedAttituneButtons(name);
+ disableEditAttituneButtons(name);
+ }
+ else
+ {
+ if (anAttituneIsPlaying())
+ {
+ disableStartStopAttituneButtons(name);
+ enableEditAttituneButtons(name);
+ }
+ else
+ {
+ enableStartStopAttituneButtons(name);
+ enableEditAttituneButtons(name);
+ }
+ }
+ }
+ }
+ }
+ setTimeout("updatePlayingAttituneName()", 500);
+ }
+
+ function fillAttituneRows(filter)
+ {
+ var attitunes = requestData("/attitune_manager/get_attitunes_data",{'filter' : filter});
+ if (attitunes != null)
+ {
+ if (!attitunes.containsKey("data0"))
+ {
+ return;
+ }
+ else
+ {
+ if (attitunes.get("data0").get("count") == '0')
+ {
+ return;
+ }
+ }
+ }
+ else
+ {
+ return;
+ }
+ knowedAttitunesDict = attitunes;
+ knowedPlayingAttituneName = "0";
+ var htmlContent = "";
+ var attitunesCount = parseInt(attitunes.get("data0").get("count"));
+ for (i = 0; i < attitunesCount; i++)
+ {
+ name = attitunes.get("data0").get("attitune_" + i + "_name");
+ icon = attitunes.get("data0").get("attitune_" + i + "_icon");
+ htmlContent += addAttituneRow(name, icon);
+ }
+ document.getElementById("attitunesListScrollbox").innerHTML = htmlContent;
+ // Set png effet for IE6
+ for (i = 0; i < attitunesCount; i++)
+ {
+ var iconId = "attitunesRowIcon_" + attitunes.get("data0").get("attitune_" + i + "_name");
+ setpng(document.getElementById(iconId));
+ }
+ // Show correct filter radio button
+ if (filter == 'all_attitunes')
+ {
+ document.getElementById("attitunesFilterRadioAll").className = "attitunesFilterRadio attitunesFilterRadioActivate";
+ }
+ knowedAttitunesFilter = filter;
+ initializeLightbox();
+ // Scroll up
+ var objDiv = document.getElementById("attitunesListScrollbox");
+ objDiv.scrollTop = 0;
+ }
+
+ function addAttituneRow(name, icon)
+ {
+ var htmlContent = "";
+ var iconId = "attitunesRowIcon_" + name;
+ htmlContent += '<div class="attitunesVSpacer" style="width:10px;"></div>';
+ htmlContent += '<div class="attitunesRowIcon"><img src="' + icon + '" height="34" width="34" id="' + iconId + '"></img></div>';
+ htmlContent += '<div class="attitunesVSpacer" style="width:10px;"></div>';
+ htmlContent += '<span class="attitunesRowName">' + name + '</span>';
+ htmlContent += '<div class="attitunesVSpacer" style="width:10px;"></div>';
+ htmlContent += '<a class="attitunesBtnTitle attitunesBtnStartEnable" id="startId_' + name + '" onclick="javascript:startAttitune(\''+name+'\');return false;" href="#">' + translationStart + '</a>';
+ htmlContent += '<div class="attitunesVSpacer" style="width:8px;"></div>';
+ htmlContent += '<a class="attitunesBtnTitle attitunesBtnStopEnable" id="stopId_' + name + '" onclick="javascript:stopAttitune(\''+name+'\');return false;" href="#">' + translationStop + '</a>';
+ htmlContent += '<div class="attitunesVSpacer" style="width:18px;"></div>';
+ htmlContent += '<a class="attitunesBtnNoTitle attitunesBtnEdit" id="editId_' + name + '" onclick="javascript:setLastAttituneInAction(\''+name+'\');editAttitune();return false;" href="#"></a>';
+ htmlContent += '<div class="attitunesVSpacer" style="width:18px;"></div>';
+ htmlContent += '<a class="attitunesBtnTitle attitunesBtnDelete" id="deleteId_' + name + '" onclick="" href="#" name="lbOn" rel="popupConfirmDelete">' + translationDelete + '</a>';
+ htmlContent += '<div class="frame01Sep2"></div>';
+ return htmlContent;
+ }
+
+ function getAttituneIconFromName(name)
+ {
+ if (knowedAttitunesDict != null)
+ {
+ var attitunes = knowedAttitunesDict;
+ var attitunesCount = parseInt(attitunes.get("data0").get("count"));
+ for (i = 0; i < attitunesCount; i++)
+ {
+ gName = attitunes.get("data0").get("attitune_" + i + "_name");
+ if (gName == name)
+ {
+ return attitunes.get("data0").get("attitune_" + i + "_icon");
+ }
+ }
+ }
+ return "";
+ }
+
+ function disableAllAttituneButtons(name)
+ {
+ disableStartStopAttituneButtons(name);
+ disableEditAttituneButtons(name);
+ }
+
+ function enableAllAttituneButtons(name)
+ {
+ enableStartStopAttituneButtons(name);
+ enableEditAttituneButtons(name);
+ }
+
+ function disableStartStopAttituneButtons(name)
+ {
+ document.getElementById("startId_" + name).className = "attitunesBtnTitle attitunesBtnStartDisable";
+ document.getElementById("stopId_" + name).className = "attitunesBtnTitle attitunesBtnStopDisable";
+ }
+
+ function enableStartStopAttituneButtons(name)
+ {
+ document.getElementById("startId_" + name).className = "attitunesBtnTitle attitunesBtnStartEnable";
+ document.getElementById("stopId_" + name).className = "attitunesBtnTitle attitunesBtnStopEnable";
+ }
+
+ function setStartedAttituneButtons(name)
+ {
+ document.getElementById("startId_" + name).className = "attitunesBtnTitle attitunesBtnStartActivate";
+ document.getElementById("stopId_" + name).className = "attitunesBtnTitle attitunesBtnStopEnable";
+ }
+
+ function disableEditAttituneButtons(name)
+ {
+ document.getElementById("editId_" + name).className = "attitunesBtnNoTitle attitunesBtnEditDisable";
+ document.getElementById("deleteId_" + name).className = "attitunesBtnTitle attitunesBtnDeleteDisable";
+ }
+
+ function enableEditAttituneButtons(name)
+ {
+ document.getElementById("editId_" + name).className = "attitunesBtnNoTitle attitunesBtnEdit";
+ document.getElementById("deleteId_" + name).className = "attitunesBtnTitle attitunesBtnDelete";
+ }
+
+ function thisAttituneIsPlaying(name)
+ {
+ if (name == knowedPlayingAttituneName)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ function anAttituneIsPlaying()
+ {
+ if (knowedPlayingAttituneName != "0")
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ function startAttitune(name)
+ {
+ if (anAttituneIsPlaying())
+ {
+ return;
+ }
+ getRequest("/attitune_manager/start_attitune_by_name",
+ {'name' : name, 'begin' : '0.0'});
+ }
+
+ function stopAttitune(name)
+ {
+ if (anAttituneIsPlaying())
+ {
+ if (!thisAttituneIsPlaying(name))
+ {
+ return;
+ }
+ }
+ else
+ {
+ return;
+ }
+ getRequest("/attitune_manager/stop_attitune", {});
+ }
+
+ function setLastAttituneInAction(name)
+ {
+ var idx = name.indexOf("_", 0) + 1;
+ name = name.slice(idx, name.length);
+ if (anAttituneIsPlaying())
+ {
+ if (thisAttituneIsPlaying(name))
+ {
+ lastAttituneNameInAction = "0";
+ lastAttituneIconInAction = "0";
+ return false;
+ }
+ }
+ lastAttituneNameInAction = name;
+ lastAttituneIconInAction = getAttituneIconFromName(name);
+ return true;
+ }
+
+ function updatePopupAttituneDeleteContent(name)
+ {
+ if (!setLastAttituneInAction(name))
+ {
+ abortNextLightbox();
+ return;
+ }
+ document.getElementById("popup01AttituneDeleteIcon").src = lastAttituneIconInAction;
+ setpng(document.getElementById("popup01AttituneDeleteIcon"));
+ }
+
+ function deleteAttitune()
+ {
+ if (lastAttituneNameInAction == "0")
+ {
+ return;
+ }
+ var args = {
+ "name" : lastAttituneNameInAction
+ }
+ getRequest("/attitune_manager/remove_attitune", args);
+ lastAttituneNameInAction = "0";
+ fillAttituneRows(knowedAttitunesFilter);
+ }
+
+ function editAttitune()
+ {
+ if (lastAttituneNameInAction == "0")
+ {
+ return;
+ }
+ var language = document.getElementById("language").value;
+ var args = {
+ "name" : lastAttituneNameInAction,
+ "language" : language
+ }
+ getRequest("/wi_user_01/edit_attitune", args);
+ lastAttituneNameInAction = "0";
+ }
]]>
</script>
</head>
@@ -75,17 +378,62 @@
<xsl:value-of select="root/translations/stop"/>
</xsl:attribute>
</xsl:element>
+ <xsl:element name="input">
+ <xsl:attribute name="type">hidden</xsl:attribute>
+ <xsl:attribute name="id">translationDelete</xsl:attribute>
+ <xsl:attribute name="value">
+ <xsl:value-of select="root/translations/delete"/>
+ </xsl:attribute>
+ </xsl:element>
<!-- MAIN DIV FRAME -->
<div style="position:absolute;
left:0px;
top:0px;">
- <!-- NOTIFICATION VIEW -->
+ <!-- FILTER BAR VIEW -->
<div class="frame01TopSpace">
+ <div class="attitunesVSpacer" style="width:35px;height:40px;"></div>
+ <xsl:element name="a">
+ <xsl:attribute name="class">attitunesFilterRadio attitunesFilterRadioActivate</xsl:attribute>
+ <xsl:attribute name="id">attitunesFilterRadioAll</xsl:attribute>
+ <xsl:attribute name="onclick">javascript:fillAttituneRows('all_attitunes'); return false;</xsl:attribute>
+ <xsl:attribute name="href">#</xsl:attribute><xsl:value-of select="root/translations/all"/>
+ </xsl:element>
</div>
- <div class="frame01Middle" style="height:495px;">
+ <div class="frame01Middle" style="height:465px;">
+ <div class="attitunesListScrollbox" id="attitunesListScrollbox"></div>
</div>
<div class="frame01Bottom"></div>
</div>
+ <!-- POPUP CONFIRM DELETE -->
+ <div id="popupConfirmDelete" class="popup01Box" onfocus="updatePopupAttituneDeleteContent(arguments[0]);">
+ <div class="popupFrame01Top"></div>
+ <div class="popupFrame01Middle">
+ <div class="popup01GadgetIcon">
+ <xsl:element name="img">
+ <xsl:attribute name="id">popup01AttituneDeleteIcon</xsl:attribute>
+ <xsl:attribute name="src">/data/web_interface/user_01/img/empty.png</xsl:attribute>
+ <xsl:attribute name="height">34</xsl:attribute>
+ <xsl:attribute name="width">34</xsl:attribute>
+ </xsl:element>
+ </div>
+ <span class="popup01Message"><xsl:value-of select="root/translations/popup_confirm_delete_attitune"/></span>
+ <xsl:element name="a">
+ <xsl:attribute name="class">popupBtn</xsl:attribute>
+ <xsl:attribute name="name">lbOff</xsl:attribute>
+ <xsl:attribute name="rel">deactivate</xsl:attribute>
+ <xsl:attribute name="onclick">javascript:deleteAttitune();return false;</xsl:attribute>
+ <xsl:attribute name="href">#</xsl:attribute><xsl:value-of select="root/translations/yes"/>
+ </xsl:element>
+ <xsl:element name="a">
+ <xsl:attribute name="class">popupBtn</xsl:attribute>
+ <xsl:attribute name="name">lbOff</xsl:attribute>
+ <xsl:attribute name="id">closeLightbox</xsl:attribute>
+ <xsl:attribute name="rel">deactivate</xsl:attribute>
+ <xsl:attribute name="href">#</xsl:attribute><xsl:value-of select="root/translations/no"/>
+ </xsl:element>
+ </div>
+ <div class="popupFrame01Bottom"></div>
+ </div>
</body>
</html>
</xsl:template>
Modified: software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/00_resourceAttituneManager.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/00_resourceAttituneManager.py 2009-07-06 15:01:22 UTC (rev 5067)
+++ software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/00_resourceAttituneManager.py 2009-07-07 09:51:33 UTC (rev 5068)
@@ -40,6 +40,7 @@
self.__attituneMutex = threading.Lock()
self.__attituneRunMutex = threading.Lock()
self.__attituneRunFlag = False
+ self.__attituneRunName = "0"
# Create a gadgets container
self.__attitunesContainer = AttitunesContainer()
self.__attitunesContainer.setOnDirectoryDeployedCallback(self.__onDirectoryDeployed)
@@ -136,12 +137,27 @@
self.__attituneRunMutex.release()
return isRun
+ def isAttituneRun(self):
+ return self.__isAttituneRun()
+
def __setAttituneRun(self, isRun):
self.__attituneRunMutex.acquire()
self.__attituneRunFlag = isRun
self.__attituneRunMutex.release()
+ def __setAttituneRunName(self, name):
+ self.__attituneRunMutex.acquire()
+ self.__attituneRunName = name
+ self.__attituneRunMutex.release()
+
+ def getAttituneRunName(self):
+ self.__attituneRunMutex.acquire()
+ result = self.__attituneRunName
+ self.__attituneRunMutex.release()
+ return result
+
def __attituneStartingLoop(self, attitune, duration):
+ self.__setAttituneRunName(attitune.getDescription().getName())
self.__setAttituneRun(True)
timeout = int(duration * 10)
self.logger.logInfo("Attitune starting [%s]" % (
@@ -153,6 +169,8 @@
time.sleep(0.1)
if timeout == 0:
break
+ self.__setAttituneRunName("0")
+ self.__setAttituneRun(False)
self.logger.logInfo("Attitune stopped [%s]" % (
attitune.getDescription().getName(),))
self.__publishEvents(True, ST_NAME_AM_ATTITUNE_STOPPED,
@@ -251,6 +269,7 @@
self.__attituneMutex.acquire()
if self.__isAttituneRun():
self.__setAttituneRun(False)
+ self.__setAttituneRunName("0")
resourceTuxOSL.clearAll()
resourceTuxDriver.clearAll()
time.sleep(0.2)
@@ -268,7 +287,7 @@
t = threading.Thread(target = async)
t.start()
return True
-
+
def playAttituneSync(self, name, begin):
"""Play an attitune.
@param name: Attitune name.
@@ -288,6 +307,7 @@
self.__attituneMutex.acquire()
if self.__isAttituneRun():
self.__setAttituneRun(False)
+ self.__setAttituneRunName("0")
resourceTuxOSL.clearAll()
resourceTuxDriver.clearAll()
time.sleep(0.2)
@@ -308,6 +328,7 @@
def async():
self.__attituneMutex.acquire()
self.__setAttituneRun(False)
+ self.__setAttituneRunName("0")
resourceTuxOSL.clearAll()
resourceTuxDriver.clearAll()
time.sleep(0.2)
@@ -315,6 +336,26 @@
t = threading.Thread(target = async)
t.start()
+ def getAttitunesDictAll(self):
+ """
+ """
+ result = {}
+ count = 0
+ attitunes = self.getAttitunesContainer().getAttitunes()
+ namesList = []
+ for attitune in attitunes:
+ if attitune.getObserverName() in ["attitunes", "userAttitunes"]:
+ namesList.append(attitune.getDescription().getName())
+ namesList.sort()
+ for attName in namesList:
+ attitune = self.getAttitunesContainer().getAttitune(attName)
+ result["attitune_%d_name" % count] = attName
+ cat = attitune.getDescription().getCategory().lower()
+ result["attitune_%d_icon" % count] = "/data/web_interface/common/img/att_icon_%s.png" % cat
+ count += 1
+ result['count'] = count
+ return result
+
# Create an instance of the resource
resourceAttituneManager = TDSResourceAttituneManager("resourceAttituneManager")
# Register the resource into the resources manager
@@ -452,3 +493,54 @@
# Register the service into the resource
resourceAttituneManager.addService(TDSServiceAttituneManagerRemoveAttitune)
+
+# ------------------------------------------------------------------------------
+# Declaration of the service "get_attitunes_data".
+# ------------------------------------------------------------------------------
+class TDSServiceAttituneManagerGetAttitunesData(TDSService):
+
+ def configure(self):
+ self.parametersDict = {
+ 'filter' : 'string',
+ }
+ self.minimalUserLevel = TDS_CLIENT_LEVEL_ANONYMOUS
+ self.exclusiveExecution = True
+ self.name = "get_attitunes_data"
+ self.comment = "Get attitunes data."
+
+ def execute(self, id, parameters):
+ headersStruct = self.getDefaultHeadersStruct()
+ contentStruct = self.getDefaultContentStruct()
+ filter = parameters['filter']
+ if filter == 'all_attitunes':
+ contentStruct['root']['data'] = resourceAttituneManager.getAttitunesDictAll()
+ else:
+ pass
+ contentStruct['root']['result'] = getStrError(E_TDREST_SUCCESS)
+ return headersStruct, contentStruct
+
+# Register the service into the resource
+resourceAttituneManager.addService(TDSServiceAttituneManagerGetAttitunesData)
+
+# ------------------------------------------------------------------------------
+# Declaration of the service "get_current_playing_attitune".
+# ------------------------------------------------------------------------------
+class TDSServiceAttituneManagerGetCurrentPlayingAttitune(TDSService):
+
+ def configure(self):
+ self.parametersDict = {}
+ self.minimalUserLevel = TDS_CLIENT_LEVEL_ANONYMOUS
+ self.exclusiveExecution = True
+ self.name = "get_current_playing_attitune"
+ self.comment = "Get the current playing attitune name."
+
+ def execute(self, id, parameters):
+ headersStruct = self.getDefaultHeadersStruct()
+ contentStruct = self.getDefaultContentStruct()
+ name = resourceAttituneManager.getAttituneRunName()
+ contentStruct['root']['name'] = name
+ contentStruct['root']['result'] = getStrError(E_TDREST_SUCCESS)
+ return headersStruct, contentStruct
+
+# Register the service into the resource
+resourceAttituneManager.addService(TDSServiceAttituneManagerGetCurrentPlayingAttitune)
Modified: software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/01_resourcePluginsServer.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/01_resourcePluginsServer.py 2009-07-06 15:01:22 UTC (rev 5067)
+++ software_suite_v3/smart-core/smart-server/trunk/resources/03_content_servers/01_resourcePluginsServer.py 2009-07-07 09:51:33 UTC (rev 5068)
@@ -13,6 +13,8 @@
ST_NAME_PS_CONTAINER_ERROR = "plugins_server_container_error"
ST_NAME_PS_PLUGIN_LOADED = "plugins_server_plugin_loaded"
ST_NAME_PS_PLUGIN_UNLOADED = "plugins_server_plugin_unloaded"
+ST_NAME_PS_PLUGIN_STARTED = "plugins_server_plugin_started"
+ST_NAME_PS_PLUGIN_STOPPED = "plugins_server_plugin_stopped"
# Plugins server events/statuses list
SW_NAME_PLUGINS_SERVER = [
@@ -20,6 +22,8 @@
ST_NAME_PS_CONTAINER_ERROR,
ST_NAME_PS_PLUGIN_LOADED,
ST_NAME_PS_PLUGIN_UNLOADED,
+ ST_NAME_PS_PLUGIN_STARTED,
+ ST_NAME_PS_PLUGIN_STOPPED,
]
# ------------------------------------------------------------------------------
@@ -223,6 +227,8 @@
def __onPluginStarting(self, pluginInterpreterContext):
plugin = pluginInterpreterContext.getParentPlugin()
+ self.__publishEvents(False, ST_NAME_PS_PLUGIN_STARTED,
+ [plugin.getDescription().getUuid(),])
self.logger.logInfo("Plugin starting [%s] (%s)" % (
plugin.getDescription().getName(),
str(pluginInterpreterContext.getInstanceParameters())))
@@ -237,6 +243,8 @@
if not command.isNotifier():
resourceRobotContentInteractions.getPguContextsManager().setContextIsComplete(
pluginInterpreterContext)
+ self.__publishEvents(False, ST_NAME_PS_PLUGIN_STOPPED,
+ [plugin.getDescription().getUuid(),])
self.logger.logInfo("Plugin stopped [%s]" % (
plugin.getDescription().getName()))
Modified: software_suite_v3/smart-core/smart-server/trunk/resources/04_robot_content_interactions/00_resourceRobotContentInteractions.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/resources/04_robot_content_interactions/00_resourceRobotContentInteractions.py 2009-07-06 15:01:22 UTC (rev 5067)
+++ software_suite_v3/smart-core/smart-server/trunk/resources/04_robot_content_interactions/00_resourceRobotContentInteractions.py 2009-07-07 09:51:33 UTC (rev 5068)
@@ -466,7 +466,7 @@
self.__onDemandDictForThumbnailBar["gadget_%.2d_icon" % number] = "/%s/icon.png" % ugc.getParentGadget().getDescription().getUuid()
if rel == 0:
self.__onDemandDictForThumbnailBar["gadget_%.2d_description" % number] = ugc.getParentGadget().getDescription().getDescription(ugc.getContainer().getLanguage())
-
+
fillByIndex(-3, 1)
fillByIndex(-2, 2)
fillByIndex(-1, 3)
@@ -1123,6 +1123,11 @@
self.comment = "Resource to handling the robot/content interactions."
self.fileName = RESOURCE_FILENAME
self.__pguContextsManager = PguContextsManager()
+ # Register callback on plugin started/stopped
+ eventsHandler.getEventHandler(ST_NAME_PS_PLUGIN_STARTED).register(
+ self.__onPluginStarted)
+ eventsHandler.getEventHandler(ST_NAME_PS_PLUGIN_STOPPED).register(
+ self.__onPluginStopped)
# Register callback on RC and robot buttons events
eventsHandler.getEventHandler(ST_NAME_HEAD_BUTTON).register(
self.__onHeadBtEvent)
@@ -1150,6 +1155,16 @@
"""
self.__pguContextsManager.stop()
+ def __onPluginStarted(self, *args):
+ pass
+
+ def __onPluginStopped(self, *args):
+ uuid = args[0]
+ # When Attitune Studio is stopped, we need to observe eventual changes
+ # In the deployed attitune directories.
+ if uuid == "548f7a9a-567d-773e-a0dd-102fe68a1b49":
+ resourceAttituneManager.getAttitunesContainer().check()
+
def __onHeadBtEvent(self, *args):
"""
"""
Modified: software_suite_v3/smart-core/smart-server/trunk/resources/07_web_interfaces/01_resourceWIUser01.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/resources/07_web_interfaces/01_resourceWIUser01.py 2009-07-06 15:01:22 UTC (rev 5067)
+++ software_suite_v3/smart-core/smart-server/trunk/resources/07_web_interfaces/01_resourceWIUser01.py 2009-07-07 09:51:33 UTC (rev 5068)
@@ -455,3 +455,43 @@
# Register the service into the resource
resourceWIUser01.addService(TDSServiceWIUser01ApplyGadget)
+
+# ------------------------------------------------------------------------------
+# Declaration of the service "edit_attitune".
+# ------------------------------------------------------------------------------
+class TDSServiceWIUser01EditAttitune(TDSService):
+
+ def configure(self):
+ self.parametersDict = {
+ 'name' : 'string',
+ 'language' : 'string',
+ }
+ self.minimalUserLevel = TDS_CLIENT_LEVEL_ANONYMOUS
+ self.exclusiveExecution = False
+ self.name = "edit_attitune"
+ self.comment = "Edit an attitune with Attitunes Studio."
+
+ def execute(self, id, parameters):
+ headersStruct = self.getDefaultHeadersStruct()
+ contentStruct = self.getDefaultContentStruct()
+ contentStruct['root']['result'] = getStrError(E_TDREST_SUCCESS)
+ name = parameters['name']
+ language = parameters['language']
+ attitunesContainer = resourceAttituneManager.getAttitunesContainer()
+ attitunes = attitunesContainer.getAttitunes()
+ for attitune in attitunes:
+ if attitune.getDescription().getName() == name:
+ attitunePath = attitune.getAttFile()
+ t = threading.Thread(target = resourcePluginsServer.startPlugin,
+ args = (
+ "548f7a9a-567d-773e-a0dd-102fe68a1b49",
+ "run",
+ {
+ 'path' : attitunePath,
+ 'language' : language,
+ }))
+ t.start()
+ return headersStruct, contentStruct
+
+# Register the service into the resource
+resourceWIUser01.addService(TDSServiceWIUser01EditAttitune)
Modified: software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/default.pot
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/default.pot 2009-07-06 15:01:22 UTC (rev 5067)
+++ software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/default.pot 2009-07-07 09:51:33 UTC (rev 5068)
@@ -46,6 +46,9 @@
msgid "popup_confirm_delete_gadget"
msgstr ""
+msgid "popup_confirm_delete_attitune"
+msgstr ""
+
msgid "yes"
msgstr ""
Modified: software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/en.po
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/en.po 2009-07-06 15:01:22 UTC (rev 5067)
+++ software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/en.po 2009-07-07 09:51:33 UTC (rev 5068)
@@ -44,8 +44,11 @@
msgstr "This functionality is not yet implemented."
msgid "popup_confirm_delete_gadget"
-msgstr "This action will delete this gadget. Continue ?"
+msgstr "Delete this gadget ?"
+msgid "popup_confirm_delete_attitune"
+msgstr "Delete this attitune ?"
+
msgid "yes"
msgstr "Yes"
Modified: software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/fr.po
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/fr.po 2009-07-06 15:01:22 UTC (rev 5067)
+++ software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/fr.po 2009-07-07 09:51:33 UTC (rev 5068)
@@ -44,8 +44,11 @@
msgstr "Cette fonctionnalité n'est pas encore implémentée."
msgid "popup_confirm_delete_gadget"
-msgstr "Etes-vous sûr de vouloir supprimer ce gadget ?"
+msgstr "Supprimer ce gadget ?"
+msgid "popup_confirm_delete_attitune"
+msgstr "Supprimer cette attitune ?"
+
msgid "yes"
msgstr "Oui"
Modified: software_suite_v3/smart-core/smart-server/trunk/util/attitunes/Attitune.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/util/attitunes/Attitune.py 2009-07-06 15:01:22 UTC (rev 5067)
+++ software_suite_v3/smart-core/smart-server/trunk/util/attitunes/Attitune.py 2009-07-07 09:51:33 UTC (rev 5068)
@@ -20,12 +20,13 @@
# --------------------------------------------------------------------------
# Constructor of the class.
# --------------------------------------------------------------------------
- def __init__(self, parent, dictionary, attFile, workingPath):
+ def __init__(self, parent, dictionary, attFile, workingPath, observerName):
"""Constructor of the class.
@param parent: Parent Gadgets container.
@param dictionary: Gadget structure as dictionary.
@param attFile: ATT file name of the attitune.
@param workingPath: Working path of the attitune.
+ @param observerName: Observer name.
"""
self.__parent = parent
# Save the dictionary
@@ -34,6 +35,8 @@
self.__workingPath = workingPath
# Save the att file name
self.__attFile = attFile
+ # Save the container name
+ self.__observerName = observerName
# Create descriptor
self.__description = AttituneDescription(self,
dictionary['scene']['header'], self.__workingPath)
@@ -114,6 +117,15 @@
return self.__parent
# --------------------------------------------------------------------------
+ # Get the observer name.
+ # --------------------------------------------------------------------------
+ def getObserverName(self):
+ """Get the observer name.
+ @return: A string.
+ """
+ return self.__observerName
+
+ # --------------------------------------------------------------------------
# Get the attitune description object.
# --------------------------------------------------------------------------
def getDescription(self):
Modified: software_suite_v3/smart-core/smart-server/trunk/util/attitunes/AttitunesContainer.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/util/attitunes/AttitunesContainer.py 2009-07-06 15:01:22 UTC (rev 5067)
+++ software_suite_v3/smart-core/smart-server/trunk/util/attitunes/AttitunesContainer.py 2009-07-07 09:51:33 UTC (rev 5068)
@@ -229,6 +229,32 @@
# ==========================================================================
# --------------------------------------------------------------------------
+ # Generate a single name.
+ # --------------------------------------------------------------------------
+ def generateSingleName(self, attName):
+ """Generate a single name.
+ @param attName: Requested name.
+ @return: A single name in the attitunes container.
+ """
+ def checkNameExists(nameToCheck):
+ result = False
+ for attitune in self.getAttitunes():
+ if attitune.getDescription().getName() == nameToCheck:
+ result = True
+ break
+ return result
+ baseAttName = attName
+ if (baseAttName.find("(") > 0) and (baseAttName.find(")") != -1):
+ baseAttName = baseAttName[:baseAttName.find("(") - 1]
+ if baseAttName == "":
+ baseAttName = "Default"
+ i = 0
+ while checkNameExists(attName):
+ i += 1
+ attName = "%s (%d)" % (baseAttName, i)
+ return attName
+
+ # --------------------------------------------------------------------------
# Build an attitune object from a deployed plugin.
# --------------------------------------------------------------------------
def __buildAttitune(self, observerName, fileName, pluginPath, pluginName):
@@ -244,12 +270,14 @@
# Check for "scene.xml"
sceneXmlFile = os.path.join(pluginPath, pluginName, "scene.xml")
sceneXmlDict = fromXML(sceneXmlFile)
+ sceneXmlDict['scene']['header']['name'] = self.generateSingleName(
+ sceneXmlDict['scene']['header']['name'])
if sceneXmlDict == None:
return None, "'scene.xml' not found"
# Create the attitune
try:
attitune = Attitune(self, sceneXmlDict, fileName,
- os.path.join(pluginPath, pluginName))
+ os.path.join(pluginPath, pluginName), observerName)
except:
return None, "Error in 'scene.xml'"
# Add this attitune to the container
|
|
From: ks156 <c2m...@c2...> - 2009-07-06 15:01:29
|
Author: ks156 Date: 2009-07-06 17:01:22 +0200 (Mon, 06 Jul 2009) New Revision: 5067 Removed: README.txt conf/ db/ format hooks/ locks/ Log: * Hey Se, are you kidding ? You'll have a course about SVN once I'll back. Deleted: README.txt =================================================================== --- README.txt 2009-07-06 14:27:15 UTC (rev 5066) +++ README.txt 2009-07-06 15:01:22 UTC (rev 5067) @@ -1,5 +0,0 @@ -This is a Subversion repository; use the 'svnadmin' tool to examine -it. Do not add, delete, or modify files here unless you know how -to avoid corrupting the repository. - -Visit http://subversion.tigris.org/ for more information. Deleted: format =================================================================== --- format 2009-07-06 14:27:15 UTC (rev 5066) +++ format 2009-07-06 15:01:22 UTC (rev 5067) @@ -1 +0,0 @@ -5 |
|
From: se <c2m...@c2...> - 2009-07-06 14:27:29
|
Author: se Date: 2009-07-06 16:27:15 +0200 (Mon, 06 Jul 2009) New Revision: 5066 Added: README.txt conf/ conf/authz conf/passwd conf/svnserve.conf db/ db/current db/format db/fs-type db/fsfs.conf db/min-unpacked-rev db/rep-cache.db db/revprops/ db/revprops/0/ db/revprops/0/0 db/revs/ db/revs/0/ db/revs/0/0 db/transactions/ db/txn-current db/txn-current-lock db/txn-protorevs/ db/uuid db/write-lock format hooks/ hooks/post-commit.tmpl hooks/post-lock.tmpl hooks/post-revprop-change.tmpl hooks/post-unlock.tmpl hooks/pre-commit.tmpl hooks/pre-lock.tmpl hooks/pre-revprop-change.tmpl hooks/pre-unlock.tmpl hooks/start-commit.tmpl locks/ locks/db-logs.lock locks/db.lock Log: Added: README.txt =================================================================== --- README.txt (rev 0) +++ README.txt 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1,5 @@ +This is a Subversion repository; use the 'svnadmin' tool to examine +it. Do not add, delete, or modify files here unless you know how +to avoid corrupting the repository. + +Visit http://subversion.tigris.org/ for more information. Added: conf/authz =================================================================== --- conf/authz (rev 0) +++ conf/authz 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1,32 @@ +### This file is an example authorization file for svnserve. +### Its format is identical to that of mod_authz_svn authorization +### files. +### As shown below each section defines authorizations for the path and +### (optional) repository specified by the section name. +### The authorizations follow. An authorization line can refer to: +### - a single user, +### - a group of users defined in a special [groups] section, +### - an alias defined in a special [aliases] section, +### - all authenticated users, using the '$authenticated' token, +### - only anonymous users, using the '$anonymous' token, +### - anyone, using the '*' wildcard. +### +### A match can be inverted by prefixing the rule with '~'. Rules can +### grant read ('r') access, read-write ('rw') access, or no access +### (''). + +[aliases] +# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average + +[groups] +# harry_and_sally = harry,sally +# harry_sally_and_joe = harry,sally,&joe + +# [/foo/bar] +# harry = rw +# &joe = r +# * = + +# [repository:/baz/fuz] +# @harry_and_sally = rw +# * = r Added: conf/passwd =================================================================== --- conf/passwd (rev 0) +++ conf/passwd 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1,8 @@ +### This file is an example password file for svnserve. +### Its format is similar to that of svnserve.conf. As shown in the +### example below it contains one section labelled [users]. +### The name and password for each user follow, one account per line. + +[users] +# harry = harryssecret +# sally = sallyssecret Added: conf/svnserve.conf =================================================================== --- conf/svnserve.conf (rev 0) +++ conf/svnserve.conf 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1,47 @@ +### This file controls the configuration of the svnserve daemon, if you +### use it to allow access to this repository. (If you only allow +### access through http: and/or file: URLs, then this file is +### irrelevant.) + +### Visit http://subversion.tigris.org/ for more information. + +[general] +### These options control access to the repository for unauthenticated +### and authenticated users. Valid values are "write", "read", +### and "none". The sample settings below are the defaults. +# anon-access = read +# auth-access = write +### The password-db option controls the location of the password +### database file. Unless you specify a path starting with a /, +### the file's location is relative to the directory containing +### this configuration file. +### If SASL is enabled (see below), this file will NOT be used. +### Uncomment the line below to use the default password file. +# password-db = passwd +### The authz-db option controls the location of the authorization +### rules for path-based access control. Unless you specify a path +### starting with a /, the file's location is relative to the the +### directory containing this file. If you don't specify an +### authz-db, no path-based access control is done. +### Uncomment the line below to use the default authorization file. +# authz-db = authz +### This option specifies the authentication realm of the repository. +### If two repositories have the same authentication realm, they should +### have the same password database, and vice versa. The default realm +### is repository's uuid. +# realm = My First Repository + +[sasl] +### This option specifies whether you want to use the Cyrus SASL +### library for authentication. Default is false. +### This section will be ignored if svnserve is not built with Cyrus +### SASL support; to check, run 'svnserve --version' and look for a line +### reading 'Cyrus SASL authentication is available.' +# use-sasl = true +### These options specify the desired strength of the security layer +### that you want SASL to provide. 0 means no encryption, 1 means +### integrity-checking only, values larger than 1 are correlated +### to the effective key length for encryption (e.g. 128 means 128-bit +### encryption). The values below are the defaults. +# min-encryption = 0 +# max-encryption = 256 Added: db/current =================================================================== --- db/current (rev 0) +++ db/current 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1 @@ +0 Added: db/format =================================================================== --- db/format (rev 0) +++ db/format 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1,2 @@ +4 +layout sharded 1000 Added: db/fs-type =================================================================== --- db/fs-type (rev 0) +++ db/fs-type 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1 @@ +fsfs Added: db/fsfs.conf =================================================================== --- db/fsfs.conf (rev 0) +++ db/fsfs.conf 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1,37 @@ +### This file controls the configuration of the FSFS filesystem. + +[memcached-servers] +### These options name memcached servers used to cache internal FSFS +### data. See http://www.danga.com/memcached/ for more information on +### memcached. To use memcached with FSFS, run one or more memcached +### servers, and specify each of them as an option like so: +# first-server = 127.0.0.1:11211 +# remote-memcached = mymemcached.corp.example.com:11212 +### The option name is ignored; the value is of the form HOST:PORT. +### memcached servers can be shared between multiple repositories; +### however, if you do this, you *must* ensure that repositories have +### distinct UUIDs and paths, or else cached data from one repository +### might be used by another accidentally. Note also that memcached has +### no authentication for reads or writes, so you must ensure that your +### memcached servers are only accessible by trusted users. + +[caches] +### When a cache-related error occurs, normally Subversion ignores it +### and continues, logging an error if the server is appropriately +### configured (and ignoring it with file:// access). To make +### Subversion never ignore cache errors, uncomment this line. +# fail-stop = true + +[rep-sharing] +### To conserve space, the filesystem can optionally avoid storing +### duplicate representations. This comes at a slight cost in performace, +### as maintaining a database of shared representations can increase +### commit times. The space savings are dependent upon the size of the +### repository, the number of objects it contains and the amount of +### duplication between them, usually a function of the branching and +### merging process. +### +### The following parameter enables rep-sharing in the repository. It can +### be switched on and off at will, but for best space-saving results +### should be enabled consistently over the life of the repository. +# enable-rep-sharing = false Added: db/min-unpacked-rev =================================================================== --- db/min-unpacked-rev (rev 0) +++ db/min-unpacked-rev 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1 @@ +0 Added: db/rep-cache.db =================================================================== (Binary files differ) Property changes on: db/rep-cache.db ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: db/revprops/0/0 =================================================================== --- db/revprops/0/0 (rev 0) +++ db/revprops/0/0 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1,5 @@ +K 8 +svn:date +V 27 +2009-07-06T14:24:21.812500Z +END Added: db/revs/0/0 =================================================================== --- db/revs/0/0 (rev 0) +++ db/revs/0/0 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1,11 @@ +PLAIN +END +ENDREP +id: 0.0.r0/17 +type: dir +count: 0 +text: 0 0 4 4 2d2977d1c96f487abe4a1e202dd03b4e +cpath: / + + +17 107 Added: db/txn-current =================================================================== --- db/txn-current (rev 0) +++ db/txn-current 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1 @@ +0 Added: db/txn-current-lock =================================================================== Added: db/uuid =================================================================== --- db/uuid (rev 0) +++ db/uuid 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1 @@ +8ec3c569-04fa-4343-adf7-920870e38ab3 Added: db/write-lock =================================================================== Added: format =================================================================== --- format (rev 0) +++ format 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1 @@ +5 Added: hooks/post-commit.tmpl =================================================================== --- hooks/post-commit.tmpl (rev 0) +++ hooks/post-commit.tmpl 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1,50 @@ +#!/bin/sh + +# POST-COMMIT HOOK +# +# The post-commit hook is invoked after a commit. Subversion runs +# this hook by invoking a program (script, executable, binary, etc.) +# named 'post-commit' (for which this file is a template) with the +# following ordered arguments: +# +# [1] REPOS-PATH (the path to this repository) +# [2] REV (the number of the revision just committed) +# +# The default working directory for the invocation is undefined, so +# the program should set one explicitly if it cares. +# +# Because the commit has already completed and cannot be undone, +# the exit code of the hook program is ignored. The hook program +# can use the 'svnlook' utility to help it examine the +# newly-committed tree. +# +# On a Unix system, the normal procedure is to have 'post-commit' +# invoke other programs to do the real work, though it may do the +# work itself too. +# +# Note that 'post-commit' must be executable by the user(s) who will +# invoke it (typically the user httpd runs as), and that user must +# have filesystem-level permission to access the repository. +# +# On a Windows system, you should name the hook program +# 'post-commit.bat' or 'post-commit.exe', +# but the basic idea is the same. +# +# The hook program typically does not inherit the environment of +# its parent process. For example, a common problem is for the +# PATH environment variable to not be set to its usual value, so +# that subprograms fail to launch unless invoked via absolute path. +# If you're having unexpected problems with a hook program, the +# culprit may be unusual (or missing) environment variables. +# +# Here is an example hook script, for a Unix /bin/sh interpreter. +# For more examples and pre-written hooks, see those in +# the Subversion repository at +# http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/ and +# http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/ + + +REPOS="$1" +REV="$2" + +mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf Added: hooks/post-lock.tmpl =================================================================== --- hooks/post-lock.tmpl (rev 0) +++ hooks/post-lock.tmpl 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1,44 @@ +#!/bin/sh + +# POST-LOCK HOOK +# +# The post-lock hook is run after a path is locked. Subversion runs +# this hook by invoking a program (script, executable, binary, etc.) +# named 'post-lock' (for which this file is a template) with the +# following ordered arguments: +# +# [1] REPOS-PATH (the path to this repository) +# [2] USER (the user who created the lock) +# +# The paths that were just locked are passed to the hook via STDIN (as +# of Subversion 1.2, only one path is passed per invocation, but the +# plan is to pass all locked paths at once, so the hook program +# should be written accordingly). +# +# The default working directory for the invocation is undefined, so +# the program should set one explicitly if it cares. +# +# Because the lock has already been created and cannot be undone, +# the exit code of the hook program is ignored. The hook program +# can use the 'svnlook' utility to help it examine the +# newly-created lock. +# +# On a Unix system, the normal procedure is to have 'post-lock' +# invoke other programs to do the real work, though it may do the +# work itself too. +# +# Note that 'post-lock' must be executable by the user(s) who will +# invoke it (typically the user httpd runs as), and that user must +# have filesystem-level permission to access the repository. +# +# On a Windows system, you should name the hook program +# 'post-lock.bat' or 'post-lock.exe', +# but the basic idea is the same. +# +# Here is an example hook script, for a Unix /bin/sh interpreter: + +REPOS="$1" +USER="$2" + +# Send email to interested parties, let them know a lock was created: +mailer.py lock "$REPOS" "$USER" /path/to/mailer.conf Added: hooks/post-revprop-change.tmpl =================================================================== --- hooks/post-revprop-change.tmpl (rev 0) +++ hooks/post-revprop-change.tmpl 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1,56 @@ +#!/bin/sh + +# POST-REVPROP-CHANGE HOOK +# +# The post-revprop-change hook is invoked after a revision property +# has been added, modified or deleted. Subversion runs this hook by +# invoking a program (script, executable, binary, etc.) named +# 'post-revprop-change' (for which this file is a template), with the +# following ordered arguments: +# +# [1] REPOS-PATH (the path to this repository) +# [2] REV (the revision that was tweaked) +# [3] USER (the username of the person tweaking the property) +# [4] PROPNAME (the property that was changed) +# [5] ACTION (the property was 'A'dded, 'M'odified, or 'D'eleted) +# +# [STDIN] PROPVAL ** the old property value is passed via STDIN. +# +# Because the propchange has already completed and cannot be undone, +# the exit code of the hook program is ignored. The hook program +# can use the 'svnlook' utility to help it examine the +# new property value. +# +# On a Unix system, the normal procedure is to have 'post-revprop-change' +# invoke other programs to do the real work, though it may do the +# work itself too. +# +# Note that 'post-revprop-change' must be executable by the user(s) who will +# invoke it (typically the user httpd runs as), and that user must +# have filesystem-level permission to access the repository. +# +# On a Windows system, you should name the hook program +# 'post-revprop-change.bat' or 'post-revprop-change.exe', +# but the basic idea is the same. +# +# The hook program typically does not inherit the environment of +# its parent process. For example, a common problem is for the +# PATH environment variable to not be set to its usual value, so +# that subprograms fail to launch unless invoked via absolute path. +# If you're having unexpected problems with a hook program, the +# culprit may be unusual (or missing) environment variables. +# +# Here is an example hook script, for a Unix /bin/sh interpreter. +# For more examples and pre-written hooks, see those in +# the Subversion repository at +# http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/ and +# http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/ + + +REPOS="$1" +REV="$2" +USER="$3" +PROPNAME="$4" +ACTION="$5" + +mailer.py propchange2 "$REPOS" "$REV" "$USER" "$PROPNAME" "$ACTION" /path/to/mailer.conf Added: hooks/post-unlock.tmpl =================================================================== --- hooks/post-unlock.tmpl (rev 0) +++ hooks/post-unlock.tmpl 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1,42 @@ +#!/bin/sh + +# POST-UNLOCK HOOK +# +# The post-unlock hook runs after a path is unlocked. Subversion runs +# this hook by invoking a program (script, executable, binary, etc.) +# named 'post-unlock' (for which this file is a template) with the +# following ordered arguments: +# +# [1] REPOS-PATH (the path to this repository) +# [2] USER (the user who destroyed the lock) +# +# The paths that were just unlocked are passed to the hook via STDIN +# (as of Subversion 1.2, only one path is passed per invocation, but +# the plan is to pass all unlocked paths at once, so the hook program +# should be written accordingly). +# +# The default working directory for the invocation is undefined, so +# the program should set one explicitly if it cares. +# +# Because the lock has already been destroyed and cannot be undone, +# the exit code of the hook program is ignored. +# +# On a Unix system, the normal procedure is to have 'post-unlock' +# invoke other programs to do the real work, though it may do the +# work itself too. +# +# Note that 'post-unlock' must be executable by the user(s) who will +# invoke it (typically the user httpd runs as), and that user must +# have filesystem-level permission to access the repository. +# +# On a Windows system, you should name the hook program +# 'post-unlock.bat' or 'post-unlock.exe', +# but the basic idea is the same. +# +# Here is an example hook script, for a Unix /bin/sh interpreter: + +REPOS="$1" +USER="$2" + +# Send email to interested parties, let them know a lock was removed: +mailer.py unlock "$REPOS" "$USER" /path/to/mailer.conf Added: hooks/pre-commit.tmpl =================================================================== --- hooks/pre-commit.tmpl (rev 0) +++ hooks/pre-commit.tmpl 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1,81 @@ +#!/bin/sh + +# PRE-COMMIT HOOK +# +# The pre-commit hook is invoked before a Subversion txn is +# committed. Subversion runs this hook by invoking a program +# (script, executable, binary, etc.) named 'pre-commit' (for which +# this file is a template), with the following ordered arguments: +# +# [1] REPOS-PATH (the path to this repository) +# [2] TXN-NAME (the name of the txn about to be committed) +# +# [STDIN] LOCK-TOKENS ** the lock tokens are passed via STDIN. +# +# If STDIN contains the line "LOCK-TOKENS:\n" (the "\n" denotes a +# single newline), the lines following it are the lock tokens for +# this commit. The end of the list is marked by a line containing +# only a newline character. +# +# Each lock token line consists of a URI-escaped path, followed +# by the separator character '|', followed by the lock token string, +# followed by a newline. +# +# The default working directory for the invocation is undefined, so +# the program should set one explicitly if it cares. +# +# If the hook program exits with success, the txn is committed; but +# if it exits with failure (non-zero), the txn is aborted, no commit +# takes place, and STDERR is returned to the client. The hook +# program can use the 'svnlook' utility to help it examine the txn. +# +# On a Unix system, the normal procedure is to have 'pre-commit' +# invoke other programs to do the real work, though it may do the +# work itself too. +# +# *** NOTE: THE HOOK PROGRAM MUST NOT MODIFY THE TXN, EXCEPT *** +# *** FOR REVISION PROPERTIES (like svn:log or svn:author). *** +# +# This is why we recommend using the read-only 'svnlook' utility. +# In the future, Subversion may enforce the rule that pre-commit +# hooks should not modify the versioned data in txns, or else come +# up with a mechanism to make it safe to do so (by informing the +# committing client of the changes). However, right now neither +# mechanism is implemented, so hook writers just have to be careful. +# +# Note that 'pre-commit' must be executable by the user(s) who will +# invoke it (typically the user httpd runs as), and that user must +# have filesystem-level permission to access the repository. +# +# On a Windows system, you should name the hook program +# 'pre-commit.bat' or 'pre-commit.exe', +# but the basic idea is the same. +# +# The hook program typically does not inherit the environment of +# its parent process. For example, a common problem is for the +# PATH environment variable to not be set to its usual value, so +# that subprograms fail to launch unless invoked via absolute path. +# If you're having unexpected problems with a hook program, the +# culprit may be unusual (or missing) environment variables. +# +# Here is an example hook script, for a Unix /bin/sh interpreter. +# For more examples and pre-written hooks, see those in +# the Subversion repository at +# http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/ and +# http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/ + + +REPOS="$1" +TXN="$2" + +# Make sure that the log message contains some text. +SVNLOOK=/usr/local/bin/svnlook +$SVNLOOK log -t "$TXN" "$REPOS" | \ + grep "[a-zA-Z0-9]" > /dev/null || exit 1 + +# Check that the author of this commit has the rights to perform +# the commit on the files and directories being modified. +commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1 + +# All checks passed, so allow the commit. +exit 0 Added: hooks/pre-lock.tmpl =================================================================== --- hooks/pre-lock.tmpl (rev 0) +++ hooks/pre-lock.tmpl 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1,71 @@ +#!/bin/sh + +# PRE-LOCK HOOK +# +# The pre-lock hook is invoked before an exclusive lock is +# created. Subversion runs this hook by invoking a program +# (script, executable, binary, etc.) named 'pre-lock' (for which +# this file is a template), with the following ordered arguments: +# +# [1] REPOS-PATH (the path to this repository) +# [2] PATH (the path in the repository about to be locked) +# [3] USER (the user creating the lock) +# [4] COMMENT (the comment of the lock) +# [5] STEAL-LOCK (1 if the user is trying to steal the lock, else 0) +# +# If the hook program outputs anything on stdout, the output string will +# be used as the lock token for this lock operation. If you choose to use +# this feature, you must guarantee the tokens generated are unique across +# the repository each time. +# +# The default working directory for the invocation is undefined, so +# the program should set one explicitly if it cares. +# +# If the hook program exits with success, the lock is created; but +# if it exits with failure (non-zero), the lock action is aborted +# and STDERR is returned to the client. + +# On a Unix system, the normal procedure is to have 'pre-lock' +# invoke other programs to do the real work, though it may do the +# work itself too. +# +# Note that 'pre-lock' must be executable by the user(s) who will +# invoke it (typically the user httpd runs as), and that user must +# have filesystem-level permission to access the repository. +# +# On a Windows system, you should name the hook program +# 'pre-lock.bat' or 'pre-lock.exe', +# but the basic idea is the same. +# +# Here is an example hook script, for a Unix /bin/sh interpreter: + +REPOS="$1" +PATH="$2" +USER="$3" + +# If a lock exists and is owned by a different person, don't allow it +# to be stolen (e.g., with 'svn lock --force ...'). + +# (Maybe this script could send email to the lock owner?) +SVNLOOK=/usr/local/bin/svnlook +GREP=/bin/grep +SED=/bin/sed + +LOCK_OWNER=`$SVNLOOK lock "$REPOS" "$PATH" | \ + $GREP '^Owner: ' | $SED 's/Owner: //'` + +# If we get no result from svnlook, there's no lock, allow the lock to +# happen: +if [ "$LOCK_OWNER" = "" ]; then + exit 0 +fi + +# If the person locking matches the lock's owner, allow the lock to +# happen: +if [ "$LOCK_OWNER" = "$USER" ]; then + exit 0 +fi + +# Otherwise, we've got an owner mismatch, so return failure: +echo "Error: $PATH already locked by ${LOCK_OWNER}." 1>&2 +exit 1 Added: hooks/pre-revprop-change.tmpl =================================================================== --- hooks/pre-revprop-change.tmpl (rev 0) +++ hooks/pre-revprop-change.tmpl 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1,66 @@ +#!/bin/sh + +# PRE-REVPROP-CHANGE HOOK +# +# The pre-revprop-change hook is invoked before a revision property +# is added, modified or deleted. Subversion runs this hook by invoking +# a program (script, executable, binary, etc.) named 'pre-revprop-change' +# (for which this file is a template), with the following ordered +# arguments: +# +# [1] REPOS-PATH (the path to this repository) +# [2] REVISION (the revision being tweaked) +# [3] USER (the username of the person tweaking the property) +# [4] PROPNAME (the property being set on the revision) +# [5] ACTION (the property is being 'A'dded, 'M'odified, or 'D'eleted) +# +# [STDIN] PROPVAL ** the new property value is passed via STDIN. +# +# If the hook program exits with success, the propchange happens; but +# if it exits with failure (non-zero), the propchange doesn't happen. +# The hook program can use the 'svnlook' utility to examine the +# existing value of the revision property. +# +# WARNING: unlike other hooks, this hook MUST exist for revision +# properties to be changed. If the hook does not exist, Subversion +# will behave as if the hook were present, but failed. The reason +# for this is that revision properties are UNVERSIONED, meaning that +# a successful propchange is destructive; the old value is gone +# forever. We recommend the hook back up the old value somewhere. +# +# On a Unix system, the normal procedure is to have 'pre-revprop-change' +# invoke other programs to do the real work, though it may do the +# work itself too. +# +# Note that 'pre-revprop-change' must be executable by the user(s) who will +# invoke it (typically the user httpd runs as), and that user must +# have filesystem-level permission to access the repository. +# +# On a Windows system, you should name the hook program +# 'pre-revprop-change.bat' or 'pre-revprop-change.exe', +# but the basic idea is the same. +# +# The hook program typically does not inherit the environment of +# its parent process. For example, a common problem is for the +# PATH environment variable to not be set to its usual value, so +# that subprograms fail to launch unless invoked via absolute path. +# If you're having unexpected problems with a hook program, the +# culprit may be unusual (or missing) environment variables. +# +# Here is an example hook script, for a Unix /bin/sh interpreter. +# For more examples and pre-written hooks, see those in +# the Subversion repository at +# http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/ and +# http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/ + + +REPOS="$1" +REV="$2" +USER="$3" +PROPNAME="$4" +ACTION="$5" + +if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi + +echo "Changing revision properties other than svn:log is prohibited" >&2 +exit 1 Added: hooks/pre-unlock.tmpl =================================================================== --- hooks/pre-unlock.tmpl (rev 0) +++ hooks/pre-unlock.tmpl 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1,63 @@ +#!/bin/sh + +# PRE-UNLOCK HOOK +# +# The pre-unlock hook is invoked before an exclusive lock is +# destroyed. Subversion runs this hook by invoking a program +# (script, executable, binary, etc.) named 'pre-unlock' (for which +# this file is a template), with the following ordered arguments: +# +# [1] REPOS-PATH (the path to this repository) +# [2] PATH (the path in the repository about to be unlocked) +# [3] USER (the user destroying the lock) +# [4] TOKEN (the lock token to be destroyed) +# [5] BREAK-UNLOCK (1 if the user is breaking the lock, else 0) +# +# The default working directory for the invocation is undefined, so +# the program should set one explicitly if it cares. +# +# If the hook program exits with success, the lock is destroyed; but +# if it exits with failure (non-zero), the unlock action is aborted +# and STDERR is returned to the client. + +# On a Unix system, the normal procedure is to have 'pre-unlock' +# invoke other programs to do the real work, though it may do the +# work itself too. +# +# Note that 'pre-unlock' must be executable by the user(s) who will +# invoke it (typically the user httpd runs as), and that user must +# have filesystem-level permission to access the repository. +# +# On a Windows system, you should name the hook program +# 'pre-unlock.bat' or 'pre-unlock.exe', +# but the basic idea is the same. +# +# Here is an example hook script, for a Unix /bin/sh interpreter: + +REPOS="$1" +PATH="$2" +USER="$3" + +# If a lock is owned by a different person, don't allow it be broken. +# (Maybe this script could send email to the lock owner?) + +SVNLOOK=/usr/local/bin/svnlook +GREP=/bin/grep +SED=/bin/sed + +LOCK_OWNER=`$SVNLOOK lock "$REPOS" "$PATH" | \ + $GREP '^Owner: ' | $SED 's/Owner: //'` + +# If we get no result from svnlook, there's no lock, return success: +if [ "$LOCK_OWNER" = "" ]; then + exit 0 +fi + +# If the person unlocking matches the lock's owner, return success: +if [ "$LOCK_OWNER" = "$USER" ]; then + exit 0 +fi + +# Otherwise, we've got an owner mismatch, so return failure: +echo "Error: $PATH locked by ${LOCK_OWNER}." 1>&2 +exit 1 Added: hooks/start-commit.tmpl =================================================================== --- hooks/start-commit.tmpl (rev 0) +++ hooks/start-commit.tmpl 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1,65 @@ +#!/bin/sh + +# START-COMMIT HOOK +# +# The start-commit hook is invoked before a Subversion txn is created +# in the process of doing a commit. Subversion runs this hook +# by invoking a program (script, executable, binary, etc.) named +# 'start-commit' (for which this file is a template) +# with the following ordered arguments: +# +# [1] REPOS-PATH (the path to this repository) +# [2] USER (the authenticated user attempting to commit) +# [3] CAPABILITIES (a colon-separated list of capabilities reported +# by the client; see note below) +# +# Note: The CAPABILITIES parameter is new in Subversion 1.5, and 1.5 +# clients will typically report at least the "mergeinfo" capability. +# If there are other capabilities, then the list is colon-separated, +# e.g.: "mergeinfo:some-other-capability" (the order is undefined). +# +# The list is self-reported by the client. Therefore, you should not +# make security assumptions based on the capabilities list, nor should +# you assume that clients reliably report every capability they have. +# +# The working directory for this hook program's invocation is undefined, +# so the program should set one explicitly if it cares. +# +# If the hook program exits with success, the commit continues; but +# if it exits with failure (non-zero), the commit is stopped before +# a Subversion txn is created, and STDERR is returned to the client. +# +# On a Unix system, the normal procedure is to have 'start-commit' +# invoke other programs to do the real work, though it may do the +# work itself too. +# +# Note that 'start-commit' must be executable by the user(s) who will +# invoke it (typically the user httpd runs as), and that user must +# have filesystem-level permission to access the repository. +# +# On a Windows system, you should name the hook program +# 'start-commit.bat' or 'start-commit.exe', +# but the basic idea is the same. +# +# The hook program typically does not inherit the environment of +# its parent process. For example, a common problem is for the +# PATH environment variable to not be set to its usual value, so +# that subprograms fail to launch unless invoked via absolute path. +# If you're having unexpected problems with a hook program, the +# culprit may be unusual (or missing) environment variables. +# +# Here is an example hook script, for a Unix /bin/sh interpreter. +# For more examples and pre-written hooks, see those in +# the Subversion repository at +# http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/ and +# http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/ + + +REPOS="$1" +USER="$2" + +commit-allower.pl --repository "$REPOS" --user "$USER" || exit 1 +special-auth-check.py --user "$USER" --auth-level 3 || exit 1 + +# All checks passed, so allow the commit. +exit 0 Added: locks/db-logs.lock =================================================================== --- locks/db-logs.lock (rev 0) +++ locks/db-logs.lock 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1,3 @@ +This file is not used by Subversion 1.3.x or later. +However, its existence is required for compatibility with +Subversion 1.2.x or earlier. Added: locks/db.lock =================================================================== --- locks/db.lock (rev 0) +++ locks/db.lock 2009-07-06 14:27:15 UTC (rev 5066) @@ -0,0 +1,3 @@ +This file is not used by Subversion 1.3.x or later. +However, its existence is required for compatibility with +Subversion 1.2.x or earlier. |
|
From: remi <c2m...@c2...> - 2009-07-06 13:15:57
|
Author: remi
Date: 2009-07-06 15:15:50 +0200 (Mon, 06 Jul 2009)
New Revision: 5065
Modified:
software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/xsl/tools.xsl
Log:
* Added "Global settings" row in the "tools" page. (For now the content is "http://127.0.0.1:270")
Modified: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/xsl/tools.xsl
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/xsl/tools.xsl 2009-07-06 12:15:57 UTC (rev 5064)
+++ software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/xsl/tools.xsl 2009-07-06 13:15:50 UTC (rev 5065)
@@ -36,6 +36,9 @@
<script type="text/javascript" src="/data/web_interface/user_01/js/lightbox.js"></script>
<script language="javascript">
<![CDATA[
+ var icon1AlreadyPng = false;
+ var icon2AlreadyPng = false;
+
function initialization()
{
initializeLightbox();
@@ -55,7 +58,11 @@
function updateWindowAbout(uuid)
{
- setpng(document.getElementById("windowGadgetHelpIcon"));
+ if (!icon1AlreadyPng)
+ {
+ icon1AlreadyPng = true;
+ setpng(document.getElementById("windowGadgetHelpIcon"));
+ }
var skin = document.getElementById("skin").value;
var language = document.getElementById("language").value;
var src = "/wi_user_01/gadget_help?uuid=" + uuid;
@@ -64,6 +71,26 @@
src += "&rndParam=" + Math.random();
document.getElementById("windowAboutContentIFrame").src = src;
}
+
+ function updateWindowGlobalSettings(uuid)
+ {
+ if (!icon2AlreadyPng)
+ {
+ icon2AlreadyPng = true;
+ setpng(document.getElementById("windowGadgetConfigurationIcon"));
+ }
+ /*var skin = document.getElementById("skin").value;
+ var language = document.getElementById("language").value;
+ var src = "/wi_user_01/global_configuration?";
+ src += "language=" + language;
+ src += "&skin=" + skin;
+ src += "&rndParam=" + Math.random();*/
+ document.getElementById("windowGlobalSettingsContentIFrame").src = "http://127.0.0.1:270/";
+ }
+
+ function applyGlobalSettings()
+ {
+ }
]]>
</script>
</head>
@@ -130,6 +157,16 @@
<span class="toolsRowName"><xsl:value-of select="root/data/tux_controller/name"/></span>
<div class="frame01Sep"></div>
</xsl:if>
+ <!-- GLOBAL SETTINGS -->
+ <xsl:element name="a">
+ <xsl:attribute name="class">toolsBtnTitle toolsBtnShowEnable</xsl:attribute>
+ <xsl:attribute name="id">none</xsl:attribute>
+ <xsl:attribute name="name">lbOn</xsl:attribute>
+ <xsl:attribute name="rel">windowGlobalSettings</xsl:attribute>
+ <xsl:attribute name="href">#</xsl:attribute><xsl:value-of select="root/translations/show"/>
+ </xsl:element>
+ <span class="toolsRowName"><xsl:value-of select="root/translations/global_settings"/></span>
+ <div class="frame01Sep"></div>
<!-- ONLINE DOCUMENTATION -->
<xsl:element name="a">
<xsl:attribute name="class">toolsBtnTitle toolsBtnShowEnable</xsl:attribute>
@@ -185,6 +222,44 @@
</div>
<div class="windowFrame01Bottom"></div>
</div>
+ <!-- GLOBAL SETTINGS -->
+ <div id="windowGlobalSettings" class="window01Box" onfocus="updateWindowGlobalSettings();">
+ <div class="windowFrame01Top">
+ <div class="windowGadgetIcon">
+ <xsl:element name="img">
+ <xsl:attribute name="id">windowGadgetConfigurationIcon</xsl:attribute>
+ <xsl:attribute name="src"><xsl:value-of select="root/data/about/icon"/></xsl:attribute>
+ <xsl:attribute name="height">33</xsl:attribute>
+ <xsl:attribute name="width">33</xsl:attribute>
+ </xsl:element>
+ </div>
+ <span class="windowTitle" id="windowGadgetConfigurationTitle"><xsl:value-of select="root/translations/global_settings"/></span>
+ </div>
+ <div class="windowFrame01Middle">
+ <iframe class="windowContentIFrame"
+ id="windowGlobalSettingsContentIFrame"
+ name="windowGlobalSettingsContentIFrame"
+ frameborder="0"
+ scrolling="no"
+ src="">
+ </iframe>
+ <div style="display:table;float:left;height:34px;width:300px"></div>
+ <xsl:element name="a">
+ <xsl:attribute name="class">windowBtn</xsl:attribute>
+ <xsl:attribute name="name">lbOff</xsl:attribute>
+ <xsl:attribute name="onclick">javascript:applyGlobalSettings();</xsl:attribute>
+ <xsl:attribute name="rel">deactivate</xsl:attribute>
+ <xsl:attribute name="href">#</xsl:attribute><xsl:value-of select="root/translations/apply"/>
+ </xsl:element>
+ <xsl:element name="a">
+ <xsl:attribute name="class">windowBtn</xsl:attribute>
+ <xsl:attribute name="name">lbOff</xsl:attribute>
+ <xsl:attribute name="rel">deactivate</xsl:attribute>
+ <xsl:attribute name="href">#</xsl:attribute><xsl:value-of select="root/translations/cancel"/>
+ </xsl:element>
+ </div>
+ <div class="windowFrame01Bottom"></div>
+ </div>
</body>
</html>
</xsl:template>
|
|
From: remi <c2m...@c2...> - 2009-07-06 13:09:50
|
Author: remi Date: 2009-07-06 14:15:57 +0200 (Mon, 06 Jul 2009) New Revision: 5064 Modified: software_suite_v3/software/tool/tool-about-tux/trunk/resources/icon.png Log: * Updated the icon Modified: software_suite_v3/software/tool/tool-about-tux/trunk/resources/icon.png =================================================================== (Binary files differ) |
|
From: remi <c2m...@c2...> - 2009-07-06 11:54:51
|
Author: remi
Date: 2009-07-06 13:54:36 +0200 (Mon, 06 Jul 2009)
New Revision: 5063
Modified:
software_suite_v3/smart-core/smart-server/trunk/TDSService.py
software_suite_v3/smart-core/smart-server/trunk/util/i18n/I18n.py
Log:
* Fixed encoding bug with IE6
Modified: software_suite_v3/smart-core/smart-server/trunk/TDSService.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/TDSService.py 2009-07-06 08:43:28 UTC (rev 5062)
+++ software_suite_v3/smart-core/smart-server/trunk/TDSService.py 2009-07-06 11:54:36 UTC (rev 5063)
@@ -147,7 +147,7 @@
result += recurse(struct[key])
result += "</%s>" % nodeName
return result
- result = '<?xml version="1.0" ?>'
+ result = '<?xml version="1.0" encoding="UTF-8"?>'
if self.haveXsl:
result += '<?xml-stylesheet type="text/xsl" href="%s"?>' % self.xslPath
result += recurse(contentStruct)
Modified: software_suite_v3/smart-core/smart-server/trunk/util/i18n/I18n.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/util/i18n/I18n.py 2009-07-06 08:43:28 UTC (rev 5062)
+++ software_suite_v3/smart-core/smart-server/trunk/util/i18n/I18n.py 2009-07-06 11:54:36 UTC (rev 5063)
@@ -9,6 +9,7 @@
import os
import locale
+import codecs
# ------------------------------------------------------------------------------
# Class to read and use i18n po files.
@@ -120,15 +121,27 @@
"""Update the internal data dictionary with the current po dictionary
and locale.
"""
+ def decodeUtf8Bom(text):
+ if text[:3] == codecs.BOM_UTF8:
+ text = text[3:]
+ (output, consumed) = codecs.utf_8_decode(text, "ignore", True)
+ return output
+
fileName = "%s.po" % self.__language
poFile = os.path.join(self.__poDirectory, fileName)
if os.path.isfile(poFile):
try:
f = open(poFile, "rb")
+ fileContent = f.read()
try:
+ u = decodeUtf8Bom(fileContent)
+ fileContent = u.encode("utf-8", "ignore")
+ except:
+ pass
+ try:
msgId = None
msgStr = None
- lines = f.read().split("\n")
+ lines = fileContent.split("\n")
for line in lines:
if line.find("msgid") == 0:
msgId = self.__extractContent(line)
|
|
From: remi <c2m...@c2...> - 2009-07-06 08:43:42
|
Author: remi
Date: 2009-07-06 10:43:28 +0200 (Mon, 06 Jul 2009)
New Revision: 5062
Modified:
software_suite_v3/smart-core/smart-server/trunk/resources/07_web_interfaces/01_resourceWIUser01.py
software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/default.pot
software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/en.po
software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/fr.po
Log:
* Auto-selection of the user interface language.
* Fixed encoding and file format of interface translations.
Modified: software_suite_v3/smart-core/smart-server/trunk/resources/07_web_interfaces/01_resourceWIUser01.py
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/resources/07_web_interfaces/01_resourceWIUser01.py 2009-07-06 07:50:13 UTC (rev 5061)
+++ software_suite_v3/smart-core/smart-server/trunk/resources/07_web_interfaces/01_resourceWIUser01.py 2009-07-06 08:43:28 UTC (rev 5062)
@@ -3,11 +3,7 @@
# ==============================================================================
from translation.Translation import Translation
-from util.misc.tuxPaths import TUXDROID_LANGUAGE
-splitedLC = TUXDROID_LANGUAGE.split("_")
-GUI_LANGUAGE = str(splitedLC[0])
-
# ------------------------------------------------------------------------------
# Declaration of the resource "wi_user_01".
# ------------------------------------------------------------------------------
@@ -131,7 +127,7 @@
headersStruct = self.getDefaultHeadersStruct()
contentStruct = self.getDefaultContentStruct()
contentStruct['root']['result'] = getStrError(E_TDREST_SUCCESS)
- language = parameters['language']
+ language = str(resourceUsers.getCurrentUserConfiguration()['language1'])
skin = parameters['skin']
menu = parameters['menu']
contentStruct['root']['data'] = {}
@@ -146,9 +142,10 @@
# Register the service into the resource
resourceWIUser01.addService(TDSServiceWIUser01Index)
# Bind the resource index url to this service
-paramsString = "skin=user_01&language=%s&menu=livewithtux" % GUI_LANGUAGE
-resourcesManager.addBinding("user", "wi_user_01", "index", paramsString)
-resourcesManager.addBinding("user/index", "wi_user_01", "index", paramsString)
+resourcesManager.addBinding("user", "wi_user_01", "index",
+ "skin=user_01&language=en&menu=livewithtux")
+resourcesManager.addBinding("user/index", "wi_user_01", "index",
+ "skin=user_01&language=en&menu=livewithtux")
# ------------------------------------------------------------------------------
# Declaration of the service "live_with_tux".
Modified: software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/default.pot
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/default.pot 2009-07-06 07:50:13 UTC (rev 5061)
+++ software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/default.pot 2009-07-06 08:43:28 UTC (rev 5062)
@@ -1,152 +1,152 @@
-msgid "live_with_tux"
-msgstr ""
-
-msgid "gadgets"
-msgstr ""
-
-msgid "attitunes"
-msgstr ""
-
-msgid "tools"
-msgstr ""
-
-msgid "online"
-msgstr ""
-
-msgid "status"
-msgstr ""
-
-msgid "sound_on"
-msgstr ""
-
-msgid "sound_off"
-msgstr ""
-
-msgid "start"
-msgstr ""
-
-msgid "stop"
-msgstr ""
-
-msgid "all"
-msgstr ""
-
-msgid "on_demand"
-msgstr ""
-
-msgid "alerts"
-msgstr ""
-
-msgid "delete"
-msgstr ""
-
-msgid "popup_not_yet_implemented"
-msgstr ""
-
-msgid "popup_confirm_delete_gadget"
-msgstr ""
-
-msgid "yes"
-msgstr ""
-
-msgid "no"
-msgstr ""
-
-msgid "close"
-msgstr ""
-
-msgid "apply"
-msgstr ""
-
-msgid "cancel"
-msgstr ""
-
-msgid "gadget_settings"
-msgstr ""
-
-msgid "gadget_name"
-msgstr ""
-
-msgid "my_use_of_the_gadget"
-msgstr ""
-
-msgid "on_demand_description"
-msgstr ""
-
-msgid "date"
-msgstr ""
-
-msgid "starting_at"
-msgstr ""
-
-msgid "stopping_at"
-msgstr ""
-
-msgid "delay"
-msgstr ""
-
-msgid "my_week"
-msgstr ""
-
-msgid "all_days"
-msgstr ""
-
-msgid "working_days"
-msgstr ""
-
-msgid "weekend"
-msgstr ""
-
-msgid "monday"
-msgstr ""
-
-msgid "tuesday"
-msgstr ""
-
-msgid "wednesday"
-msgstr ""
-
-msgid "thursday"
-msgstr ""
-
-msgid "friday"
-msgstr ""
-
-msgid "saturday"
-msgstr ""
-
-msgid "sunday"
-msgstr ""
-
-msgid "quart_hours"
-msgstr ""
-
-msgid "half_hours"
-msgstr ""
-
-msgid "full_hours"
-msgstr ""
-
-msgid "crazy"
-msgstr ""
-
-msgid "often"
-msgstr ""
-
-msgid "normal"
-msgstr ""
-
-msgid "rarely"
-msgstr ""
-
-msgid "show"
-msgstr ""
-
-msgid "online_documentation"
-msgstr ""
-
-msgid "documentation_url"
-msgstr ""
-
-msgid "global_settings"
-msgstr ""
+msgid "live_with_tux"
+msgstr ""
+
+msgid "gadgets"
+msgstr ""
+
+msgid "attitunes"
+msgstr ""
+
+msgid "tools"
+msgstr ""
+
+msgid "online"
+msgstr ""
+
+msgid "status"
+msgstr ""
+
+msgid "sound_on"
+msgstr ""
+
+msgid "sound_off"
+msgstr ""
+
+msgid "start"
+msgstr ""
+
+msgid "stop"
+msgstr ""
+
+msgid "all"
+msgstr ""
+
+msgid "on_demand"
+msgstr ""
+
+msgid "alerts"
+msgstr ""
+
+msgid "delete"
+msgstr ""
+
+msgid "popup_not_yet_implemented"
+msgstr ""
+
+msgid "popup_confirm_delete_gadget"
+msgstr ""
+
+msgid "yes"
+msgstr ""
+
+msgid "no"
+msgstr ""
+
+msgid "close"
+msgstr ""
+
+msgid "apply"
+msgstr ""
+
+msgid "cancel"
+msgstr ""
+
+msgid "gadget_settings"
+msgstr ""
+
+msgid "gadget_name"
+msgstr ""
+
+msgid "my_use_of_the_gadget"
+msgstr ""
+
+msgid "on_demand_description"
+msgstr ""
+
+msgid "date"
+msgstr ""
+
+msgid "starting_at"
+msgstr ""
+
+msgid "stopping_at"
+msgstr ""
+
+msgid "delay"
+msgstr ""
+
+msgid "my_week"
+msgstr ""
+
+msgid "all_days"
+msgstr ""
+
+msgid "working_days"
+msgstr ""
+
+msgid "weekend"
+msgstr ""
+
+msgid "monday"
+msgstr ""
+
+msgid "tuesday"
+msgstr ""
+
+msgid "wednesday"
+msgstr ""
+
+msgid "thursday"
+msgstr ""
+
+msgid "friday"
+msgstr ""
+
+msgid "saturday"
+msgstr ""
+
+msgid "sunday"
+msgstr ""
+
+msgid "quart_hours"
+msgstr ""
+
+msgid "half_hours"
+msgstr ""
+
+msgid "full_hours"
+msgstr ""
+
+msgid "crazy"
+msgstr ""
+
+msgid "often"
+msgstr ""
+
+msgid "normal"
+msgstr ""
+
+msgid "rarely"
+msgstr ""
+
+msgid "show"
+msgstr ""
+
+msgid "online_documentation"
+msgstr ""
+
+msgid "documentation_url"
+msgstr ""
+
+msgid "global_settings"
+msgstr ""
Modified: software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/en.po
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/en.po 2009-07-06 07:50:13 UTC (rev 5061)
+++ software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/en.po 2009-07-06 08:43:28 UTC (rev 5062)
@@ -1,152 +1,152 @@
-msgid "live_with_tux"
-msgstr "Live with Tux"
-
-msgid "gadgets"
-msgstr "Gadgets"
-
-msgid "attitunes"
-msgstr "Attitunes"
-
-msgid "tools"
-msgstr "Tools"
-
-msgid "online"
-msgstr "Online"
-
-msgid "status"
-msgstr "Status"
-
-msgid "sound_on"
-msgstr "Sound on"
-
-msgid "sound_off"
-msgstr "Sound off"
-
-msgid "start"
-msgstr "Start"
-
-msgid "stop"
-msgstr "Stop"
-
-msgid "all"
-msgstr "All"
-
-msgid "on_demand"
-msgstr "On demand"
-
-msgid "alerts"
-msgstr "Alerts"
-
-msgid "delete"
-msgstr "Delete"
-
-msgid "popup_not_yet_implemented"
-msgstr "This functionality is not yet implemented."
-
-msgid "popup_confirm_delete_gadget"
-msgstr "This action will delete this gadget. Continue ?"
-
-msgid "yes"
-msgstr "Yes"
-
-msgid "no"
-msgstr "No"
-
-msgid "close"
-msgstr "Close"
-
-msgid "apply"
-msgstr "Apply"
-
-msgid "cancel"
-msgstr "Cancel"
-
-msgid "gadget_settings"
-msgstr "Gadget settings"
-
-msgid "gadget_name"
-msgstr "Gadget name"
-
-msgid "my_use_of_the_gadget"
-msgstr "My use of the gadget"
-
-msgid "on_demand_description"
-msgstr "This gadget will be accessible with the remote control."
-
-msgid "date"
-msgstr "Date"
-
-msgid "starting_at"
-msgstr "Starting at"
-
-msgid "stopping_at"
-msgstr "Stopping at"
-
-msgid "delay"
-msgstr "Frequency"
-
-msgid "my_week"
-msgstr "My week"
-
-msgid "all_days"
-msgstr "All days"
-
-msgid "working_days"
-msgstr "Working days"
-
-msgid "weekend"
-msgstr "Weekend"
-
-msgid "monday"
-msgstr "Monday"
-
-msgid "tuesday"
-msgstr "Tuesday"
-
-msgid "wednesday"
-msgstr "Wednesday"
-
-msgid "thursday"
-msgstr "Thursday"
-
-msgid "friday"
-msgstr "Friday"
-
-msgid "saturday"
-msgstr "Saturday"
-
-msgid "sunday"
-msgstr "Sunday"
-
-msgid "quart_hours"
-msgstr "Quarter hours"
-
-msgid "half_hours"
-msgstr "Half hours"
-
-msgid "full_hours"
-msgstr "Full hours"
-
-msgid "crazy"
-msgstr "Crazy"
-
-msgid "often"
-msgstr "Often"
-
-msgid "normal"
-msgstr "Normal"
-
-msgid "rarely"
-msgstr "Rarely"
-
-msgid "show"
-msgstr "Show"
-
-msgid "online_documentation"
-msgstr "Online documentation"
-
-msgid "documentation_url"
-msgstr "http://www.kysoh.com/documentation-3?set_language=en"
-
-msgid "global_settings"
-msgstr "Global settings"
+msgid "live_with_tux"
+msgstr "Live with Tux"
+
+msgid "gadgets"
+msgstr "Gadgets"
+
+msgid "attitunes"
+msgstr "Attitunes"
+
+msgid "tools"
+msgstr "Tools"
+
+msgid "online"
+msgstr "Online"
+
+msgid "status"
+msgstr "Status"
+
+msgid "sound_on"
+msgstr "Sound on"
+
+msgid "sound_off"
+msgstr "Sound off"
+
+msgid "start"
+msgstr "Start"
+
+msgid "stop"
+msgstr "Stop"
+
+msgid "all"
+msgstr "All"
+
+msgid "on_demand"
+msgstr "On demand"
+
+msgid "alerts"
+msgstr "Alerts"
+
+msgid "delete"
+msgstr "Delete"
+
+msgid "popup_not_yet_implemented"
+msgstr "This functionality is not yet implemented."
+
+msgid "popup_confirm_delete_gadget"
+msgstr "This action will delete this gadget. Continue ?"
+
+msgid "yes"
+msgstr "Yes"
+
+msgid "no"
+msgstr "No"
+
+msgid "close"
+msgstr "Close"
+
+msgid "apply"
+msgstr "Apply"
+
+msgid "cancel"
+msgstr "Cancel"
+
+msgid "gadget_settings"
+msgstr "Gadget settings"
+
+msgid "gadget_name"
+msgstr "Gadget name"
+
+msgid "my_use_of_the_gadget"
+msgstr "My use of the gadget"
+
+msgid "on_demand_description"
+msgstr "This gadget will be accessible with the remote control."
+
+msgid "date"
+msgstr "Date"
+
+msgid "starting_at"
+msgstr "Starting at"
+
+msgid "stopping_at"
+msgstr "Stopping at"
+
+msgid "delay"
+msgstr "Frequency"
+
+msgid "my_week"
+msgstr "My week"
+
+msgid "all_days"
+msgstr "All days"
+
+msgid "working_days"
+msgstr "Working days"
+
+msgid "weekend"
+msgstr "Weekend"
+
+msgid "monday"
+msgstr "Monday"
+
+msgid "tuesday"
+msgstr "Tuesday"
+
+msgid "wednesday"
+msgstr "Wednesday"
+
+msgid "thursday"
+msgstr "Thursday"
+
+msgid "friday"
+msgstr "Friday"
+
+msgid "saturday"
+msgstr "Saturday"
+
+msgid "sunday"
+msgstr "Sunday"
+
+msgid "quart_hours"
+msgstr "Quarter hours"
+
+msgid "half_hours"
+msgstr "Half hours"
+
+msgid "full_hours"
+msgstr "Full hours"
+
+msgid "crazy"
+msgstr "Crazy"
+
+msgid "often"
+msgstr "Often"
+
+msgid "normal"
+msgstr "Normal"
+
+msgid "rarely"
+msgstr "Rarely"
+
+msgid "show"
+msgstr "Show"
+
+msgid "online_documentation"
+msgstr "Online documentation"
+
+msgid "documentation_url"
+msgstr "http://www.kysoh.com/documentation-3?set_language=en"
+
+msgid "global_settings"
+msgstr "Global settings"
Modified: software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/fr.po
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/fr.po 2009-07-06 07:50:13 UTC (rev 5061)
+++ software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/fr.po 2009-07-06 08:43:28 UTC (rev 5062)
@@ -1,152 +1,152 @@
-msgid "live_with_tux"
-msgstr "Vivre avec Tux"
-
-msgid "gadgets"
-msgstr "Gadgets"
-
-msgid "attitunes"
-msgstr "Attitunes"
-
-msgid "tools"
-msgstr "Outils"
-
-msgid "online"
-msgstr "En ligne"
-
-msgid "status"
-msgstr "Statut"
-
-msgid "sound_on"
-msgstr "Son on"
-
-msgid "sound_off"
-msgstr "Son off"
-
-msgid "start"
-msgstr "Start"
-
-msgid "stop"
-msgstr "Stop"
-
-msgid "all"
-msgstr "Tous"
-
-msgid "on_demand"
-msgstr "A la demande"
-
-msgid "alerts"
-msgstr "Alertes"
-
-msgid "delete"
-msgstr "Suppr."
-
-msgid "popup_not_yet_implemented"
-msgstr "Cette fonctionnalité n'est pas encore implémentée."
-
-msgid "popup_confirm_delete_gadget"
-msgstr "Etes-vous sûr de vouloir supprimer ce gadget ?"
-
-msgid "yes"
-msgstr "Oui"
-
-msgid "no"
-msgstr "Non"
-
-msgid "close"
-msgstr "Fermer"
-
-msgid "apply"
-msgstr "Valider"
-
-msgid "cancel"
-msgstr "Annuler"
-
-msgid "gadget_settings"
-msgstr "Paramètres du gadget"
-
-msgid "gadget_name"
-msgstr "Nom du gadget"
-
-msgid "my_use_of_the_gadget"
-msgstr "Mon utilisation du gadget"
-
-msgid "on_demand_description"
-msgstr "Ce gadget sera accessible avec la télécommande."
-
-msgid "date"
-msgstr "Date"
-
-msgid "starting_at"
-msgstr "Démarrer à"
-
-msgid "stopping_at"
-msgstr "Stopper à"
-
-msgid "delay"
-msgstr "Fréquence"
-
-msgid "my_week"
-msgstr "Ma semaine"
-
-msgid "all_days"
-msgstr "Tous les jours"
-
-msgid "working_days"
-msgstr "Les jours ouvrables"
-
-msgid "weekend"
-msgstr "Le weekend"
-
-msgid "monday"
-msgstr "Lundi"
-
-msgid "tuesday"
-msgstr "Mardi"
-
-msgid "wednesday"
-msgstr "Mercredi"
-
-msgid "thursday"
-msgstr "Jeudi"
-
-msgid "friday"
-msgstr "Vendredi"
-
-msgid "saturday"
-msgstr "Samedi"
-
-msgid "sunday"
-msgstr "Dimanche"
-
-msgid "quart_hours"
-msgstr "Quart d'heures"
-
-msgid "half_hours"
-msgstr "Demi-heures"
-
-msgid "full_hours"
-msgstr "Heures pleines"
-
-msgid "crazy"
-msgstr "Fou"
-
-msgid "often"
-msgstr "Souvent"
-
-msgid "normal"
-msgstr "Normal"
-
-msgid "rarely"
-msgstr "Rarement"
-
-msgid "show"
-msgstr "Voir"
-
-msgid "online_documentation"
-msgstr "Documentation en ligne"
-
-msgid "documentation_url"
-msgstr "http://www.kysoh.com/documentation-3?set_language=fr"
-
-msgid "global_settings"
-msgstr "Configuration globale"
+msgid "live_with_tux"
+msgstr "Vivre avec Tux"
+
+msgid "gadgets"
+msgstr "Gadgets"
+
+msgid "attitunes"
+msgstr "Attitunes"
+
+msgid "tools"
+msgstr "Outils"
+
+msgid "online"
+msgstr "En ligne"
+
+msgid "status"
+msgstr "Statut"
+
+msgid "sound_on"
+msgstr "Son on"
+
+msgid "sound_off"
+msgstr "Son off"
+
+msgid "start"
+msgstr "Start"
+
+msgid "stop"
+msgstr "Stop"
+
+msgid "all"
+msgstr "Tous"
+
+msgid "on_demand"
+msgstr "A la demande"
+
+msgid "alerts"
+msgstr "Alertes"
+
+msgid "delete"
+msgstr "Suppr."
+
+msgid "popup_not_yet_implemented"
+msgstr "Cette fonctionnalité n'est pas encore implémentée."
+
+msgid "popup_confirm_delete_gadget"
+msgstr "Etes-vous sûr de vouloir supprimer ce gadget ?"
+
+msgid "yes"
+msgstr "Oui"
+
+msgid "no"
+msgstr "Non"
+
+msgid "close"
+msgstr "Fermer"
+
+msgid "apply"
+msgstr "Valider"
+
+msgid "cancel"
+msgstr "Annuler"
+
+msgid "gadget_settings"
+msgstr "Paramètres du gadget"
+
+msgid "gadget_name"
+msgstr "Nom du gadget"
+
+msgid "my_use_of_the_gadget"
+msgstr "Mon utilisation du gadget"
+
+msgid "on_demand_description"
+msgstr "Ce gadget sera accessible avec la télécommande."
+
+msgid "date"
+msgstr "Date"
+
+msgid "starting_at"
+msgstr "Démarrer à"
+
+msgid "stopping_at"
+msgstr "Stopper à"
+
+msgid "delay"
+msgstr "Fréquence"
+
+msgid "my_week"
+msgstr "Ma semaine"
+
+msgid "all_days"
+msgstr "Tous les jours"
+
+msgid "working_days"
+msgstr "Les jours ouvrables"
+
+msgid "weekend"
+msgstr "Le weekend"
+
+msgid "monday"
+msgstr "Lundi"
+
+msgid "tuesday"
+msgstr "Mardi"
+
+msgid "wednesday"
+msgstr "Mercredi"
+
+msgid "thursday"
+msgstr "Jeudi"
+
+msgid "friday"
+msgstr "Vendredi"
+
+msgid "saturday"
+msgstr "Samedi"
+
+msgid "sunday"
+msgstr "Dimanche"
+
+msgid "quart_hours"
+msgstr "Quart d'heures"
+
+msgid "half_hours"
+msgstr "Demi-heures"
+
+msgid "full_hours"
+msgstr "Heures pleines"
+
+msgid "crazy"
+msgstr "Fou"
+
+msgid "often"
+msgstr "Souvent"
+
+msgid "normal"
+msgstr "Normal"
+
+msgid "rarely"
+msgstr "Rarement"
+
+msgid "show"
+msgstr "Voir"
+
+msgid "online_documentation"
+msgstr "Documentation en ligne"
+
+msgid "documentation_url"
+msgstr "http://www.kysoh.com/documentation-3?set_language=fr"
+
+msgid "global_settings"
+msgstr "Configuration globale"
|
|
From: remi <c2m...@c2...> - 2009-07-06 07:50:21
|
Author: remi Date: 2009-07-06 09:50:13 +0200 (Mon, 06 Jul 2009) New Revision: 5061 Modified: software_suite_v3/smart-core/smart-server/trunk/data/favicon/favicon.ico Log: * Updated "favicon" icon Modified: software_suite_v3/smart-core/smart-server/trunk/data/favicon/favicon.ico =================================================================== (Binary files differ) |
|
From: remi <c2m...@c2...> - 2009-07-06 07:50:00
|
Author: remi
Date: 2009-07-06 09:49:52 +0200 (Mon, 06 Jul 2009)
New Revision: 5060
Modified:
software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/xsl/tools.xsl
software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/default.pot
software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/en.po
software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/fr.po
Log:
* Added "Online documentation" row in the "Tools" page.
* Added and fixed some translations
Modified: software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/xsl/tools.xsl
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/xsl/tools.xsl 2009-07-05 15:16:54 UTC (rev 5059)
+++ software_suite_v3/smart-core/smart-server/trunk/data/web_interface/user_01/xsl/tools.xsl 2009-07-06 07:49:52 UTC (rev 5060)
@@ -130,6 +130,14 @@
<span class="toolsRowName"><xsl:value-of select="root/data/tux_controller/name"/></span>
<div class="frame01Sep"></div>
</xsl:if>
+ <!-- ONLINE DOCUMENTATION -->
+ <xsl:element name="a">
+ <xsl:attribute name="class">toolsBtnTitle toolsBtnShowEnable</xsl:attribute>
+ <xsl:attribute name="target">_blank</xsl:attribute>
+ <xsl:attribute name="href"><xsl:value-of select="root/translations/documentation_url"/></xsl:attribute><xsl:value-of select="root/translations/show"/>
+ </xsl:element>
+ <span class="toolsRowName"><xsl:value-of select="root/translations/online_documentation"/></span>
+ <div class="frame01Sep"></div>
<!-- ABOUT -->
<xsl:if test="root/data/about != ''">
<xsl:element name="a">
@@ -141,8 +149,6 @@
</xsl:element>
<span class="toolsRowName"><xsl:value-of select="root/data/about/name"/></span>
</xsl:if>
-
-
</div>
<div class="frame01Bottom"></div>
</div>
Modified: software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/default.pot
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/default.pot 2009-07-05 15:16:54 UTC (rev 5059)
+++ software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/default.pot 2009-07-06 07:49:52 UTC (rev 5060)
@@ -141,3 +141,12 @@
msgid "show"
msgstr ""
+
+msgid "online_documentation"
+msgstr ""
+
+msgid "documentation_url"
+msgstr ""
+
+msgid "global_settings"
+msgstr ""
Modified: software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/en.po
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/en.po 2009-07-05 15:16:54 UTC (rev 5059)
+++ software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/en.po 2009-07-06 07:49:52 UTC (rev 5060)
@@ -141,3 +141,12 @@
msgid "show"
msgstr "Show"
+
+msgid "online_documentation"
+msgstr "Online documentation"
+
+msgid "documentation_url"
+msgstr "http://www.kysoh.com/documentation-3?set_language=en"
+
+msgid "global_settings"
+msgstr "Global settings"
Modified: software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/fr.po
===================================================================
--- software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/fr.po 2009-07-05 15:16:54 UTC (rev 5059)
+++ software_suite_v3/smart-core/smart-server/trunk/translation/wi_user/fr.po 2009-07-06 07:49:52 UTC (rev 5060)
@@ -14,13 +14,13 @@
msgstr "En ligne"
msgid "status"
-msgstr "Status"
+msgstr "Statut"
msgid "sound_on"
-msgstr "Sound on"
+msgstr "Son on"
msgid "sound_off"
-msgstr "Sound off"
+msgstr "Son off"
msgid "start"
msgstr "Start"
@@ -41,7 +41,7 @@
msgstr "Suppr."
msgid "popup_not_yet_implemented"
-msgstr "Cette functionnalité n'est pas encore implémentée."
+msgstr "Cette fonctionnalité n'est pas encore implémentée."
msgid "popup_confirm_delete_gadget"
msgstr "Etes-vous sûr de vouloir supprimer ce gadget ?"
@@ -71,7 +71,7 @@
msgstr "Mon utilisation du gadget"
msgid "on_demand_description"
-msgstr "Ce gadget sera accessible par la télécommande."
+msgstr "Ce gadget sera accessible avec la télécommande."
msgid "date"
msgstr "Date"
@@ -141,3 +141,12 @@
msgid "show"
msgstr "Voir"
+
+msgid "online_documentation"
+msgstr "Documentation en ligne"
+
+msgid "documentation_url"
+msgstr "http://www.kysoh.com/documentation-3?set_language=fr"
+
+msgid "global_settings"
+msgstr "Configuration globale"
|
|
From: remi <c2m...@c2...> - 2009-07-05 15:17:01
|
Author: remi
Date: 2009-07-05 17:16:54 +0200 (Sun, 05 Jul 2009)
New Revision: 5059
Modified:
software_suite_v3/software/tool/tool-attitunes-studio/trunk/resources/plugin.xml
software_suite_v3/software/tool/tool-tux-controller/trunk/resources/plugin.xml
Log:
* Added tags in the start tool command for "attitunes studio" and "tux controller".
Modified: software_suite_v3/software/tool/tool-attitunes-studio/trunk/resources/plugin.xml
===================================================================
--- software_suite_v3/software/tool/tool-attitunes-studio/trunk/resources/plugin.xml 2009-07-05 14:57:54 UTC (rev 5058)
+++ software_suite_v3/software/tool/tool-attitunes-studio/trunk/resources/plugin.xml 2009-07-05 15:16:54 UTC (rev 5059)
@@ -23,7 +23,9 @@
<commands>
<command
name="run"
- description="Start the tool" />
+ description="Start the tool"
+ daemon="true"
+ notifier="true" />
</commands>
<tasks/>
</plugin>
Modified: software_suite_v3/software/tool/tool-tux-controller/trunk/resources/plugin.xml
===================================================================
--- software_suite_v3/software/tool/tool-tux-controller/trunk/resources/plugin.xml 2009-07-05 14:57:54 UTC (rev 5058)
+++ software_suite_v3/software/tool/tool-tux-controller/trunk/resources/plugin.xml 2009-07-05 15:16:54 UTC (rev 5059)
@@ -17,7 +17,9 @@
<commands>
<command
name="run"
- description="Start the tool" />
+ description="Start the tool"
+ daemon="true"
+ notifier="true" />
</commands>
<tasks/>
</plugin>
|
|
From: remi <c2m...@c2...> - 2009-07-05 14:57:59
|
Author: remi Date: 2009-07-05 16:57:54 +0200 (Sun, 05 Jul 2009) New Revision: 5058 Modified: software_suite_v3/software/tool/tool-tux-controller/trunk/resources/fr.po Log: * Fixed file format to utf-8 Modified: software_suite_v3/software/tool/tool-tux-controller/trunk/resources/fr.po =================================================================== --- software_suite_v3/software/tool/tool-tux-controller/trunk/resources/fr.po 2009-07-05 14:55:47 UTC (rev 5057) +++ software_suite_v3/software/tool/tool-tux-controller/trunk/resources/fr.po 2009-07-05 14:57:54 UTC (rev 5058) @@ -1,8 +1,8 @@ msgid "Tux Droid Controller" -msgstr "Tux Droid Contrr" +msgstr "Tux Droid Contrôleur" msgid "Tux Droid Controller tool" -msgstr "Outil Tux Droid Contrr" +msgstr "Outil Tux Droid Contrôleur" msgid "Start the tool" -msgstr "Drrer l'outil" +msgstr "Démarrer l'outil" |
|
From: remi <c2m...@c2...> - 2009-07-05 14:55:58
|
Author: remi Date: 2009-07-05 16:55:47 +0200 (Sun, 05 Jul 2009) New Revision: 5057 Added: software_suite_v3/software/tool/tool-attitunes-studio/trunk/resources/en.po software_suite_v3/software/tool/tool-attitunes-studio/trunk/resources/fr.po Log: * Added "fr" and "en" po files Added: software_suite_v3/software/tool/tool-attitunes-studio/trunk/resources/en.po =================================================================== --- software_suite_v3/software/tool/tool-attitunes-studio/trunk/resources/en.po (rev 0) +++ software_suite_v3/software/tool/tool-attitunes-studio/trunk/resources/en.po 2009-07-05 14:55:47 UTC (rev 5057) @@ -0,0 +1,11 @@ +msgid "Attitunes Studio" +msgstr "Attitunes Studio" + +msgid "Attitunes studio launcher" +msgstr "Attitunes Studio Tool" + +msgid "Path of the attitune to edit" +msgstr "Path of the attitune to edit" + +msgid "Start the tool" +msgstr "Start the tool" Added: software_suite_v3/software/tool/tool-attitunes-studio/trunk/resources/fr.po =================================================================== --- software_suite_v3/software/tool/tool-attitunes-studio/trunk/resources/fr.po (rev 0) +++ software_suite_v3/software/tool/tool-attitunes-studio/trunk/resources/fr.po 2009-07-05 14:55:47 UTC (rev 5057) @@ -0,0 +1,11 @@ +msgid "Attitunes Studio" +msgstr "Attitunes Studio" + +msgid "Attitunes studio launcher" +msgstr "Outil Attitunes Studio" + +msgid "Path of the attitune to edit" +msgstr "Chemin vers le fichier attitune diter" + +msgid "Start the tool" +msgstr "Drrer l'outil" |
|
From: remi <c2m...@c2...> - 2009-07-05 14:52:54
|
Author: remi Date: 2009-07-05 16:52:48 +0200 (Sun, 05 Jul 2009) New Revision: 5056 Added: software_suite_v3/software/tool/tool-tux-controller/trunk/resources/en.po software_suite_v3/software/tool/tool-tux-controller/trunk/resources/fr.po Log: * Added "fr" and "en" po files Added: software_suite_v3/software/tool/tool-tux-controller/trunk/resources/en.po =================================================================== --- software_suite_v3/software/tool/tool-tux-controller/trunk/resources/en.po (rev 0) +++ software_suite_v3/software/tool/tool-tux-controller/trunk/resources/en.po 2009-07-05 14:52:48 UTC (rev 5056) @@ -0,0 +1,8 @@ +msgid "Tux Droid Controller" +msgstr "Tux Droid Controller" + +msgid "Tux Droid Controller tool" +msgstr "Tux Droid Controller tool" + +msgid "Start the tool" +msgstr "Start the tool" Added: software_suite_v3/software/tool/tool-tux-controller/trunk/resources/fr.po =================================================================== --- software_suite_v3/software/tool/tool-tux-controller/trunk/resources/fr.po (rev 0) +++ software_suite_v3/software/tool/tool-tux-controller/trunk/resources/fr.po 2009-07-05 14:52:48 UTC (rev 5056) @@ -0,0 +1,8 @@ +msgid "Tux Droid Controller" +msgstr "Tux Droid Contrr" + +msgid "Tux Droid Controller tool" +msgstr "Outil Tux Droid Contrr" + +msgid "Start the tool" +msgstr "Drrer l'outil" |