~guillaume86/exaile/context-dev

« back to all changes in this revision

Viewing changes to xl/collection.py

  • Committer: guillaume86
  • Date: 2009-08-17 19:17:05 UTC
  • mfrom: (2141.1.190 trunk)
  • Revision ID: guillaume86-20090817191705-f1rpy7lswlg6au1i
retrieve track coevr async

Show diffs side-by-side

added added

removed removed

Lines of Context:
774
774
        pass
775
775
 
776
776
 
 
777
class TransferQueue(object):
 
778
 
 
779
    def __init__(self, library):
 
780
        self.library = library
 
781
        self.queue = []
 
782
        self.current_pos = -1
 
783
        self.transferring = False
 
784
        self._stop = False
 
785
 
 
786
    def enqueue(self, tracks):
 
787
        self.queue.extend(tracks)
 
788
 
 
789
    def dequeue(self, tracks):
 
790
        if self.transferring:
 
791
            # FIXME: use a proper exception, and make this only error on
 
792
            # tracks that have already been transferred
 
793
            raise Exception, "Cannot remove tracks while transferring"
 
794
 
 
795
        for t in tracks:
 
796
            try:
 
797
                self.queue.remove(t)
 
798
            except ValueError:
 
799
                pass
 
800
 
 
801
    def transfer(self):
 
802
        """
 
803
            Tranfer the queued tracks to the library.
 
804
 
 
805
            This is NOT asynchronous
 
806
        """
 
807
        self.transferring = True
 
808
        self.current_pos += 1
 
809
        try:
 
810
            while self.current_pos + 1 < len(self.queue) and not self._stop:
 
811
                track = self.queue[self.current_pos]
 
812
                loc = track.get_loc()
 
813
                self.library.add(loc)
 
814
 
 
815
                # TODO: make this be based on filesize not count
 
816
                progress = self.current_pos / float(len(self.queue))
 
817
                event.log_event('track_transfer_progress', self, progress)
 
818
 
 
819
                self.current_pos += 1
 
820
        finally:
 
821
            self.transferring = False
 
822
            self.current_pos = -1
 
823
            self._stop = False
 
824
            event.log_event('track_transfer_progress', self, 1)
 
825
 
 
826
    def cancel(self):
 
827
        """
 
828
            Cancel the current transfer
 
829
        """
 
830
        # TODO: make this stop mid-file as well?
 
831
        self._stop = True
 
832
 
 
833
 
777
834
# vim: et sts=4 sw=4
778
835