commit
1bf39339f8
|
@ -2,6 +2,7 @@
|
|||
'''
|
||||
Torrenter v2 plugin for XBMC/Kodi
|
||||
Copyright (C) 2012-2015 Vadim Skorba v1 - DiMartino v2
|
||||
https://forums.tvaddons.ag/addon-releases/29224-torrenter-v2.html
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -29,7 +30,7 @@ import xbmcgui
|
|||
import xbmcvfs
|
||||
import xbmcaddon
|
||||
import Localization
|
||||
from functions import localize_path, isSubtitle, is_writable, file_url
|
||||
from functions import file_encode, isSubtitle, DownloadDB, log, debug, is_writable, unquote, file_url
|
||||
|
||||
|
||||
import os
|
||||
|
@ -40,16 +41,10 @@ from contextlib import contextmanager, closing, nested
|
|||
|
||||
from functions import foldername, showMessage, clearStorage, WatchedHistoryDB, get_ids_video, log, debug, ensure_str
|
||||
|
||||
#if sys.modules["__main__"].__settings__.getSetting("torrent_player") == '2':
|
||||
from torrent2http import State, Engine, MediaType
|
||||
author = 'Anteo'
|
||||
__settings__ = xbmcaddon.Addon(id='script.module.torrent2http')
|
||||
__version__ = __settings__.getAddonInfo('version')
|
||||
#elif sys.modules["__main__"].__settings__.getSetting("torrent_player") == '3':
|
||||
# from pyrrent2http import State, Engine, MediaType
|
||||
# author = 'Inpos'
|
||||
# __settings__ = xbmcaddon.Addon(id='script.module.pyrrent2http')
|
||||
# __version__ = __settings__.getAddonInfo('version')
|
||||
|
||||
ROOT = sys.modules["__main__"].__root__
|
||||
RESOURCES_PATH = os.path.join(ROOT, 'resources')
|
||||
|
@ -165,7 +160,7 @@ class AnteoLoader:
|
|||
self.setup_engine()
|
||||
files = []
|
||||
filelist = []
|
||||
try:
|
||||
with closing(self.engine):
|
||||
self.engine.start()
|
||||
#media_types=[MediaType.VIDEO, MediaType.AUDIO, MediaType.SUBTITLES, MediaType.UNKNOWN]
|
||||
|
||||
|
@ -192,11 +187,6 @@ class AnteoLoader:
|
|||
stringdata = {"title": ensure_str(fs.name), "size": fs.size, "ind": fs.index,
|
||||
'offset': fs.offset}
|
||||
filelist.append(stringdata)
|
||||
except:
|
||||
import traceback
|
||||
log(traceback.format_exc())
|
||||
finally:
|
||||
self.engine.close()
|
||||
return filelist
|
||||
|
||||
def saveTorrent(self, torrentUrl):
|
||||
|
@ -255,7 +245,7 @@ class AnteoLoader:
|
|||
self.torrentFile = torrent.torrentFile
|
||||
except:
|
||||
self.torrentFile = magnet
|
||||
log('['+author+'Loader][magnetToTorrent]: self.torrentFile '+str(self.torrentFile))
|
||||
log('[AnteoLoader][magnetToTorrent]: self.torrentFile '+str(self.torrentFile))
|
||||
|
||||
class AnteoPlayer(xbmc.Player):
|
||||
__plugin__ = sys.modules["__main__"].__plugin__
|
||||
|
@ -286,22 +276,23 @@ class AnteoPlayer(xbmc.Player):
|
|||
self.contentId = int(self.get("url"))
|
||||
if self.get("seek"):
|
||||
self.seek = int(self.get("seek"))
|
||||
#self.torrent = AnteoLoader(self.userStorageDirectory, self.torrentUrl, self.torrentFilesDirectory)
|
||||
self.init()
|
||||
self.setup_engine()
|
||||
try:
|
||||
with closing(self.engine):
|
||||
self.engine.start(self.contentId)
|
||||
self.setup_nextep()
|
||||
while True:
|
||||
if self.buffer():
|
||||
log('['+author+'Player]: ************************************* GOING LOOP')
|
||||
log('[AnteoPlayer]: ************************************* GOING LOOP')
|
||||
if self.setup_play():
|
||||
self.setup_subs()
|
||||
self.loop()
|
||||
WatchedHistoryDB().add(self.basename, foldername(self.getContentList()[self.contentId]['title']), self.watchedTime, self.totalTime, self.contentId, self.fullSize)
|
||||
else:
|
||||
log('['+author+'Player]: ************************************* break')
|
||||
log('[AnteoPlayer]: ************************************* break')
|
||||
break
|
||||
log('['+author+'Player]: ************************************* GO NEXT?')
|
||||
log('[AnteoPlayer]: ************************************* GO NEXT?')
|
||||
if self.next_dl and self.next_contentId != False and isinstance(self.next_contentId, int) and self.iterator == 100:
|
||||
if not self.next_play:
|
||||
xbmc.sleep(3000)
|
||||
|
@ -311,13 +302,9 @@ class AnteoPlayer(xbmc.Player):
|
|||
break
|
||||
self.contentId = self.next_contentId
|
||||
continue
|
||||
log('['+author+'Player]: ************************************* NO! break')
|
||||
|
||||
log('[AnteoPlayer]: ************************************* NO! break')
|
||||
break
|
||||
except:
|
||||
import traceback
|
||||
log(traceback.format_exc())
|
||||
finally:
|
||||
self.engine.close()
|
||||
|
||||
xbmc.Player().stop()
|
||||
|
||||
|
@ -386,7 +373,6 @@ class AnteoPlayer(xbmc.Player):
|
|||
dht_routers = ["router.bittorrent.com:6881","router.utorrent.com:6881"]
|
||||
user_agent = 'uTorrent/2200(24683)'
|
||||
self.pre_buffer_bytes = int(self.__settings__.getSetting("pre_buffer_bytes"))*1024*1024
|
||||
#showMessage('[%sPlayer v%s] ' % (author, __version__), self.localize('Please Wait'))
|
||||
|
||||
self.engine = Engine(uri=file_url(self.torrentUrl), download_path=self.userStorageDirectory,
|
||||
connections_limit=connections_limit, download_kbps=download_limit, upload_kbps=upload_limit,
|
||||
|
@ -470,7 +456,7 @@ class AnteoPlayer(xbmc.Player):
|
|||
else:
|
||||
self.next_dl = False
|
||||
self.next_play = self.__settings__.getSetting('next_play') == 'true'
|
||||
log('['+author+'Player]: next_dl - %s, next_play - %s, ids_video - %s' % (str(self.next_dl), str(self.next_play), str(self.ids_video)))
|
||||
log('[AnteoPlayer]: next_dl - %s, next_play - %s, ids_video - %s' % (str(self.next_dl), str(self.next_play), str(self.ids_video)))
|
||||
|
||||
def setup_play(self):
|
||||
file_status = self.engine.file_status(self.contentId)
|
||||
|
@ -489,7 +475,7 @@ class AnteoPlayer(xbmc.Player):
|
|||
self.next_contentId = int(self.ids_video[next_contentId_index])
|
||||
else:
|
||||
self.next_contentId = False
|
||||
log('['+author+'Player][setup_play]: next_contentId: '+str(self.next_contentId))
|
||||
log('[AnteoPlayer][setup_play]: next_contentId: '+str(self.next_contentId))
|
||||
try:
|
||||
seasonId = self.get("seasonId")
|
||||
self.episodeId = self.get("episodeId") if not self.episodeId else int(self.episodeId) + 1
|
||||
|
@ -509,7 +495,7 @@ class AnteoPlayer(xbmc.Player):
|
|||
'season': int(seasonId),
|
||||
'tvshowtitle': title})
|
||||
except:
|
||||
log('['+author+'Player]: Operation INFO failed!')
|
||||
log('[AnteoPlayer]: Operation INFO failed!')
|
||||
|
||||
thumbnail = self.get("thumbnail")
|
||||
if thumbnail:
|
||||
|
@ -525,12 +511,12 @@ class AnteoPlayer(xbmc.Player):
|
|||
xbmc.sleep(200)
|
||||
i += 1
|
||||
|
||||
log('['+author+'Player]: self.isPlaying() = %s, i = %d, xbmc.abortRequested - %s' % (str(self.isPlaying()), i, str(xbmc.abortRequested)))
|
||||
log('[AnteoPlayer]: self.isPlaying() = %s, i = %d, xbmc.abortRequested - %s' % (str(self.isPlaying()), i, str(xbmc.abortRequested)))
|
||||
if not self.isPlaying() or xbmc.abortRequested:
|
||||
return False
|
||||
|
||||
if self.seek > 0:
|
||||
log('['+author+'Player]: seekTime - '+str(self.seek))
|
||||
log('[AnteoPlayer]: seekTime - '+str(self.seek))
|
||||
self.seekTime(self.seek)
|
||||
return True
|
||||
|
||||
|
@ -544,7 +530,7 @@ class AnteoPlayer(xbmc.Player):
|
|||
if isSubtitle(filename, i.name):
|
||||
subs.append(i)
|
||||
if subs:
|
||||
log("["+author+"Player][setup_subs]: Detected subtitles: %s" % str(subs))
|
||||
log("[AnteoPlayer][setup_subs]: Detected subtitles: %s" % str(subs))
|
||||
for sub in subs:
|
||||
xbmc.Player().setSubtitles(sub.url)
|
||||
|
||||
|
@ -612,7 +598,7 @@ class AnteoPlayer(xbmc.Player):
|
|||
|
||||
def _get_status_lines(self, s, f):
|
||||
return [
|
||||
ensure_str(self.display_name),
|
||||
self.display_name,
|
||||
"%.2f%% %s" % (f.progress * 100, self.localize(STATE_STRS[s.state]).decode('utf-8')),
|
||||
"D:%.2f%s U:%.2f%s S:%d P:%d" % (s.download_rate, self.localize('kb/s').decode('utf-8'),
|
||||
s.upload_rate, self.localize('kb/s').decode('utf-8'),
|
||||
|
@ -637,7 +623,7 @@ class AnteoPlayer(xbmc.Player):
|
|||
if not status:
|
||||
status = self.engine.status()
|
||||
self.engine.check_torrent_error(status)
|
||||
log('['+author+'Player]: %.2f%% complete (down: %.1f kb/s up: %.1f kb/s peers: %d) %s' % \
|
||||
log('[AnteoPlayer]: %.2f%% complete (down: %.1f kb/s up: %.1f kb/s peers: %d) %s' % \
|
||||
(status.progress * 100, status.download_rate,
|
||||
status.upload_rate, status.num_peers, status.state_str))
|
||||
|
||||
|
|
10
Core.py
10
Core.py
|
@ -1101,8 +1101,8 @@ class Core:
|
|||
|
||||
def drawItem(self, title, action, link='', image='', isFolder=True, contextMenu=None, replaceMenu=True, action2='', fileSize=0L,
|
||||
info={}):
|
||||
listitem = xbmcgui.ListItem(title, iconImage=image, thumbnailImage=image)
|
||||
#log('[drawItem]:'+str((title, action, image, isFolder, contextMenu, replaceMenu, action2, info)))
|
||||
listitem = xbmcgui.ListItem(title, iconImage=image, thumbnailImage=image)
|
||||
if not info: info = {"Title": title, "plot": title}
|
||||
if not isFolder and fileSize:
|
||||
info['size'] = fileSize
|
||||
|
@ -1430,9 +1430,11 @@ class Core:
|
|||
request.add_header('Accept-encoding', 'gzip')
|
||||
result = urllib2.urlopen(request)
|
||||
if result.info().get('Content-Encoding') == 'gzip':
|
||||
from StringIO import StringIO
|
||||
import zlib
|
||||
buf = StringIO(result.read())
|
||||
f = gzip.GzipFile(fileobj=buf)
|
||||
content = f.read()
|
||||
decomp = zlib.decompressobj(16 + zlib.MAX_WBITS)
|
||||
content = decomp.decompress(buf.getvalue())
|
||||
else:
|
||||
content = result.read()
|
||||
localFile = xbmcvfs.File(torrentFile, "wb+")
|
||||
|
@ -1459,7 +1461,7 @@ class Core:
|
|||
def openTorrent(self, params={}):
|
||||
get = params.get
|
||||
tdir = unquote(get("url2"),None)
|
||||
thumbnail = unquote(get("thumbnail"), False) and True or 'DefaultVideo.png'
|
||||
thumbnail = unquote(get("thumbnail"), False) or 'DefaultVideo.png'
|
||||
save_folder = unquote(get("save_folder"),'')
|
||||
url = urllib.unquote_plus(get("url"))
|
||||
|
||||
|
|
|
@ -522,7 +522,10 @@ class InposPlayer(xbmc.Player):
|
|||
while not xbmc.abortRequested and self.isPlaying():
|
||||
self.print_fulldebug()
|
||||
status = self.engine.status()
|
||||
file_status = self.engine.file_status(self.contentId)
|
||||
if not self.next_dling:
|
||||
file_status = self.engine.file_status(self.contentId)
|
||||
else:
|
||||
file_status = self.engine.file_status(self.next_contentId)
|
||||
self.watchedTime = xbmc.Player().getTime()
|
||||
self.totalTime = xbmc.Player().getTotalTime()
|
||||
if self.iterator == 100 and debug_counter < 100:
|
||||
|
|
Loading…
Reference in New Issue