示例#1
0
 def copy_files(self, objects):
     mimeData = QtCore.QMimeData()
     mimeData.setUrls([
         QtCore.QUrl.fromLocalFile(f.filename)
         for f in iter_files_from_objects(objects)
     ])
     self.clipboard().setMimeData(mimeData)
示例#2
0
文件: tagger.py 项目: rdswift/picard
    def extract_and_submit_acousticbrainz_features(self, objs):
        """Extract AcousticBrainz features and submit them."""
        if not self.ab_extractor.available():
            return

        for file in iter_files_from_objects(objs):
            # Skip unmatched files
            if not file.can_extract():
                log.warning(
                    "AcousticBrainz requires a MusicBrainz Recording ID, but file does not have it: %s"
                    % file.filename)
            # And process matched ones
            else:
                file.set_pending()

                # Check if file was either already processed or sent to the AcousticBrainz server
                if file.acousticbrainz_features_file:
                    results = (file.acousticbrainz_features_file, 0,
                               "Writing results")
                    ab_extractor_callback(self, file, results, False)
                elif file.acousticbrainz_is_duplicate:
                    results = (None, 0, "Duplicate")
                    ab_extractor_callback(self, file, results, False)
                else:
                    file.acousticbrainz_error = False
                    # Launch the acousticbrainz on a separate process
                    log.debug("Extracting AcousticBrainz features from %s" %
                              file.filename)
                    ab_feature_extraction(
                        self, file.metadata["musicbrainz_recordingid"],
                        file.filename,
                        partial(ab_extractor_callback, self, file))
示例#3
0
 def analyze(self, objs):
     """Analyze the file(s)."""
     if not self.use_acoustid:
         return
     for file in iter_files_from_objects(objs):
         if file.can_analyze():
             file.set_pending()
             self._acoustid.analyze(file, partial(file._lookup_finished, File.LOOKUP_ACOUSTID))
示例#4
0
 def play(self):
     """Play selected tracks with an internal player"""
     self._player.stop()
     playlist = QtMultimedia.QMediaPlaylist(self)
     playlist.setPlaybackMode(QtMultimedia.QMediaPlaylist.Sequential)
     playlist.addMedia([QtMultimedia.QMediaContent(QtCore.QUrl.fromLocalFile(file.filename))
                       for file in iter_files_from_objects(self._selected_objects)])
     self._player.setPlaylist(playlist)
     self._player.play()
示例#5
0
 def test_iterate_only_unique(self):
     f1 = Mock()
     f2 = Mock()
     f3 = Mock()
     obj1 = Mock()
     obj1.iterfiles = Mock(return_value=[f1, f2])
     obj2 = Mock()
     obj2.iterfiles = Mock(return_value=[f2, f3])
     result = iter_files_from_objects([obj1, obj2])
     self.assertTrue(isinstance(result, Iterator))
     self.assertEqual([f1, f2, f3], list(result))
示例#6
0
    def generate_fingerprints(self, objs):
        """Generate the fingerprints without matching the files."""
        if not self.use_acoustid:
            return

        def finished(file, result):
            file.clear_pending()

        for file in iter_files_from_objects(objs):
            file.set_pending()
            self._acoustid.fingerprint(file, partial(finished, file))
示例#7
0
文件: tagger.py 项目: rdswift/picard
 def cluster(self, objs, callback=None):
     """Group files with similar metadata to 'clusters'."""
     log.debug("Clustering %r", objs)
     files = iter_files_from_objects(objs)
     try:
         file = next(files)
     except StopIteration:
         files = self.unclustered_files.files
     else:
         files = itertools.chain([file], files)
     thread.run_task(partial(self._do_clustering, list(files)),
                     partial(self._clustering_finished, callback))
示例#8
0
 def save(self, objects):
     """Save the specified objects."""
     for file in iter_files_from_objects(objects, save=True):
         file.save()
示例#9
0
    def get_files_from_objects(self, objects, save=False):
        """Return list of unique files from list of albums, clusters, tracks or files.

        Note: Consider using picard.util.iter_files_from_objects instead, which returns an iterator.
        """
        return list(iter_files_from_objects(objects, save=save))