# 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