+ # au delà de ce tag : aucune chance de trouver un titre
+ break
+ return title
+
+ @staticmethod
+ def getSongMetadata(file) :
+ metadata = {}
+ metadata['title'] = FileOpenDialog.getSongTitle(file).encode('iso-8859-1')
+ metadata['mtime'] = str(os.stat(file).st_mtime)
+ metadata['file'] = os.path.basename(file)
+ song = musicXml2Song(file)
+ metadata['distinctNotes'] = len(song.distinctNotes)
+
+ histo = song.intervalsHistogram
+ coeffInter = reduce(lambda a, b : a + b,
+ [abs(k) * v for k, v in histo.items()])
+
+ totInter = reduce(lambda a, b: a+b, histo.values())
+ totInter = totInter - histo.get(0, 0)
+ difficulty = int(round(float(coeffInter) / totInter, 0))
+ metadata['difficulty'] = difficulty
+
+ return metadata
+
+ def getUpdatedIndex(self, xmlFiles) :
+ indexTxtPath = os.path.join(self.curdir, INDEX_TXT)
+ index = []
+
+ if not os.path.exists(indexTxtPath) :
+ musicXmlFound = False
+ tmp = tempfile.TemporaryFile(mode='r+')
+ for file in xmlFiles :
+ try :
+ metadata = FileOpenDialog.getSongMetadata(file)
+ musicXmlFound = True
+ except ValueError, e :
+ print e
+ if e.args and e.args[0] == 'not a musicxml file' :
+ continue
+
+ line = '%(file)s\t%(mtime)s\t%(title)s\t%(distinctNotes)d\t%(difficulty)d\n' % metadata
+ index.append(line)
+ tmp.write(line)
+
+ if musicXmlFound :
+ tmp.seek(0)
+ indexFile = open(indexTxtPath, 'w')
+ indexFile.write(tmp.read())
+ indexFile.close()
+ tmp.close()
+ else :
+ indexedFiles = {}
+ indexTxt = open(indexTxtPath, 'r')
+
+ # check if index is up to date, and update entries if so.
+ for l in filter(None, indexTxt.readlines()) :
+ parts = l.split('\t')
+ fileBaseName, modificationTime = parts[0], parts[1]
+ filePath = os.path.join(self.curdir, fileBaseName)
+
+ if not os.path.exists(filePath) :
+ continue
+
+ indexedFiles[fileBaseName] = l
+ currentMtime = str(os.stat(filePath).st_mtime)
+
+ # check modification time missmatch
+ if currentMtime != modificationTime :
+ try :
+ metadata = FileOpenDialog.getSongMetadata(filePath)
+ musicXmlFound = True
+ except ValueError, e :
+ print e
+ if e.args and e.args[0] == 'not a musicxml file' :
+ continue
+
+ metadata = FileOpenDialog.getSongMetadata(filePath)
+ line = '%(file)s\t%(mtime)s\t%(title)s\t%(distinctNotes)d\t%(difficulty)d\n' % metadata
+ indexedFiles[fileBaseName] = line
+
+ # check for new files.
+ for file in xmlFiles :
+ fileBaseName = os.path.basename(file)
+ if not indexedFiles.has_key(fileBaseName) :
+ try :
+ metadata = FileOpenDialog.getSongMetadata(filePath)
+ musicXmlFound = True
+ except ValueError, e :
+ print e
+ if e.args and e.args[0] == 'not a musicxml file' :
+ continue
+
+ metadata = FileOpenDialog.getSongMetadata(file)
+ line = '%(file)s\t%(mtime)s\t%(title)s\t%(distinctNotes)d\t%(difficulty)d\n' % metadata
+ indexedFiles[fileBaseName] = line
+
+ # ok, the index is up to date !
+
+ index = indexedFiles.values()
+ index.sort()
+
+
+ return index
+
\ No newline at end of file