scolasync.py

Aller à la documentation de ce fichier.
00001 #!/usr/bin/python
00002 # -*- coding: utf-8 -*-
00003 #       $Id: scolasync.py 47 2011-06-13 10:20:14Z georgesk $    
00004 
00005 ##
00006 # @package scolasync
00007 # Scolasync est un programme pour gérer des transferts de fichiers entre un
00008 # ordinateur et une collection de clés USB.
00009 # 
00010 # 
00011 
00012 ## \mainpage ScolaSync
00013 #
00014 # \section but But de l'application
00015 #
00016 # Scolasync est un programme pour gérer des transferts de fichiers
00017 # entre un ordinateur et une collection de clés USB.
00018 #
00019 # \section CahierDeCharges CAHIER DE CHARGES DE SCOLASYNC
00020 # 
00021 # -# l'application doit pouvoir être utilisable par n'importe quel
00022 # enseignant, par exemple un prof de langues quelques minutes après la
00023 # prise en main.
00024 # -# une personne-essource, ou le prof lui-même, doit pouvoir très
00025 # simplement créer une association permanente entre les identifiants des
00026 # clés USB et les noms d'élèves. Cette association doit pouvoir évoluer
00027 # en fonction des classes à la demande de l'enseignant, d'une année sur
00028 # l'autre, ou d'un cycle de travail à un autre.
00029 # -# un prof doit pouvoir envoyer un ensemble de fichiers vers les clés
00030 # USB de ses élèves identiquement pour tous. L'individualisation peut se
00031 # faire en branchant/débranchant les clés. Le prof doit avoir la
00032 # possibilité de choisir, voire de créer le dossier de réception.
00033 # -# chaque élève doit pouvoir retrouver facilement ces fichiers et
00034 # surtout la consigne expliquant ce qu'il doit faire, et comment il sera
00035 # noté.  Comme les lecteurs mp3 stockent souvent des fichiers dans des
00036 # répertoires de noms variés, il faut pouvoir gérer ça.
00037 # -# le prof doit pouvoir récolter les clés USB des élèves et récupérer
00038 # leur travail en quelques minutes seulement, par exemple en
00039 # sélectionnant le dossier dans lequel se trouve le fichier à récupérer.
00040 # -# l'application doit renommer les fichiers en tenant compte du nom du
00041 # baladeur, donc du nom de l'élève.
00042 # -# il faut pouvoir effacer des fichiers sur les clés, voire les
00043 # remettre à zéro.
00044 #
00045 # \section licence Licence
00046 #
00047 # <b>ScolaSync version 1.0 :</b>
00048 #
00049 # un programme pour gérer des transferts de fichiers entre un
00050 # ordinateur et une collection de clés USB.
00051 # 
00052 # <b>Copyright © 2010 Georges Khaznadar <georgesk@ofset.org></b>
00053 # 
00054 # Ce projet est un logiciel libre : vous pouvez le redistribuer, le
00055 # modifier selon les terme de la GPL (GNU Public License) dans les
00056 # termes de la Free Software Foundation concernant la version 3 ou
00057 # plus de la dite licence.
00058 #
00059 # Ce programme est fait avec l'espoir qu'il sera utile mais <b>SANS
00060 # AUCUNE GARANTIE</b>. Lisez la <a href="http://www.gnu.org/licenses/"
00061 # target="license">licence</a> pour plus de détails.
00062 #
00063 # \section support Support
00064 #
00065 # Si vous avez besoin d'un support pour ce programme, tel que :
00066 # <b>garantie contractuelle</b>, <b>formation</b>, <b>adaptation plus
00067 # précise</b> aux besoins de votre entreprise, etc. contactez
00068 # l'association <a href="http://www.ofset.org"
00069 # target="ofset">OFSET</a> et/ou <a
00070 # href="mailto:georgesk@ofset.org">l'auteur</a> du logiciel.
00071 #
00072 # \section architecture Architecture de ScolaSync
00073 #
00074 # Scolasync est bâti sur des composants logiciels libres, les plus
00075 # notables sont les suivants :
00076 #
00077 # - la bibliothèque Qt4 pour l'interface graphique
00078 # - la bibliothèque python-dbus pour l'interaction avec le noyau Linux 2.6
00079 # - la bibliothèque udisks pour interroger facilement le noyau sur le
00080 # statut des disques, et pour réaliser certaines actions sur les
00081 # disques et clés USB
00082 # - l'utilisation de threads pour mener en parallèle les actions qui
00083 # concernent simultanément plusieurs clés USB
00084 
00085 licence={}
00086 licenceEn="""
00087     scolasync version %s:
00088 
00089     a program to manage file transfers between a computer and a collection
00090     of USB sticks.
00091     
00092     Copyright (C) 2010 Georges Khaznadar <georgesk@ofset.org>
00093 
00094     This program is free software: you can redistribute it and/or modify
00095     it under the terms of the GNU General Public License as published by
00096     the Free Software Foundation, either version 3 of the License, or
00097     (at your option) any later version.
00098 
00099     This program is distributed in the hope that it will be useful,
00100     but WITHOUT ANY WARRANTY; without even the implied warranty of
00101     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00102     GNU General Public License for more details.
00103 
00104     You should have received a copy of the GNU General Public License
00105     along with this program.  If not, see <http://www.gnu.org/licenses/>.
00106 """
00107 licence['en']=licenceEn
00108 
00109 licenceFr="""
00110     scolasync version %s :
00111 
00112     un programme pour gérer des transferts de fichiers entre un
00113     ordinateur et une collection de clés USB.
00114     
00115     Copyright (C) 2010 Georges Khaznadar <georgesk@ofset.org>
00116     
00117     Ce projet est un logiciel libre : vous pouvez le redistribuer, le
00118     modifier selon les terme de la GPL (GNU Public License) dans les
00119     termes de la Free Software Foundation concernant la version 3 ou
00120     plus de la dite licence.
00121     
00122     Ce programme est fait avec l'espoir qu'il sera utile mais SANS
00123     AUCUNE GARANTIE. Lisez la licence pour plus de détails.
00124     
00125     <http://www.gnu.org/licenses/>.
00126 """
00127 licence['fr']=licenceFr
00128 
00129 
00130 import mainWindow
00131 from PyQt4.QtCore import *
00132 from PyQt4.QtGui import *
00133 import sys, os, os.path, getopt, subprocess
00134 from globaldef import logFileName
00135 
00136 ##
00137 # 
00138 #     affiche le mode d'emploi à la console
00139 #     
00140 def usage():
00141     print """\
00142 "%s" : une option n'est pas reconnue
00143 Options :
00144  -c ou --check : pour que la première colonne du tableau comporte
00145     des cases à cocher.""" %(" ".join(sys.argv))
00146     return
00147 
00148 ##
00149 # 
00150 #     C'est la fonction principale.
00151 # 
00152 #      Elle crée un fichier de journalisation vide, puis lance
00153 #      l'application interactive elle-même. Le fichier de journalisation
00154 #      est ${HOME}/.scolasync/scolasync.log sous Linux
00155 #     
00156 def run():
00157     
00158     subprocess.call(": > " + logFileName ,shell=True)
00159         
00160     app = QApplication(sys.argv)
00161     
00162     args=sys.argv[1:]
00163     try:
00164         #opts,args= ["check"], sys.argv
00165         opts, args = getopt.getopt(args, "c", ["check"] )
00166     except getopt.GetoptError:
00167         usage()
00168         sys.exit(2)
00169 
00170     locale = "%s" %QLocale.system().name()
00171     ## qtTranslator = QTranslator()
00172     ## if qtTranslator.load("qt_" + locale):
00173     ##     print "OK for qttranslator"
00174     ##     app.installTranslator(qtTranslator)
00175     appTranslator = QTranslator()
00176     langdir=os.path.join(mainWindow._dir("lang"),locale+".qm")
00177     b= appTranslator.load(langdir)
00178     if b:
00179         # print "installation du fichier de traduction", langdir
00180         app.installTranslator(appTranslator)
00181 
00182     
00183     windows = mainWindow.mainWindow(None,opts,locale)
00184     windows.show()
00185     sys.exit(app.exec_())
00186 
00187 if __name__ == "__main__":
00188     run()
00189