7 this file is part of the project scolasync
9 Copyright (C) 2010 Georges Khaznadar <georgesk@ofset.org>
11 This program is free software: you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation, either version3 of the License, or
14 (at your option) any later version.
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
21 You should have received a copy of the GNU General Public License
22 along with this program. If not, see <http://www.gnu.org/licenses/>.
26 import os.path, dbus, subprocess, time, random
29 from globaldef
import markFileName
32 liste statique pour éviter de demander chaque seconde le nom d'un
33 propriétaire de clé si on n'a pas souhaité le donner.
44 tattooFileName = os.path.join(mountPoint,
".scolasync-tattoo")
46 if os.path.exists(tattooFileName):
47 tattoo_=open(tattooFileName,
"r").readlines()[0].strip()
52 tattoo_=
"%12.2f" %time.time()
58 outfile=open(tattooFileName,
"w")
59 outfile.write(tattoo_)
72 title=QApplication.translate(
"Dialog",
"Choix du propriétaire",
None, QApplication.UnicodeUTF8)
73 prompt=QApplication.translate(
"Dialog",
"Nouveau nom du propriétaire du baladeur",
None, QApplication.UnicodeUTF8)
74 newStudent, ok = QInputDialog.getText(
None, title, prompt, text=hint)
76 newStudent=
"%s" %newStudent
78 db.writeStudent(ud.stickid, ud.uuid, ud.tattoo(), newStudent)
106 def __init__(self, path, mp='', isUsb=False, vendor='', model='', parent=None,
107 fstype=
'', serial=
'', uuid=
'',
108 free=0, capacity=0, device=
'', firstFat=
None, selected=
True):
109 usbDisk2.uDisk2.__init__(self, path=path, mp=mp, isUsb=isUsb, vendor=vendor,
110 model=model, parent=parent, fstype=fstype, serial=serial,
111 uuid=uuid, free=free, capacity=capacity, device=device,
112 firstFat=firstFat, selected=selected)
113 QObject.__init__(self)
123 return self.
getFat().owner
142 prefix=
"\n"+
" "*indent
144 props=[
"mp",
"parent",
"fstype",
"stickid",
"uuid",
"vendor",
"model",
"devStuff",
"free",
"capacity",
"owner"]
146 r+=prefix+
"%s = %s" %(prop, getattr(self,prop))
178 f1=
"/usr/share/scolasync/marques.py"
179 f2=os.path.expanduser(markFileName)
180 if os.path.exists(f2):
184 result=eval(open(f,
"r", encoding="utf-8").read())
195 if k
in self.visibleDirs.keys():
209 result=usbDisk2.uDisk2.headers(locale)
210 ownerProp=QApplication.translate(
"uDisk",
"owner",
None, QApplication.UnicodeUTF8)
211 result.insert(1,ownerProp)
223 return QApplication.translate(
"Dialog",
"inconnu",
None, QApplication.UnicodeUTF8)
233 propListe=usbDisk2.uDisk2.headers()
244 headers = staticmethod(headers)
259 if not db.knowsId(ud.stickid, ud.uuid, ud.tattoo()) :
262 prompt=QApplication.translate(
"Dialog",
"La cle {id}<br>n'est pas identifiee, donnez le nom du proprietaire",
None, QApplication.UnicodeUTF8).format(id=ud.stickid)
263 title=QApplication.translate(
"Dialog",
"Entrer un nom",
None, QApplication.UnicodeUTF8)
264 text,ok = QInputDialog.getText(
None, title, prompt)
265 db.writeStudent(ud.stickid, ud.uuid, ud.tattoo(), text)
266 o=db.readStudent(ud.stickid, ud.uuid, ud.tattoo())
279 for i
in range(length):
280 result+=random.choice(
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
301 def __init__(self, access="disk", diskClass=uDisk2, ownerDialog=False):
303 usbDisk2.Available.__init__(self, access, diskClass)
318 if __name__==
"__main__":
324 QMainWindow.__init__(self)
327 quitbutton = QPushButton(
'Examinez le terminal\nbranchez et débranchez des clés USB, puis\nQuittez', self)
328 QObject.connect(quitbutton, SIGNAL(
"clicked()"), self.close)
329 self.setCentralWidget(quitbutton)
335 print([s.split(
"/")[-1]
for s
in machin.targets.keys()])
336 for t
in machin.targets:
337 machin.targets[t].owner=machin.targets[t].ownerByDb()
338 print (machin.targets[t].owner,
":", t)
339 machin.modified=
False
340 machin.addHook(
'object-added', print_targets_if_modif)
341 machin.addHook(
'object-removed', print_targets_if_modif)
343 app = QApplication(sys.argv)
346 sys.exit(app.exec_())
def getOwner(self)
Renvoie le propriétaire.
def getFat(self)
Renvoie à coup sûr la partition vfat d'un disque.
def __init__
Le constructeur.
une classe pour représenter un disque ou une partition.
def __init__
Le constructeur est un proxy pour usbDisk.Available.__init__ qui force la classe de disques à utilise...
Une classe qui fournit une collection de disques USB connectés, avec leurs propriétaires.
def readQuirks(self)
Lit un dictionnaire indexé par le noms de vendeurs et les noms de modèle pour associer à ces modèles ...
def print_targets_if_modif(man, obj)
def visibleDir(self)
Renvoie le répertoire particulier de la partition qui sera visible quand le baladeur est utilisé par ...
def __getitem__(self, n)
renvoie un élément de listage de données internes au disque Fait en sorte que la deuxième colonne soi...
def editRecord
édition de la base de données.
def finishInit(self)
Fin de l'initialisation : trouve les propriétaires des disques puis identifie les partitions FAT et l...
def ownerByDb(self)
renvoie un nom de propriétaire dans tous les cas.
def ensureOwner(self, ownerDialog)
Demande un nom de propriétaire si celui-ci n'est pas encore défini pour cette clé USB...
def randomOwner(self, length)
fabrique un texte aléatoire de longueur donnée
def getFirstFats(self)
Facilite l'accès aux partitions de type DOS-FAT, et a des effets de bord :
def valuableProperties
Facilite l'accès aux propriétés intéressantes d'une instance.
def tattoo(self)
Renvoie un tatouage présent sur la clé, quitte à le créer.
une classe pour représenter la collection des disques USB connectés
def tattooInDir(mountPoint)
Renvoie le tatouage pour un point de montage donné, quitte à le créer si nécessaire.
def unNumberProp(self, n)
retire le numéro des en-têtes pour en faire un nom de propriété valide pour interroger dbus ...
def disks_ud(self)
Récolte les enregistrements de niveau supérieur de self.targets.
une classe qui ajoute un nom de propriétaire aux disque USB, et qui en même temps ajoute des particul...
def mountFirstFats(self)
fabrique la liste des partitions FAT, monte les partitions FAT si elles ne le sont pas ...