Ejemplo n.º 1
0
def xhr_rtorrentdl():

    # url qualification
    def url_qualify(url_proto, url_host, url_port):

        url_host_part = str(url_host).partition('/')

        # validate host (kinda... just make sure it's not empty)
        if url_host_part[0]:

            # validate port
            if not url_port:

                # for http and https we can assume default service ports
                if url_proto == 'http':
                    url_port = 80
                elif url_proto == 'https':
                    url_port = 443
                else:
                    raise Exception('port must be defined for protocol %s' %
                                    (url_proto))

            else:
                try:
                    url_port = int(url_port)
                except ValueError:
                    raise Exception('port must be a numeric value')

            url_qualified = '%s://%s:%i%s%s' % (url_proto, url_host_part[0],
                                                url_port, url_host_part[1],
                                                url_host_part[2])

            return url_qualified

        else:
            raise Exception('invalid host: %s' % (url_host[0]))

    # initialize empty list, which will be later populated with listing
    # of active torrents
    torrentlist = list()

    # connection flag
    connected = False

    # global rates
    down_rate = 0.0
    up_rate = 0.0

    rtorrent_url = None
    rtorrent_user = None
    rtorrent_password = None

    try:
        if get_setting_value('rtorrent_host') is not None:
            rtorrent_url = url_qualify(get_setting_value('rtorrent_proto'),
                                       get_setting_value('rtorrent_host'),
                                       get_setting_value('rtorrent_port'))
    except Exception as ex:
        log_error(ex)

    try:
        if rtorrent_url:
            # user/password login is not implemented for scgi
            if get_setting_value('rtorrent_proto') != 'scgi':
                rtorrent_user = get_setting_value('rtorrent_user')
                rtorrent_password = get_setting_value('rtorrent_password')

            client = RTorrent(rtorrent_url, rtorrent_user, rtorrent_password,
                              True)

            if client is not None:
                connected = True
                down_rate = client.get_down_rate()
                up_rate = client.get_up_rate()

            # loop through each job and add all torrents to torrentlist()
            for torrent in client.get_torrents():
                # friendly status and time left
                time_left = -1
                if torrent.complete:
                    if torrent.active:
                        status = 'seeding'
                    else:
                        status = 'done'
                else:
                    if torrent.active:
                        if torrent.down_rate > 0:
                            time_left = str(
                                timedelta(seconds=round(
                                    float(torrent.left_bytes) /
                                    torrent.down_rate)))
                            status = 'leeching'
                        else:
                            status = 'waiting'
                    else:
                        status = 'inactive'

                # get torrent file list
                # FIXME takes too much time and is not used anyway for now
                #torrent_filelist = []
                #for file_current in torrent.get_files():
                #	torrent_filelist.append(os.path.join(torrent.directory,file_current.path))

                # what's left?
                progress = float(100.0 / torrent.size_bytes *
                                 (torrent.size_bytes - torrent.left_bytes))

                # append to list
                torrentlist.append({
                    'name': torrent.name,
                    'info_hash': torrent.info_hash,
                    'status': status,
                    'state': torrent.state,
                    'progress': progress,
                    'time_left': time_left,
                    'down_rate': torrent.down_rate,
                    'up_rate': torrent.up_rate,
                    'ratio': torrent.ratio
                    #	'folder': torrent.directory,
                    #	'files': '|'.join(torrent_filelist)
                })

            # no torrents -> empty list
            if not torrentlist.__len__():
                torrentlist = None

    except Exception as ex:
        log_error(ex)
        torrentlist = None

    return render_template(
        'rtorrentdl.html',
        connected=connected,
        torrentlist_scroll=get_setting_value('rtorrent_list_scroll'),
        torrentlist=torrentlist,
        down_rate=down_rate,
        up_rate=up_rate)
Ejemplo n.º 2
0
def xhr_rtorrentdl():

	# url qualification
	def url_qualify(url_proto,url_host,url_port):

		url_host_part=str(url_host).partition('/')

		# validate host (kinda... just make sure it's not empty)
		if url_host_part[0]:

			# validate port
			if not url_port:

				# for http and https we can assume default service ports
				if url_proto == 'http':
					url_port = 80
				elif url_proto == 'https':
					url_port = 443
				else:
					raise Exception('port must be defined for protocol %s' % (url_proto))

			else:
				try:
					url_port=int(url_port)
				except ValueError:
					raise Exception('port must be a numeric value')

			url_qualified='%s://%s:%i%s%s' % (
				url_proto,
				url_host_part[0],
				url_port,
				url_host_part[1],
				url_host_part[2]
			)

			return url_qualified

		else:
			raise Exception('invalid host: %s' % (url_host[0]))

	# initialize empty list, which will be later populated with listing
	# of active torrents
	torrentlist = list()

	# connection flag
	connected = False

	# global rates
	down_rate = 0.0
	up_rate = 0.0

	rtorrent_url = None
	rtorrent_user = None
	rtorrent_password = None

	try:
		if get_setting_value('rtorrent_host') is not None:
			rtorrent_url = url_qualify(
				get_setting_value('rtorrent_proto'),
				get_setting_value('rtorrent_host'),
				get_setting_value('rtorrent_port')
			)
	except Exception as ex:
		log_error(ex)

	try:
		if rtorrent_url:
			# user/password login is not implemented for scgi
			if get_setting_value('rtorrent_proto') != 'scgi':
				rtorrent_user = get_setting_value('rtorrent_user')
				rtorrent_password = get_setting_value('rtorrent_password')

			client = RTorrent(rtorrent_url,rtorrent_user,rtorrent_password,True)

			if client is not None:
				connected = True
				down_rate = client.get_down_rate()
				up_rate = client.get_up_rate()

			# loop through each job and add all torrents to torrentlist()
			for torrent in client.get_torrents():
				# friendly status and time left
				time_left = -1
				if torrent.complete:
					if torrent.active:
						status = 'seeding'
					else:
						status = 'done'
				else:
					if torrent.active:
						if torrent.down_rate > 0:
							time_left = str(timedelta(seconds = round(float(torrent.left_bytes) / torrent.down_rate)))
							status = 'leeching'
						else:
							status = 'waiting'
					else:
						status = 'inactive'

				# get torrent file list
				# FIXME takes too much time and is not used anyway for now
				#torrent_filelist = []
				#for file_current in torrent.get_files():
				#	torrent_filelist.append(os.path.join(torrent.directory,file_current.path))

				# what's left?
				progress = float(100.0 / torrent.size_bytes * (torrent.size_bytes-torrent.left_bytes))

				# append to list
				torrentlist.append({
					'name': torrent.name,
					'info_hash': torrent.info_hash,
					'status': status,
					'state': torrent.state,
					'progress': progress,
					'time_left': time_left,
					'down_rate': torrent.down_rate,
					'up_rate': torrent.up_rate,
					'ratio': torrent.ratio
				#	'folder': torrent.directory,
				#	'files': '|'.join(torrent_filelist)
				})

			# no torrents -> empty list
			if not torrentlist.__len__():
				torrentlist = None

	except Exception as ex:
		log_error(ex)
		torrentlist = None

	return render_template('rtorrentdl.html',
		connected = connected,
		torrentlist_scroll = get_setting_value('rtorrent_list_scroll'),
		torrentlist = torrentlist,
		down_rate = down_rate,
		up_rate = up_rate
	)