1. # -*- coding: windows-1252 -*-
  2.  
  3. # sys.stdout.encoding
  4. # --> 'cp850'
  5. # sys.getdefaultencoding()
  6. # --> 'latin1'
  7. # locale.getdefaultlocale()
  8. # --> 'cp1252'
  9. # Apparemment sous win 2000 --> cp1252
  10. # -----------------------------------------------------------
  11. # Voir http://pythonfacile.free.fr/python/unicode.html
  12. # --> Terminal de sortie --> La fenetre DOS
  13. # Encodage de la fenetre DOS --> 'cp850'
  14. # -----------------------------------------------------------
  15.  
  16. import os
  17. import sys
  18. import time
  19. import glob
  20. import _winreg
  21. import subprocess
  22. import locale
  23. import string
  24.  
  25. import tarfile
  26.  
  27. from PyQt4.QtCore import *
  28. from PyQt4.QtGui import *
  29.  
  30. "#! "+sys.executable
  31.  
  32. class DetectionRegistreApplis(object):
  33.  
  34. def find(self,dir,liste,remaining) :
  35. try:
  36. xdir = dir
  37. if len(xdir) == 2:
  38. xdir += os.sep
  39. files = os.listdir(xdir)
  40. except:
  41. return remaining
  42.  
  43. # recherche des fichiers
  44. for item in files :
  45. if os.path.isdir(dir + os.sep + item) :
  46. continue
  47. for litem in liste :
  48. if litem[2] :
  49. continue
  50. if( litem[0] == item ):
  51. litem[1].append(dir)
  52. litem[2] = True
  53. remaining -= 1
  54. if remaining == 0 :
  55. return 0
  56. # exploration des sous-repertoires
  57. for item in files:
  58. dir2 = dir + os.sep + item
  59. if os.path.isfile(dir2) :
  60. continue
  61. remaining = self.find(dir2,liste,remaining)
  62. if remaining == 0 :
  63. return 0
  64. return remaining
  65.  
  66. def __init__(self):
  67. self.det1=self.detect_1()
  68.  
  69. def detect_1(self):
  70. "Detection des applications utiles pour le bon fonctionnement d'EKD sous Windows Xp"
  71.  
  72. # Temps debut pour calcul
  73. self.debut=time.clock()
  74.  
  75. separ = "# ----------------------------------------------------- #"
  76.  
  77. ### Decompactage de l'archibve .tar.gz ################################
  78.  
  79. # Chemin du script courant en eliminant dependances_windows
  80. chemin = os.getcwd()
  81.  
  82. # Recherche du chemin de l'archive .tar.gz
  83. recherche_tar_gz = glob.glob(chemin + os.sep + 'windows' + os.sep + '*.tar.gz')
  84. recherche_tar_gz = recherche_tar_gz[0]
  85.  
  86. # Repertoire ds lequel sera decompacte l'archive
  87. rep_tar_gz = os.path.dirname(recherche_tar_gz)
  88.  
  89. # Repertoire Mplayer
  90. rep_mplayer = recherche_tar_gz.split('.')
  91. rep_mplayer = rep_mplayer[0]
  92.  
  93. if os.path.exists(recherche_tar_gz) is True:
  94. # Si le repertoire Mplayer existe deja pas la peine de decompacter l'archive
  95. if os.path.exists(rep_mplayer) is False:
  96. # Décompactage de trunk.tar.gz dans le répertoire courant
  97. t = tarfile.open(name=recherche_tar_gz, mode='r', fileobj=None, bufsize=10240)
  98. t.extractall(path=rep_tar_gz, members=None)
  99. print
  100. print separ
  101. print 'Extracting the archive: %s --> OK' % os.path.basename(recherche_tar_gz)
  102. print separ
  103. print
  104. else: pass
  105.  
  106. # Elimination de l'archive elle-meme
  107. # N'est pas elimine pour l'instant
  108. #os.remove(recherche_tar_gz)
  109.  
  110. ############################################################
  111.  
  112. #print
  113.  
  114. # Si il manque un fichier dans le repertoire 'windows\chemin_install_applis'
  115. # dans l'arborescence d'EKD (il doit y en avoir 11):
  116. # --> install_de_mencoder.txt
  117. # --> install_de_ffmpeg.txt
  118. # --> install_de_pil.txt
  119. # --> install_de_numpy.txt
  120. # --> install_de_pyqt4.txt
  121. # --> install_de_imagemagick.txt
  122. # --> install_de_ffmpeg2theora.txt
  123. # --> install_de_lame.txt
  124. # --> install_de_mjpegtools.txt
  125. # --> install_de_sox.txt
  126. # --> install_de_gmic.txt
  127. # ... les fichiers presents sont elimines ... et tout recommencera
  128. # a fonctionner normalement quand l'utilisateur aura bien installe
  129. # toutes les dependances
  130.  
  131. # Si il y a 11 elements, il faut mettre --> < 11
  132. if len(glob.glob('windows/chemin_install_applis/*')) < 11:
  133. for fichManq in glob.glob('windows/chemin_install_applis/*'):
  134. os.remove(fichManq)
  135.  
  136. listeAppliWin = [('install_de_mencoder.txt','mplayer,mencoder'),('install_de_ffmpeg.txt','ffmpeg'),('install_de_pil.txt','pil'),('install_de_numpy.txt','numpy'),('install_de_pyqt4.txt','pyqt4'),('install_de_imagemagick.txt','imagemagick'),('install_de_ffmpeg2theora.txt','ffmpeg2theora'),('install_de_lame.txt','lame'),('install_de_mjpegtools.txt','mjpegtools'),('install_de_sox.txt','sox'),('install_de_gmic.txt','gmic')]
  137.  
  138. ### Boucle de parcours de la listeAppliWin pour vérifier la présence des fichiers de config et qu'ils sont non nul.
  139. z=0
  140. for depWin in listeAppliWin :
  141. if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\'+depWin[0]):
  142. if os.path.getsize(os.getcwd()+'\\windows\\chemin_install_applis\\'+depWin[0])>0:
  143. ouv1=open(os.getcwd()+'\\windows\\chemin_install_applis\\'+depWin[0], 'r')
  144. self.repOuSeTrouveMplayMenc=ouv1.read()
  145. print '* '+depWin[1]+' --> OK'
  146. ouv1.close()
  147. else:
  148. os.remove(os.getcwd()+'\\windows\\chemin_install_applis\\'+depWin[0])
  149. z=1
  150. else :
  151. z=1
  152.  
  153. if z==1 :
  154. print separ
  155. print "Windows dependencies config files not found, create them"
  156. print separ
  157. print
  158. # Liste pour
  159. liste_dd=[]
  160.  
  161. # Version de la locale (fr pour langue francaise)
  162. self.langue = locale.getdefaultlocale()[0][:2]
  163.  
  164. if self.langue == 'fr': # francais
  165. fr_1 = " ETAPE 1 (prise d'informations pour l'installation)"
  166. fr_2 = " Sur quel(s) lecteur(s) avez-vous installe les"
  167. fr_3 = " dependances ? (Mplayer, Mencoder, Ffmpeg, Ffmpeg2theora,"
  168. fr_4 = " Mjpegtools, ImageMagick, PIL, PyQt4, Numpy, Lame, Sox"
  169. fr_5 = " et G'Mic). Tapez c si vos dependances sont uniquement dans"
  170. fr_6 = " C:. Tapez clz (par exemple) si vos dependances sont"
  171. fr_7 = " installees a la fois dans C:, L: et Z:."
  172. fr_8 = " Info: les lecteurs disponibles pour l'installation des"
  173. fr_9 = " dependances vont de C: a Z: (A: et B: ne sont pas"
  174. fr_10 = " disponibles), si malgre tout vous choisissez A: et/ou"
  175. fr_11 = " B:, c'est a dire les touches a et/ou b du clavier"
  176. fr_12 = " l'installation d'EKD echouera."
  177. fr_13 = " Indiquez maintenant dans quel(s) lecteur(s) (disque(s))"
  178. # Solution (encodage --> raw_input) trouvee ici:
  179. # http://mail.python.org/pipermail/python-bugs-list/2005-August/029826.html
  180. fr_14 = " vous avez installe les dependances: "
  181. fr_15 = " L'INSTALLATION D'EKD A ECHOUE !"
  182. fr_16 = " ETAPE 2 (confirmation des renseignements)"
  183. fr_17 = " Vous avez indique que les dependances sont a rechercher"
  184. fr_18 = " dans le(s) lecteur(s): "
  185. fr_19 = " Confirmez-vous ce choix ?, tapez la lettre o sur votre"
  186. fr_20 = " clavier pour oui (ou bien y pour yes). Si vous tapez sur"
  187. fr_21 = " n (pour non/no), l'installation d'EKD echouera: "
  188. fr_22 = " L'INSTALLATION D'EKD A ECHOUE !"
  189. fr_23 = " ETAPE 3 (trouver dependances, variables d'environnement)"
  190. fr_24 = " Recherche des dependances pour qu'EKD puisse fonctionner"
  191. fr_25 = " Vous devez attendre ... cela peut etre long !!! (parfois"
  192. fr_26 = " plusieurs minutes). Les applications recherchees sont:"
  193. fr_27 = " Au premier demarrage, cette procedure permet de savoir"
  194. fr_28 = " si vous avez installe ce qu'il faut pour le bon"
  195. fr_29 = " fonctionnement d'EKD."
  196. fr_30 = " Attention a la fin de cette procedure de recherche votre"
  197. fr_31 = " ordinateur va redemarrer pour que toutes les donnees"
  198. fr_32 = " recoltees soient reactualisees."
  199. err_appli_manq = u"Erreur: application manquante !"
  200. fr_33 = u"<p><font color='blue'><b>Mplayer et Mencoder ne sont pas installées !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé Mplayer-Mencoder.</b></p><p><b>Pour en savoir plus sur l'installation de Mplayer-Mencoder, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a>.</b></p>"
  201. fr_34 = '--> Mplayer, Mencoder ne sont pas installes !.'
  202. fr_35 = u"<p><font color='blue'><b>Ffmpeg n'est pas installé !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé Ffmpeg.</b></p><p><b>Pour en savoir plus sur l'installation de Ffmpeg, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a>.</b></p>"
  203. fr_36 = "--> ffmpeg n'est pas installe !."
  204. fr_37 = u"<p><font color='blue'><b>Ffmpeg2theora n'est pas installé !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé Ffmpeg2theora.</b></p><p><b>Pour en savoir plus sur l'installation de Ffmpeg2theora, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a>.</b></p>"
  205. fr_38 = "--> ffmpeg2theora n'est pas installe !."
  206. fr_39 = u"<p><font color='blue'><b>ImageMagick n'est pas installé !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé ImageMagick.</b></p><p><b>Pour en savoir plus sur l'installation d'ImageMagick, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a>.</b></p>"
  207. fr_40 = "--> ImageMagick n'est pas installe !."
  208. fr_41 = u"<p><font color='blue'><b>Python Imaging Library n'est pas installé !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé Python Imaging Library.</b></p><p><b>Pour en savoir plus sur l'installation de Python Imaging Library, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a>.</b></p>"
  209. fr_42 = "--> Python Imaging Library n'est pas installe !."
  210. fr_43 = u"<p><font color='blue'><b>PyQt4 n'est pas installé !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé PyQt4.</b></p><p><b>Pour en savoir plus sur l'installation de PyQt4, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a> .</b></p>"
  211. fr_44 = "--> PyQt4 n'est pas installe !."
  212. fr_45 = u"<p><font color='blue'><b>Numpy n'est pas installé !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé Numpy.</b></p><p><b>Pour en savoir plus sur l'installation de Numpy, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a> .</b></p>"
  213. fr_46 = "--> Numpy n'est pas installe !."
  214. fr_47 = u"<p><font color='blue'><b>Lame n'est pas installé !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé Lame.</b></p><p><b>Pour en savoir plus sur l'installation de Lame, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a> .</b></p>"
  215. fr_48 = "--> Lame n'est pas installe !."
  216. fr_49 = u"<p><font color='blue'><b>Mjpegtools n'est pas installé !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé Mjpegtools.</b></p><p><b>Pour en savoir plus sur l'installation de Mjpegtools, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a> .</b></p>"
  217. fr_50 = "--> Mjpegtools n'est pas installe !."
  218. fr_51 = u"<p><font color='blue'><b>Sox n'est pas installé !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé Sox.</b></p><p><b>Pour en savoir plus sur l'installation de Sox, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a> .</b></p>"
  219. fr_52 = "--> Sox n'est pas installe !."
  220. fr_53 = u"<p><font color='blue'><b>G'MIC n'est pas installé !.</b></font></p><p><b>EKD ne démarrera pas tant que vous n'aurez pas installé Sox.</b></p><p><b>Pour en savoir plus sur l'installation de G'MIC, <a href='http://ekd.tuxfamily.org/index.php/Telechargement/Windows/Installation'>cliquez ici</a> .</b></p>"
  221. fr_54 = "--> G'MIC n'est pas installe !."
  222.  
  223. else: #pass # autre que fr
  224. fr_1 = " STEP 1 (information taken for installation)"
  225. fr_2 = " What (s) drive (s) did you install the dependencies ?"
  226. fr_3 = " (Mplayer, Mencoder, Ffmpeg, Ffmpeg2theora, ImageMagick,"
  227. fr_4 = " ImageMagick, PIL, PyQt4, Numpy, Lame, Sox and G'Mic)."
  228. fr_5 = " Type c if your dependencies are only in C:."
  229. fr_6 = " Type clz (for example) if your dependencies are"
  230. fr_7 = " installed in both C:, L: and Z:."
  231. fr_8 = " Information: available drives for the installation of"
  232. fr_9 = " dependencies ranging from C: to Z: (A: and B: not"
  233. fr_10 = " available), though, if you choose A: and/or "
  234. fr_11 = " B:, ie the keys a and/or b on your keyboard,"
  235. fr_12 = " installing EKD fail."
  236. fr_13 = " Enter now for what drive(s) (Disk(s))"
  237. fr_14 = " you've installed the dependencies: "
  238. fr_15 = " INSTALLATION OF EKD FAILED !"
  239. fr_16 = " STEP 2 (confirmation of information)"
  240. fr_17 = " You said that dependencies are to be found"
  241. fr_18 = " in the drive(s): "
  242. fr_19 = " Can you confirm this choice ?, type the letter o on your"
  243. fr_20 = " keyboard for yes in french (or y for yes in English). If"
  244. fr_21 = " you type n (for no / no), the installation of EKD fail: "
  245. fr_22 = " INSTALLATION OF EKD FAILED !"
  246. fr_23 = " STEP 3 (find dependencies, environment variables)"
  247. fr_24 = " Search for dependencies for EKD"
  248. fr_25 = " You must wait ... this may be long !!! (sometimes"
  249. fr_26 = " several minutes). Applications are sought:"
  250. fr_27 = " At first startup, this procedure allows to know"
  251. fr_28 = " if you have what it takes for the proper"
  252. fr_29 = " functioning of EKD."
  253. fr_30 = " Attention at the end of this search procedure"
  254. fr_31 = " will restart your computer so that all data"
  255. fr_32 = " collected are updated."
  256. err_appli_manq = u"Error: application missing !"
  257.  
  258. print separ
  259. print fr_1
  260. print separ
  261. print fr_2
  262. print fr_3
  263. print fr_4
  264. print fr_5
  265. print fr_6
  266. print fr_7
  267. print fr_8
  268. print fr_9
  269. print fr_10
  270. print fr_11
  271. print fr_12
  272. print
  273. print fr_13
  274. choix_1=raw_input(fr_14)
  275. # Si l'utilisateur entre C (au clavier) au lieu de c, il n' y aura pas d'erreur
  276. if (choix_1==choix_1 or choix_1 not in string.lowercase(choix_1) or choix_1 not in string.uppercase(choix_1)) and choix_1 not in ['a', 'b', 'ab', 'ba', 'AB', 'BA']:
  277. for ty in range(len(choix_1)):
  278. # Le(s) lecteur(s) est/sont systematiquement mis sous cette
  279. # forme dans la liste: lecteur en majuscule: (par exemple C:)
  280. liste_dd.append(string.upper(choix_1[ty])+':')
  281. else:
  282. print
  283. print fr_15
  284. print
  285. sys.exit()
  286. # Eliminer les doublons s'ils existent
  287. # Peu importe avec la méthode find et l'instruction peu changer l'ordre !
  288. #liste_dd=list(set(liste_dd))
  289. # Classement
  290. #liste_dd.sort() -> retiré pour laisser le choix à l'utilisateur de l'ordre de recherche des disques
  291. # Si l'utilisateur met des espaces au debut, entre ou a la fin
  292. # des lettres (pour indiquer les lecteurs d'install des dependances),
  293. # ceux-ci sont enleves (j'evite une erreur au moment de la recherche
  294. # des dependances).
  295. for errEsp in liste_dd:
  296. if errEsp in [' :', ':', ': ', ' : ']:
  297. liste_dd.remove(errEsp)
  298. print
  299. print separ
  300. print fr_16
  301. print separ
  302. print fr_17
  303. print fr_18, ' '.join(liste_dd)
  304. print fr_19
  305. print fr_20
  306. choix_2=raw_input(fr_21)
  307. # Gestion des majuscules et/ou mots entiers pour la confirmation
  308. if choix_2 in ['o', 'oui', 'O', 'OUI', 'Oui', 'y', 'yes', 'Y', 'YES', 'Yes']:
  309. pass
  310. else:
  311. print
  312. print fr_22
  313. print
  314. sys.exit()
  315. print separ
  316. print fr_23
  317. print separ
  318. print fr_24
  319. print fr_25
  320. print fr_26
  321. print " * Mplayer, Mencoder"
  322. print " * Ffmpeg"
  323. print " * Ffmpeg2theora"
  324. print " * ImageMagick"
  325. print " * Python Imaging Library"
  326. print " * PyQt4"
  327. print " * Numpy"
  328. print " * Lame"
  329. print " * Mjpegtools"
  330. print " * Sox"
  331. print " * G'MIC"
  332. print separ
  333. print fr_27
  334. print fr_28
  335. print fr_29
  336. print separ
  337. print fr_30
  338. print fr_31
  339. print fr_32
  340. print separ
  341.  
  342. # Si le repertoire n'existe pas, il est cree
  343. if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis') is False:
  344. os.mkdir(os.getcwd()+os.sep+'windows'+os.sep+'chemin_install_applis')
  345.  
  346. mencoder='mencoder.exe'
  347. ffmpeg='ffmpeg.exe'
  348. ffmpeg2theora='ffmpeg2theora.exe'
  349. imgMagick='composite.exe'
  350. pil='Image.py'
  351. pyQt4='QtGui.pyd'
  352. numpy='fftpack.py'
  353. lame='lame.exe'
  354. mjpegtools_ppmtoy4m='ppmtoy4m.exe'
  355. sox='sox.exe'
  356. gmic='gmic.exe'
  357. # site.py pour pour changer l'encodage
  358. sitePointPy='site.py'
  359.  
  360. listeChemMencoder=[]
  361. listeChemFfmpeg=[]
  362. listeChemFfmpeg2Theora=[]
  363. listeChemImageMagick=[]
  364. listeChemPil=[]
  365. listeChemPyQt4=[]
  366. listeChemNumpy=[]
  367. listeChemLame=[]
  368. listeChemMjpegtools=[]
  369. listeChemSox=[]
  370. listeChemGMIC=[]
  371. # Pour fichier site.py
  372. listeChemSitePointPy=[]
  373.  
  374. # Liste des applications a chercher
  375. liste_applis=[[mencoder,listeChemMencoder,0], [ffmpeg,listeChemFfmpeg,0], [ffmpeg2theora,listeChemFfmpeg2Theora,0], [imgMagick,listeChemImageMagick,0], [pil,listeChemPil,0], [pyQt4,listeChemPyQt4,0], [numpy,listeChemNumpy,0], [lame,listeChemLame,0], [mjpegtools_ppmtoy4m,listeChemMjpegtools,0], [sox,listeChemSox,0], [gmic,listeChemGMIC,0], [sitePointPy,listeChemSitePointPy,0]]
  376.  
  377. # Temps debut pour calcul
  378. debut=time.clock()
  379.  
  380.  
  381. remaining = len(liste_applis)
  382. for parc_dd in liste_dd:
  383. remaining = self.find(parc_dd, liste_applis, remaining)
  384. if remaining == 0:
  385. break
  386.  
  387. ## for parc_app in liste_applis:
  388. ## if not parc_app[2] :
  389. ## # Recherche des chemins avec utilisation de subprocess
  390. ## # Syntaxe MS-DOS: dir C:\ /s /b | find "mencoder.exe" | more
  391. ## # (si recherche pour mencoder.exe dans C:)
  392. ## p=subprocess.Popen('''dir '''+parc_dd+'''\\ /s /b | find "'''+parc_app[0]+'''" | more''', stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
  393. ## out=p.stdout.readlines()
  394. ## p.wait()
  395. ## for applis in out:
  396. ## ### Modifié le 04/10/2009 pour rendre la vérificaton générique
  397. ## # MENCODER -> parc_app[0] = exe à chercher et parc_app[1] = liste à compléter
  398. ## if os.path.basename(applis)==parc_app[0]+'\r\n':
  399. ## print os.path.dirname(applis)
  400. ## parc_app[1].append(os.path.dirname(applis))
  401. ## parc_app[2]=True # Indique qu'un chemin a déjà été trouvé pour cette dépendance.
  402. ## break # Permet d'arrêter la recherche dès que l'on a trouvé un chemin
  403.  
  404. # Si la recherche echoue (logs non installes par exemple)
  405. # elle donne lieu a une liste vide (ne contenant rien -->
  406. # meme par a une chaine vide). Le code ci-dessous insere
  407. # (dans ce cas) une chaine vide dans les listes concernees
  408. if listeChemMencoder==[]:
  409. listeChemMencoder.append('')
  410. if listeChemFfmpeg==[]:
  411. listeChemFfmpeg.append('')
  412. if listeChemFfmpeg2Theora==[]:
  413. listeChemFfmpeg2Theora.append('')
  414. if listeChemImageMagick==[]:
  415. listeChemImageMagick.append('')
  416. if listeChemPil==[]:
  417. listeChemPil.append('')
  418. if listeChemPyQt4==[]:
  419. listeChemPyQt4.append('')
  420. if listeChemNumpy==[]:
  421. listeChemNumpy.append('')
  422. if listeChemLame==[]:
  423. listeChemLame.append('')
  424. if listeChemMjpegtools==[]:
  425. listeChemMjpegtools.append('')
  426. if listeChemSox==[]:
  427. listeChemSox.append('')
  428. if listeChemGMIC==[]:
  429. listeChemGMIC.append('')
  430.  
  431. # Repertoire ou se trouve mplayer.exe et mencoder.exe
  432. self.repOuSeTrouveMplayMenc=listeChemMencoder[0]
  433. if self.repOuSeTrouveMplayMenc=='':
  434.  
  435. mesErrMplayMenc=QMessageBox()
  436. mesErrMplayMenc.setText(_(fr_33))
  437. mesErrMplayMenc.setWindowTitle(_(err_appli_manq))
  438. mesErrMplayMenc.setIcon(QMessageBox.Critical)
  439. mesErrMplayMenc.exec_()
  440.  
  441. print fr_34
  442. sys.exit(0)
  443.  
  444. # Repertoire ou se trouve ffmpeg.exe
  445. self.repOuSeTrouveFfmpeg=listeChemFfmpeg[0]
  446. if self.repOuSeTrouveFfmpeg=='':
  447.  
  448. mesErrFfmpeg=QMessageBox()
  449. mesErrFfmpeg.setText(_(fr_35))
  450. mesErrFfmpeg.setWindowTitle(_(err_appli_manq))
  451. mesErrFfmpeg.setIcon(QMessageBox.Critical)
  452. mesErrFfmpeg.exec_()
  453.  
  454. print fr_36
  455. sys.exit(0)
  456.  
  457. # Repertoire ou se trouve ffmeg2theora
  458. self.repOuSeTrouveFfmpeg2theora=listeChemFfmpeg2Theora[0]
  459. if self.repOuSeTrouveFfmpeg2theora=='':
  460.  
  461. mesErrFfmpeg2theora=QMessageBox()
  462. mesErrFfmpeg2theora.setText(_(fr_37))
  463. mesErrFfmpeg2theora.setWindowTitle(_(err_appli_manq))
  464. mesErrFfmpeg2theora.setIcon(QMessageBox.Critical)
  465. mesErrFfmpeg2theora.exec_()
  466.  
  467. print fr_38
  468. sys.exit(0)
  469.  
  470. # Repertoire ou se trouve composite.exe d'ImageMagick
  471. self.repOuSeTrouveImgMagick=listeChemImageMagick[0]
  472. if self.repOuSeTrouveImgMagick=='':
  473.  
  474. mesErrImgMagick=QMessageBox()
  475. mesErrImgMagick.setText(_(fr_39))
  476. mesErrImgMagick.setWindowTitle(_(err_appli_manq))
  477. mesErrImgMagick.setIcon(QMessageBox.Critical)
  478. mesErrImgMagick.exec_()
  479.  
  480. print fr_40
  481. sys.exit(0)
  482.  
  483. # Repertoire ou se trouve Python Imaging Library
  484. self.repOuSeTrouvePIL=listeChemPil[0]
  485. if self.repOuSeTrouvePIL=='':
  486.  
  487. mesErrPil=QMessageBox()
  488. mesErrPil.setText(_(fr_41))
  489. mesErrPil.setWindowTitle(_(err_appli_manq))
  490. mesErrPil.setIcon(QMessageBox.Critical)
  491. mesErrPil.exec_()
  492.  
  493. print fr_42
  494. sys.exit(0)
  495.  
  496. # Repertoire ou se trouve PyQt4
  497. self.repOuSeTrouvePyQt4=listeChemPyQt4[0]
  498. if self.repOuSeTrouvePyQt4=='':
  499.  
  500. mesErrPyQt4=QMessageBox()
  501. mesErrPyQt4.setText(_(fr_43))
  502. mesErrPyQt4.setWindowTitle(_(err_appli_manq))
  503. mesErrPyQt4.setIcon(QMessageBox.Critical)
  504. mesErrPyQt4.exec_()
  505.  
  506. print fr_44
  507. sys.exit(0)
  508.  
  509. # Repertoire ou se trouve Numpy
  510. self.repOuSeTrouveNumpy=listeChemNumpy[0]
  511. if self.repOuSeTrouveNumpy=='':
  512.  
  513. mesErrNumpy=QMessageBox()
  514. mesErrNumpy.setText(_(fr_45))
  515. mesErrNumpy.setWindowTitle(_(err_appli_manq))
  516. mesErrNumpy.setIcon(QMessageBox.Critical)
  517. mesErrNumpy.exec_()
  518.  
  519. print fr_46
  520. sys.exit(0)
  521.  
  522. # Repertoire ou se trouve Lame
  523. self.repOuSeTrouveLame=listeChemLame[0]
  524. if self.repOuSeTrouveLame=='':
  525.  
  526. mesErrLame=QMessageBox()
  527. mesErrLame.setText(_(fr_47))
  528. mesErrLame.setWindowTitle(_(err_appli_manq))
  529. mesErrLame.setIcon(QMessageBox.Critical)
  530. mesErrLame.exec_()
  531.  
  532. print fr_48
  533. sys.exit(0)
  534.  
  535. # Repertoire ou se trouve Mjpegtools
  536. self.repOuSeTrouveMjpegtools=listeChemMjpegtools[0]
  537. if self.repOuSeTrouveMjpegtools=='':
  538.  
  539. mesErrMjpegtools=QMessageBox()
  540. mesErrMjpegtools.setText(_(fr_49))
  541. mesErrMjpegtools.setWindowTitle(_(err_appli_manq))
  542. mesErrMjpegtools.setIcon(QMessageBox.Critical)
  543. mesErrMjpegtools.exec_()
  544.  
  545. print fr_50
  546. sys.exit(0)
  547.  
  548. # Repertoire ou se trouve Sox
  549. self.repOuSeTrouveSox=listeChemSox[0]
  550. if self.repOuSeTrouveSox=='':
  551.  
  552. mesErrSox=QMessageBox()
  553. mesErrSox.setText(_(fr_51))
  554. mesErrSox.setWindowTitle(_(err_appli_manq))
  555. mesErrSox.setIcon(QMessageBox.Critical)
  556. mesErrSox.exec_()
  557.  
  558. print fr_52
  559. sys.exit(0)
  560.  
  561. # Repertoire ou se trouve G'MIC
  562. self.repOuSeTrouveGMIC=listeChemGMIC[0]
  563. if self.repOuSeTrouveSox=='':
  564.  
  565. mesErrGMIC=QMessageBox()
  566. mesErrGMIC.setText(_(fr_53))
  567. mesErrGMIC.setWindowTitle(_(err_appli_manq))
  568. mesErrGMIC.setIcon(QMessageBox.Critical)
  569. mesErrGMIC.exec_()
  570.  
  571. print fr_54
  572. sys.exit(0)
  573.  
  574.  
  575. # Repertoire ou se trouve site.py (pour chang encodage ascii vers latin1)
  576. self.repOuSeTrouveSitePointPy=listeChemSitePointPy[0]
  577.  
  578.  
  579. if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_mencoder.txt') is False:
  580. # Ecriture dans le fichier 'install_de_mencoder.txt' du chemin d'installation de mencoder (et mplayer)
  581. chemInstallMencoder=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_mencoder.txt', 'w')
  582. chemInstallMencoder.write(self.repOuSeTrouveMplayMenc)
  583. chemInstallMencoder.close()
  584. if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_ffmpeg.txt') is False:
  585. # Ecriture dans le fichier 'install_de_ffmpeg.txt' du chemin d'installation de ffmpeg
  586. chemInstallFfmpeg=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_ffmpeg.txt', 'w')
  587. chemInstallFfmpeg.write(self.repOuSeTrouveFfmpeg)
  588. chemInstallFfmpeg.close()
  589. if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_imagemagick.txt') is False:
  590. # Ecriture dans le fichier 'install_de_imagemagick.txt' du chemin d'installation d'ImageMagick
  591. chemInstallImgMagick=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_imagemagick.txt', 'w')
  592. chemInstallImgMagick.write(self.repOuSeTrouveImgMagick)
  593. chemInstallImgMagick.close()
  594. if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_pil.txt') is False:
  595. # Ecriture dans le fichier 'install_de_pil.txt' du chemin d'installation de Python Imaging Library
  596. chemInstallPIL=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_pil.txt', 'w')
  597. chemInstallPIL.write(self.repOuSeTrouvePIL)
  598. chemInstallPIL.close()
  599. if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_pyqt4.txt') is False:
  600. # Ecriture dans le fichier 'install_de_pyqt4.txt' du chemin de PyQt4
  601. chemInstallPyQt4=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_pyqt4.txt', 'w')
  602. chemInstallPyQt4.write(self.repOuSeTrouvePyQt4)
  603. chemInstallPyQt4.close()
  604. if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_numpy.txt') is False:
  605. # Ecriture dans le fichier 'install_de_numpy.txt' du chemin d'installation de Numpy
  606. chemInstallNumpy=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_numpy.txt', 'w')
  607. chemInstallNumpy.write(self.repOuSeTrouveNumpy)
  608. chemInstallNumpy.close()
  609. if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_ffmpeg2theora.txt') is False:
  610. # Ecriture dans le fichier 'install_de_ffmpeg2theora.txt' du chemin de ffmpeg2theora
  611. chemInstallFfmpeg2theora=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_ffmpeg2theora.txt', 'w')
  612. chemInstallFfmpeg2theora.write(self.repOuSeTrouveFfmpeg2theora)
  613. chemInstallFfmpeg2theora.close()
  614. if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_lame.txt') is False:
  615. # Ecriture dans le fichier 'install_de_lame.txt' du chemin de Lame
  616. chemInstallLame=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_lame.txt', 'w')
  617. chemInstallLame.write(self.repOuSeTrouveLame)
  618. chemInstallLame.close()
  619. if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_mjpegtools.txt') is False:
  620. # Ecriture dans le fichier 'install_de_mjpegtools.txt' du chemin de Mjpegtools
  621. chemInstallMjpegtools=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_mjpegtools.txt', 'w')
  622. chemInstallMjpegtools.write(self.repOuSeTrouveMjpegtools)
  623. chemInstallMjpegtools.close()
  624. if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_sox.txt') is False:
  625. # Ecriture dans le fichier 'install_de_sox.txt' du chemin de Sox
  626. chemInstallSox=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_sox.txt', 'w')
  627. chemInstallSox.write(self.repOuSeTrouveSox)
  628. chemInstallSox.close()
  629. if os.path.exists(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_gmic.txt') is False:
  630. # Ecriture dans le fichier 'install_de_gmic.txt' du chemin de G'MIC
  631. chemInstallGMIC=open(os.getcwd()+'\\windows\\chemin_install_applis\\install_de_gmic.txt', 'w')
  632. chemInstallGMIC.write(self.repOuSeTrouveGMIC)
  633. chemInstallGMIC.close()
  634.  
  635.  
  636. # Si le francais est detecte pour un pays (ou region) a langage francophone ...
  637. # C'est la seule solution qui fonctionne sous windows (pour la gestion des
  638. # chemins et/ou fichiers) avec accents. Il s'agit de modifier la variable
  639. # encoding dans le fichier site.py situee dans le repertoire (si Python 2.6
  640. # par exemple): ...\Python26\Lib. L'encodage par defaut ascii est transforme
  641. # en latin1
  642. loc=locale.getdefaultlocale()[0]
  643. if loc in ['fr_BE', 'fr_CA', 'fr_CH', 'fr_FR', 'fr_LU']:
  644. ouvSPPy=open(self.repOuSeTrouveSitePointPy+"\\site.py", "rb")
  645. enrSPPy=open("windows\\chemin_install_applis\\site.py", "wb")
  646. # Ecriture dans le fichier
  647. lEncSite=ouvSPPy.readlines()
  648. for parcEncSite in lEncSite:
  649. if parcEncSite==' encoding = "ascii" # Default value set by _PyUnicode_Init()\r\n':
  650. parcEncSite=' encoding = "latin1" # Default value set by _PyUnicode_Init()\r\n'
  651. enrSPPy.write(parcEncSite)
  652. else:
  653. enrSPPy.write(parcEncSite)
  654.  
  655. # Fermeture
  656. ouvSPPy.close()
  657. enrSPPy.close()
  658. # Copie/ecrasement de site.py contenu dans ...\Python26\Lib (si Python 2.6)
  659. import shutil
  660. shutil.copy(os.getcwd()+'\\windows\\chemin_install_applis\\site.py', self.repOuSeTrouveSitePointPy+'\\site.py')
  661. # Elimination du fichier (car cela pourrait poser des problemes lors
  662. # d'une nouvelle recherche de site.py)
  663. os.remove(os.getcwd()+'\\windows\\chemin_install_applis\\site.py')
  664.  
  665. self.fin=time.clock()
  666. tempsDeTraitement=self.fin-self.debut
  667. print
  668. print 'Temps de la recherche: %d secondes' % tempsDeTraitement
  669. print
  670.  
  671. # Application des variables d'environnement et redemarrage
  672. # de la machine uniquement si les dependances n'avaient
  673. # prealablement pas ete installees.
  674. self.variableEnv()
  675.  
  676.  
  677. def variableEnv(self):
  678. "Application des variables d'environnement dans la base de registre. Adapte de l'excellent script: http://mail.python.org/pipermail/python-list/2003-December/240977.html"
  679.  
  680. self.item='path'
  681. self.keypath = r'SYSTEM\CurrentControlSet\Control\Session Manager\Environment'
  682.  
  683. if self.repOuSeTrouveMplayMenc!='' and self.repOuSeTrouveFfmpeg!='' and self.repOuSeTrouveFfmpeg2theora!='' and self.repOuSeTrouveLame!='' and self.repOuSeTrouveMjpegtools!='' and self.repOuSeTrouveSox!='' and self.repOuSeTrouveGMIC!='':
  684. # Boucle pour inserer les chemins (detectes ds la fonction detect_1) dans la base de registre
  685. for self.newPart in [self.repOuSeTrouveMplayMenc, self.repOuSeTrouveFfmpeg, self.repOuSeTrouveFfmpeg2theora, self.repOuSeTrouveLame, self.repOuSeTrouveMjpegtools, self.repOuSeTrouveSox, self.repOuSeTrouveGMIC]:
  686.  
  687. self.key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, self.keypath)
  688. self.path, self.dataType = _winreg.QueryValueEx(self.key, self.item)
  689. self.key.Close()
  690. #print
  691. #print "Le chemin actuel des variables d'environnement est:\n\n%s" % self.path
  692. #print
  693.  
  694. if self.path.lower().find(self.newPart.lower()) == -1:
  695. #print
  696. #print 'Il ne contient pas', self.newPart
  697. #print
  698. self.path = os.pathsep.join(self.path.split(os.pathsep) + [self.newPart])
  699. self.key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, self.keypath, 0, _winreg.KEY_SET_VALUE)
  700. _winreg.SetValueEx(self.key, self.item, 0, self.dataType, self.path)
  701. self.key.Close()
  702. #print
  703. #print "Nouveau chemin des variables d'environnement:\n\n%s" % self.path
  704. #print
  705. #else:
  706. #print "Rien a faire -- tout est deja ok pour les variables d'environnement"
  707.  
  708. # Redemarrage de la machine afin que les variables d'environnement soient actives
  709. os.system('shutdown -r -t 0 -f')
  710.