Exemple #1
0
class File(RTorrentRpcObject):
    _attrs = {
        'path': 'f.get_path',
        'size': 'f.get_size_bytes',
        'size_chunks': 'f.get_size_chunks',
        'completed_chunks': 'f.get_completed_chunks',
    }

    percent = property(fget=lambda self: filter_bytes(
        float(self.completed_chunks) / self.size_chunks, "%"))

    def rpc_call(self, method):
        return self.server.__getattr__(method)(self.torrent.key, self.index)

    def __init__(self, torrent, index, *args, **kwargs):
        self.torrent = torrent
        self.index = index
        RTorrentRpcObject.__init__(self, *args, **kwargs)

    def update(self):
        self.pop_cache('completed_chunks')

    def get_completed(self, units="KiB"):
        value = int(self.completed_chunks) * float(self.torrent.chunk_size)
        if value > self.size and self.size > 0:
            value = self.size
        return filter_bytes(value, units)

    def get_size(self, units="KiB"):
        if self.size < 0:
            return "~" + filter_bytes(
                self.size_chunks * float(self.torrent.chunk_size), units)
        return filter_bytes(self.size, units)
Exemple #2
0
class Torrent(RTorrentRpcObject):
    _attrs = {
        'hash': 'd.get_hash',
        'name': 'd.get_name',
        'chunk_size': 'd.get_chunk_size',
        'size_chunks': 'd.get_size_chunks',
        'completed_chunks': 'd.get_completed_chunks',
        'down_rate': 'd.get_down_rate',
        'up_rate': 'd.get_up_rate',
        'open': 'd.is_open',
        'active': 'd.is_active',
    }

    def rpc_call(self, method):
        return self.server.__getattr__(method)(self.key)

    def __init__(self, key, *args, **kwargs):
        RTorrentRpcObject.__init__(self, *args, **kwargs)
        self.key = key
        #self.update()
        self.files = FileList(self, self.server)

    def update(self):
        self.pop_cache('completed_chunks')
        self.pop_cache('open')
        self.pop_cache('active')
        self.pop_cache('down_rate')
        self.pop_cache('up_rate')

    size = property(fget=lambda self: self.size_chunks * self.chunk_size)
    size_MiB = property(fget=lambda self: filter_bytes(self.size, "MiB"))
    percent = property(fget=lambda self: filter_bytes(
        float(self.completed_chunks) / self.size_chunks, "%"))
    # required due to overflow in d.completed_bytes with torrents > 2GiB
    completed_MiB = property(fget=lambda self: filter_bytes(
        self.completed_chunks * self.chunk_size, "MiB"))

    def all_files(self):
        self.files.get('path', 'size', 'completed_chunks')
        return self.files

    def __unicode__(self):
        return self.name
Exemple #3
0
    def __getattr__(self, name):
        unit = None
        if len(name) > 4 and name[-1] == 'B':
            if name[-3:] in ('_GB', '_MB', '_KB'):
                unit = name[-2:]
                name = name[:-3]
            elif name[-4:] in ('_GiB', '_MiB', '_KiB'):
                unit = name[-3:]
                name = name[:-4]
        
        if self._attrs.has_key(name):
            rpc_attr = self._attrs[name]
            if self._cache.has_key(rpc_attr):
                value = self._cache[rpc_attr]
            else:
                value = self.rpc_call(rpc_attr)
                self.set_cache(rpc_attr, value)

            if unit is not None:
                return filter_bytes(value, unit)
            else:
                return value
        else:
            return self.__dict__[name]
Exemple #4
0
 def get_size(self, units="KiB"):
     if self.size < 0:
         return "~" + filter_bytes(
             self.size_chunks * float(self.torrent.chunk_size), units)
     return filter_bytes(self.size, units)
Exemple #5
0
 def get_completed(self, units="KiB"):
     value = int(self.completed_chunks) * float(self.torrent.chunk_size)
     if value > self.size and self.size > 0:
         value = self.size
     return filter_bytes(value, units)
Exemple #6
0
 def get_size(self, units="KiB"):
     if self.size < 0:
         return "~" + filter_bytes(self.size_chunks * float(self.torrent.chunk_size), units)
     return filter_bytes(self.size, units)
Exemple #7
0
 def get_completed(self, units="KiB"):
     value = int(self.completed_chunks) * float(self.torrent.chunk_size)
     if value > self.size and self.size > 0:
         value = self.size
     return filter_bytes(value, units)