def _GetLastTorrentData(self):
        while True:
            time.sleep(0.2)

            # Get torrent files list, filtered by video file type only
            files = self.engine.list()  #(media_types=[MediaType.VIDEO])
            # If torrent metadata is not loaded yet then continue
            if files is None:
                self.debug('files is None')
                continue

            self.debug('files len: ' + str(len(files)))

            # Torrent has no video files
            if not files or len(files) > 0:
                break

        info_hash = ''
        playable_items = []
        for item in files:
            if TorrentPlayer.is_playable(item.name):
                playable_items.append({
                    'index': item.index,
                    'name': item.name,
                    'size': long(item.size)
                })

        return {'info_hash': info_hash, 'files': playable_items}
Exemple #2
0
def parse_torrent2(data):
    try:
        decoded = bdecode(data)
    except BTFailure:
        debug("Can't decode torrent data (invalid torrent link? %s)" % link)
        return

    files = []
    info = decoded['info']
    if 'files' in info:
        for i, f in enumerate(info['files']):
            # debug(i)
            # debug(f)
            fname = f['path'][-1]
            if TorrentPlayer.is_playable(fname):
                s = re.search('s(\d+)e(\d+)[\._ ]', fname, re.I)
                if s:
                    season = int(s.group(1))
                    episode = int(s.group(2))
                    debug(
                        'Filename: %s\t index: %d\t season: %d\t episode: %d' %
                        (fname, i, season, episode))
                    files.append({
                        'index': i,
                        'name': fname,
                        'season': season,
                        'episode': episode
                    })

    if len(files) == 0:
        return

    files.sort(key=lambda x: (x['season'], x['episode']))
    return files
Exemple #3
0
	def GetLastTorrentData(self):
		'''
		return { 'info_hash': str, 'files': [ {'index': int, 'name': str, 'size': long} ] }
		'''
		
		'''
		As soon as check_torrent_added returns true, get added torrent data using get_last_added_torrent method. 
		This method will return a JSON object containing a torrent`s info-hash as a string (technically, this is 
		an info-hash hexdigest) and the list of files in the torrent along with their sizes. The info-hash is used 
		as a primary torrent ID for other JSON-RPC methods.
		'''
		files = []
		r = requests.post('http://localhost:8668/json-rpc', json={"method": "get_last_added_torrent"})
		torr_data = r.json()['result']
		debug(torr_data)
		
		self.__info_hash = torr_data['info_hash']
		
		
		index = 0
		for file in torr_data['files']:
			if TorrentPlayer.is_playable(file[0]):
				files.append({'index': index, 'name': file[0], 'size': long(file[1])})
			index = index + 1
			
		return { 'info_hash': self.__info_hash, 'files': files }
def parse_torrent2(data):
	try:
		decoded = bdecode(data)
	except BTFailure:
		debug("Can't decode torrent data (invalid torrent link? %s)" % link)
		return

	files = []
	info = decoded['info']
	if 'files' in info:
		for i, f in enumerate(info['files']):
			# debug(i)
			# debug(f)
			fname = f['path'][-1]
			if TorrentPlayer.is_playable(fname):
				s = re.search('s(\d+)e(\d+)[\._ ]', fname, re.I)
				if s:
					season = int(s.group(1))
					episode = int(s.group(2))
					debug('Filename: %s\t index: %d\t season: %d\t episode: %d' % (fname, i, season, episode))
					files.append({'index': i, 'name': fname, 'season': season, 'episode': episode})

	if len(files) == 0:
		return

	files.sort(key=lambda x: (x['season'], x['episode']))
	return files
def parse_torrent(data, season=None):
	from bencode import BTFailure
	try:
		from bencode import bdecode
		decoded = bdecode(data)
	except BTFailure:
		debug("Can't decode torrent data (invalid torrent link?)")
		return []

	info = decoded['info']
	dirlists = dict()
	#filelists = dict()
	if 'files' in info:
		for i, f in enumerate(info['files']):
			# debug(i)
			# debug(f)
			fname = f['path'][-1]
			try:
				parent = f['path'][-2]
			except:
				parent = '.'

			if parent not in dirlists:
				dirlists[parent] = dict()
				#filelists[parent] = dict()

			debug(fname)
			if TorrentPlayer.is_playable(fname):
				dirlists[parent][fname] = i  # .decode('utf-8').encode('cp1251')
				#filelists[parent].append({fname: i})

	files = []
	for dirname in dirlists:
		dirlist = dirlists[dirname]
		save_season = season
		for item in get_list(dirlist):
			if item is not None:
				if season is None:
					if item[0] is None:
						season = seasonfromname(info['name'])
						if season is None:
							try:
								season = seasonfromname(dirname)
							except:
								pass
					else:
						season = item[0]

				name = item[2]
				index = item[3]

				files.append({'name': name, 'season': season, 'episode': item[1], 'index': index})
				season = save_season
			else:
				# TODO
				continue

	files.sort(key=lambda x: (x['season'], x['episode']))
	return files
Exemple #6
0
def parse_torrent(data, season=None):
    from bencode import BTFailure
    try:
        from bencode import bdecode
        decoded = bdecode(data)
    except BTFailure:
        debug("Can't decode torrent data (invalid torrent link?)")
        return []

    info = decoded['info']
    dirlists = dict()
    #filelists = dict()
    if 'files' in info:
        for i, f in enumerate(info['files']):
            # debug(i)
            # debug(f)
            fname = f['path'][-1]
            try:
                parent = f['path'][-2]
            except:
                parent = '.'

            if parent not in dirlists:
                dirlists[parent] = dict()
                #filelists[parent] = dict()

            debug(fname)
            if TorrentPlayer.is_playable(fname):
                dirlists[parent][
                    fname] = i  # .decode('utf-8').encode('cp1251')
                #filelists[parent].append({fname: i})

    files = []
    for dirname in dirlists:
        dirlist = dirlists[dirname]
        save_season = season
        for item in get_list(dirlist):
            if item is not None:
                if season is None:
                    if item[0] is None:
                        season = seasonfromname(info['name'])
                        if season is None:
                            try:
                                season = seasonfromname(dirname)
                            except:
                                pass
                    else:
                        season = item[0]

                name = item[2]
                index = item[3]

                files.append({
                    'name': name,
                    'season': season,
                    'episode': item[1],
                    'index': index
                })
                season = save_season
            else:
                # TODO
                continue

    files.sort(key=lambda x: (x['season'], x['episode']))
    return files