6 this file is part of the project scolasync
8 Copyright (C) 2010 Georges Khaznadar <georgesk@ofset.org>
10 This program is free software: you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation, either version3 of the License, or
13 (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>.
25 import os.path, dbus, subprocess, time, random
28 from globaldef
import markFileName
31 liste statique pour éviter de demander chaque seconde le nom d'un
32 propriétaire de clé si on n'a pas souhaité le donner.
43 tattooFileName = os.path.join(mountPoint,
".scolasync-tattoo")
45 if os.path.exists(tattooFileName):
46 tattoo_=open(tattooFileName,
"r").readlines()[0].strip()
51 tattoo_=
"%12.2f" %time.time()
57 outfile=open(tattooFileName,
"w")
58 outfile.write(tattoo_)
71 title=QApplication.translate(
"Dialog",
"Choix du propriétaire",
None)
72 prompt=QApplication.translate(
"Dialog",
"Nouveau nom du propriétaire du baladeur",
None)
73 newStudent, ok = QInputDialog.getText(
None, title, prompt, text=hint)
75 newStudent=
"%s" %newStudent
77 db.writeStudent(ud.stickid, ud.uuid, ud.tattoo(), newStudent)
105 def __init__(self, path, mp='', isUsb=False, vendor='', model='', parent=None,
106 fstype=
'', serial=
'', uuid=
'',
107 free=0, capacity=0, device=
'', firstFat=
None, selected=
True):
108 usbDisk2.uDisk2.__init__(self, path=path, mp=mp, isUsb=isUsb, vendor=vendor,
109 model=model, parent=parent, fstype=fstype, serial=serial,
110 uuid=uuid, free=free, capacity=capacity, device=device,
111 firstFat=firstFat, selected=selected)
112 QObject.__init__(self)
122 return self.
getFat().owner
141 prefix=
"\n"+
" "*indent
143 props=[
"mp",
"parent",
"fstype",
"stickid",
"uuid",
"vendor",
"model",
"devStuff",
"free",
"capacity",
"owner"]
145 r+=prefix+
"%s = %s" %(prop, getattr(self,prop))
177 f1=
"/usr/share/scolasync/marques.py"
178 f2=os.path.expanduser(markFileName)
179 if os.path.exists(f2):
183 result=eval(open(f,
"r", encoding="utf-8").read())
194 if k
in self.visibleDirs.keys():
208 result=usbDisk2.uDisk2.headers(locale)
209 ownerProp=QApplication.translate(
"uDisk",
"owner",
None)
210 result.insert(1,ownerProp)
222 return QApplication.translate(
"Dialog",
"inconnu",
None)
232 propListe=usbDisk2.uDisk2.headers()
243 headers = staticmethod(headers)
258 if not db.knowsId(ud.stickid, ud.uuid, ud.tattoo()) :
261 prompt=QApplication.translate(
"Dialog",
"La cle {id}<br>n'est pas identifiee, donnez le nom du proprietaire",
None).format(id=ud.stickid)
262 title=QApplication.translate(
"Dialog",
"Entrer un nom",
None)
263 text,ok = QInputDialog.getText(
None, title, prompt)
264 db.writeStudent(ud.stickid, ud.uuid, ud.tattoo(), text)
265 o=db.readStudent(ud.stickid, ud.uuid, ud.tattoo())
278 for i
in range(length):
279 result+=random.choice(
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
300 def __init__(self, access="disk", diskClass=uDisk2, ownerDialog=False):
302 usbDisk2.Available.__init__(self, access, diskClass)
317 if __name__==
"__main__":
323 QMainWindow.__init__(self)
326 quitbutton = QPushButton(
'Examinez le terminal\nbranchez et débranchez des clés USB, puis\nQuittez', self)
327 quitbutton.clicked.connect(self.close)
328 self.setCentralWidget(quitbutton)
334 print([s.split(
"/")[-1]
for s
in machin.targets.keys()])
335 for t
in machin.targets:
336 machin.targets[t].owner=machin.targets[t].ownerByDb()
337 print (machin.targets[t].owner,
":", t)
338 machin.modified=
False
339 machin.addHook(
'object-added', print_targets_if_modif)
340 machin.addHook(
'object-removed', print_targets_if_modif)
342 app = QApplication(sys.argv)
345 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 ...