pull/1/head
DiMartinoXBMC 2016-03-07 20:58:43 +03:00
parent 3de1a28a97
commit 90ea77513c
13 changed files with 574 additions and 554 deletions

File diff suppressed because it is too large Load Diff

View File

@ -39,8 +39,12 @@ from contextlib import contextmanager, closing, nested
from functions import foldername, showMessage, clearStorage, WatchedHistoryDB, get_ids_video, log, debug, ensure_str
from torrent2http import State, Engine, MediaType
#from pyrrent2http import State, Engine, MediaType
if sys.modules["__main__"].__settings__.getSetting("torrent_player") == '2':
from torrent2http import State, Engine, MediaType
author = 'Anteo'
elif sys.modules["__main__"].__settings__.getSetting("torrent_player") == '3':
from pyrrent2http import State, Engine, MediaType
author = 'Inpos'
ROOT = sys.modules["__main__"].__root__
RESOURCES_PATH = os.path.join(ROOT, 'resources')
@ -210,8 +214,8 @@ class AnteoLoader:
localFile.write(content)
localFile.close()
except Exception, e:
print 'Unable to save torrent file from "' + torrentUrl + '" to "' + torrentFile + '" in Torrent::saveTorrent' + '. Exception: ' + str(
e)
log('Unable to rename torrent file from %s to %s in AnteoLoader::saveTorrent. Exception: %s' %
(torrentUrl, torrentFile, str(e)))
return
else:
torrentFile = torrentUrl
@ -239,7 +243,7 @@ class AnteoLoader:
self.torrentFile = torrent.torrentFile
except:
self.torrentFile = magnet
log('[AnteoLoader][magnetToTorrent]: self.torrentFile '+str(self.torrentFile))
log('['+author+'Loader][magnetToTorrent]: self.torrentFile '+str(self.torrentFile))
class AnteoPlayer(xbmc.Player):
__plugin__ = sys.modules["__main__"].__plugin__
@ -278,15 +282,15 @@ class AnteoPlayer(xbmc.Player):
self.setup_nextep()
while True:
if self.buffer():
log('[AnteoPlayer]: ************************************* GOING LOOP')
log('['+author+'Player]: ************************************* 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('[AnteoPlayer]: ************************************* break')
log('['+author+'Player]: ************************************* break')
break
log('[AnteoPlayer]: ************************************* GO NEXT?')
log('['+author+'Player]: ************************************* 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)
@ -296,7 +300,7 @@ class AnteoPlayer(xbmc.Player):
break
self.contentId = self.next_contentId
continue
log('[AnteoPlayer]: ************************************* NO! break')
log('['+author+'Player]: ************************************* NO! break')
break
xbmc.Player().stop()
@ -455,7 +459,7 @@ class AnteoPlayer(xbmc.Player):
else:
self.next_dl = False
self.next_play = self.__settings__.getSetting('next_play') == 'true'
log('[AnteoPlayer]: next_dl - %s, next_play - %s, ids_video - %s' % (str(self.next_dl), str(self.next_play), str(self.ids_video)))
log('['+author+'Player]: 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)
@ -474,7 +478,7 @@ class AnteoPlayer(xbmc.Player):
self.next_contentId = int(self.ids_video[next_contentId_index])
else:
self.next_contentId = False
log('[AnteoPlayer][setup_play]: next_contentId: '+str(self.next_contentId))
log('['+author+'Player][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
@ -494,7 +498,7 @@ class AnteoPlayer(xbmc.Player):
'season': int(seasonId),
'tvshowtitle': title})
except:
log('[AnteoPlayer]: Operation INFO failed!')
log('['+author+'Player]: Operation INFO failed!')
thumbnail = self.get("thumbnail")
if thumbnail:
@ -510,12 +514,12 @@ class AnteoPlayer(xbmc.Player):
xbmc.sleep(200)
i += 1
log('[AnteoPlayer]: self.isPlaying() = %s, i = %d, xbmc.abortRequested - %s' % (str(self.isPlaying()), i, str(xbmc.abortRequested)))
log('['+author+'Player]: 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('[AnteoPlayer]: seekTime - '+str(self.seek))
log('['+author+'Player]: seekTime - '+str(self.seek))
self.seekTime(self.seek)
return True
@ -622,7 +626,7 @@ class AnteoPlayer(xbmc.Player):
if not status:
status = self.engine.status()
self.engine.check_torrent_error(status)
log('[AnteoPlayer]: %.2f%% complete (down: %.1f kb/s up: %.1f kb/s peers: %d) %s' % \
log('['+author+'Player]: %.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))

View File

@ -35,7 +35,7 @@ class Core:
userStorageDirectory = file_encode(__settings__.getSetting("storage"))
torrentFilesDirectory = 'torrents'
debug = __settings__.getSetting('debug') == 'true'
torrent_player=__settings__.getSetting("torrent_player")
torrent_player = __settings__.getSetting("torrent_player")
history_bool = __settings__.getSetting('history') == 'true'
open_option = int(__settings__.getSetting('open_option'))
language = {0: 'en', 1: 'ru', 2: 'uk', 3: 'he'}.get(int(__settings__.getSetting("language")))
@ -54,7 +54,7 @@ class Core:
def sectionMenu(self):
if self.__settings__.getSetting('plugin_name') != self.__plugin__:
#Every update run
first_run_242()
first_run_250()
self.__settings__.setSetting('plugin_name', self.__plugin__)
#check_network_advancedsettings()
check_download_dir()
@ -100,7 +100,7 @@ class Core:
image=self.ROOT + '/icons/torrentPlayer.png')
self.drawItem('< %s >' % self.localize('Search Control Window'), 'controlCenter',
image=self.ROOT + '/icons/settings.png', isFolder=False)
self.drawItem('< %s >' % self.localize('Magnet-link Player'), 'magentPlayer',#if self.torrent_player!='1':
self.drawItem('< %s >' % self.localize('Magnet-link Player'), 'magentPlayer',
image=self.ROOT + '/icons/magnet.png')
if self.debug:
self.drawItem('full_download', 'full_download', image=self.ROOT + '/icons/magnet.png')
@ -1413,7 +1413,7 @@ class Core:
self.Player = TorrentPlayer(userStorageDirectory=self.userStorageDirectory, torrentUrl=torrentUrl, params=params)
else:
log(self.__plugin__ + " Unexpected access to method playTorrent() without torrent content")
elif self.torrent_player == '2':
elif self.torrent_player == '2' or self.torrent_player == '3':
from Anteoloader import AnteoPlayer
if 0 != len(torrentUrl):
self.Player = AnteoPlayer(userStorageDirectory=self.userStorageDirectory, torrentUrl=torrentUrl, params=params)

View File

@ -49,7 +49,7 @@ class Torrent():
self.player = 'libtorrent'
elif player == '1':
self.player = 'acestream'
elif player == '2':
elif player == '2' or player == '3':
self.player = 'anteo'
def play_url_ind(self, ind, label, icon):

View File

@ -138,8 +138,8 @@ class Libtorrent:
try:
xbmcvfs.rename(torrentFile, newFile)
except Exception, e:
print 'Unable to rename torrent file from "' + torrentFile + '" to "' + newFile + '" in Torrent::renameTorrent' + '. Exception: ' + str(
e)
log('Unable to rename torrent file from %s to %s in Torrent::renameTorrent. Exception: %s' %
(torrentFile, newFile, str(e)))
return
self.torrentFile = newFile
if not self.torrentFileInfo:
@ -436,7 +436,7 @@ class Libtorrent:
else:
resume_file=self.resume_data_path()
if xbmcvfs.exists(resume_file):
log('loading resume data from file'+resume_file)
log('loading resume data from file '+resume_file)
try:
resumDataFile=xbmcvfs.File(resume_file,'rb')
self.save_resume_data=resumDataFile.read()
@ -444,7 +444,7 @@ class Libtorrent:
torrent_info['resume_data']=self.save_resume_data
except:
log(' Failed to load resume data from file'+ resume_file)
log('Failed to load resume data from file '+ resume_file)
self.torrentHandle = self.session.add_torrent(torrent_info)
self.torrentHandle.set_sequential_download(True)
self.torrentHandle.set_max_connections(60)
@ -454,7 +454,6 @@ class Libtorrent:
def stopSession(self):
for i in range(self.torrentFileInfo.num_pieces()):
self.torrentHandle.piece_priority(i, 0)
self.resume_data()
def continueSession(self, contentId=0, Offset=0, seeding=False, isMP4=False):
self.piece_length = self.torrentFileInfo.piece_length()
@ -462,10 +461,8 @@ class Libtorrent:
if not Offset:
Offset = selectedFileInfo['size'] / (1024 * 1024)
self.partOffset = (Offset * 1024 * 1024 / self.piece_length) + 1
# print 'partOffset ' + str(self.partOffset)+str(' ')
self.startPart = selectedFileInfo['offset'] / self.piece_length
self.endPart = int((selectedFileInfo['offset'] + selectedFileInfo['size']) / self.piece_length)
# print 'part ' + str(self.startPart)+ str(' ')+ str(self.endPart)
multiplier = self.partOffset / 5
log('continueSession: multiplier ' + str(multiplier))
for i in range(self.startPart, self.startPart + self.partOffset):
@ -473,13 +470,12 @@ class Libtorrent:
self.torrentHandle.piece_priority(i, 7)
if isMP4 and i % multiplier == 0:
self.torrentHandle.piece_priority(self.endPart - i / multiplier, 7)
# print str(i)
if multiplier >= i:
self.torrentHandle.piece_priority(self.endPart - i, 7)
# print str(i)
def checkThread(self):
if self.threadComplete == True:
self.resume_data()
log('checkThread KIIIIIIIIIIILLLLLLLLLLLLLLL')
try:
self.session.remove_torrent(self.torrentHandle)
@ -491,6 +487,7 @@ class Libtorrent:
self.session.stop_dht()
def resume_data(self):
wasPaused=self.session.is_paused()
self.session.pause()
self.save_resume_data=None
@ -504,7 +501,7 @@ class Libtorrent:
return
log('[save_resume_data]: waiting for alert...')
self.torrentHandle.save_resume_data()
self.torrentHandle.save_resume_data(self.lt.save_resume_flags_t.flush_disk_cache)
received=False
while not received:
self.session.wait_for_alert(1000)
@ -528,19 +525,20 @@ class Libtorrent:
log('[save_resume_data]: done.')
finally:
self.session.resume()
if not wasPaused:
self.session.resume()
def debug(self):
#try:
if 1==1:
# print str(self.getFilePath(0))
# log(str(self.getFilePath(0)))
s = self.torrentHandle.status()
#get_cache_status=self.session.get_cache_status()
#log('get_cache_status - %s/%s' % (str(get_cache_status.blocks_written), str(get_cache_status.blocks_read)))
# get_settings=self.torrentHandle.status
# print s.num_pieces
# log(s.num_pieces)
#priorities = self.torrentHandle.piece_priorities()
#print str(priorities)
#log(str(priorities))
state_str = ['queued', 'checking', 'downloading metadata',
'downloading', 'finished', 'seeding', 'allocating', 'checking fastresume']
@ -562,11 +560,11 @@ class Libtorrent:
#i = 0
# for t in s.pieces:
# if t: i=i+1
#print str(self.session.pop_alert())
# print str(s.pieces[self.startPart:self.endPart])
# print 'True pieces: %d' % i
# print s.current_tracker
# print str(s.pieces)
#log(str(self.session.pop_alert())
# log(str(s.pieces[self.startPart:self.endPart]))
# log('True pieces: %d' % i)
# log(s.current_tracker)
# log(str(s.pieces))
#except:
else:
log('debug error')

View File

@ -539,7 +539,7 @@ def localize(text):
'Please, restart Kodi now!':'Теперь перезагрузите Коди, пожалуйста!',
'./ (Root folder)':'./ (Корневой каталог)',
'Opening torrent file':'Открытие torrent-файла',
'New player to Torrenter v2 - Torrent2HTTP! It should be faster, stable and better with Android, also seeking works in it.':'В Torrenter новый плеер - Torrent2HTTP! Он стабильнее, быстрее и отлично ладит с Android, в нем работает перемотка.',
'New player to Torrenter v2 - pyrrent2http! Advantages of Torrent2HTTP but with python-libtorrent library instead of libtorrent-go!':'В Torrenter новый плеер - pyrrent2http! Преимущества Torrent2HTTP, но на библиотеке python-libtorrent вместо libtorrent-go!',
'Would you like to try it?':'Хотите его попробовать?',
'Torrent2HTTP enabled! Can be changed in Settings.':'Torrent2HTTP включен! Можно изменить в Настройках.',
'Seeking':'Перемотка',

View File

@ -259,7 +259,7 @@ class TorrentPlayer(xbmc.Player):
downloadedSize = self.torrent.torrentHandle.file_progress()[self.contentId]
status = self.torrent.torrentHandle.status()
iterator = int(status.progress * 100)
if status.state == 0 or (status.progress == 0 and status.num_pieces > 0):
if status.state in [0, 1] or (status.progress == 0 and status.num_pieces > 0):
iterator = int(status.num_pieces * 100 / num_pieces)
if iterator > 99: iterator = 99
progressBar.update(iterator, self.localize('Checking preloaded files...'), ' ', ' ')
@ -286,10 +286,8 @@ class TorrentPlayer(xbmc.Player):
self.torrent.checkThread()
return
xbmc.sleep(1000)
#self.torrent.torrentHandle.flush_cache()
#self.torrent.session.remove_torrent(self.torrent.torrentHandle)
self.torrent.resume_data()
self.torrent.session.remove_torrent(self.torrent.torrentHandle)
#self.torrent.session.remove_torrent(self.torrent.torrentHandle)
progressBar.update(0)
progressBar.close()
return True

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.torrenter" name="Torrenter" version="2.4.6" provider-name="DiMartino">
<addon id="plugin.video.torrenter" name="Torrenter" version="2.5.0" provider-name="DiMartino">
<requires>
<import addon="xbmc.python" version="2.1.0"/>
<import addon="script.module.libtorrent"/>

View File

@ -1,5 +1,9 @@
English changelog at http://bit.ly/1MfSVUP
[B]Version 2.5.0[/B]
[+] НОВЫЙ проигрыватель pyrrent2http от inpos! Аналог torrent2http написаный на python, а не на GO.
[+] Проигрыватель: Ускорена повторная работа с торрентом - resume data (спасибо srg70 и RussakHH)
[B]Version 2.4.6[/B]
[+] Проигрыватель: Уменьшена просадка после загрузки буфера (спасибо srg70 и RussakHH)
[+] История Просмотров: Добавлено имя раздачи, тонкая настройка добавления по проценту просмотра

View File

@ -1749,15 +1749,15 @@ def first_run_231():
xbmc.executebuiltin('Dialog.Close(all,true)')
xbmc.executebuiltin('XBMC.ActivateWindow(Addonbrowser,addons://search/%s)' % ('Torrenter Searcher'))
def first_run_242():
if __settings__.getSetting('torrent_player')=='2':
__settings__.setSetting('first_run_242','True')
def first_run_250():
if __settings__.getSetting('torrent_player')=='3':
__settings__.setSetting('first_run_250','True')
if not __settings__.getSetting('first_run_242')=='True':
__settings__.setSetting('first_run_242','True')
yes=xbmcgui.Dialog().yesno('< %s >' % (Localization.localize('Torrenter Update ') + '2.4.2'),
Localization.localize('New player to Torrenter v2 - Torrent2HTTP! It should be faster, '
'stable and better with Android, also seeking works in it.'),
if not __settings__.getSetting('first_run_250')=='True':
__settings__.setSetting('first_run_250','True')
yes=xbmcgui.Dialog().yesno('< %s >' % (Localization.localize('Torrenter Update ') + '2.5.0'),
Localization.localize('New player to Torrenter v2 - pyrrent2http! Advantages of Torrent2HTTP '
'but with python-libtorrent library instead of libtorrent-go!'),
Localization.localize('Would you like to try it?'),)
if yes:
__settings__.openSettings()

View File

@ -65,6 +65,7 @@
<string id="30065">Do not add to Watched History if played more (%)</string>
<string id="30066">Confluence (by safonov_ivan)</string>
<string id="30067">Aeon Nox (by joyrider)</string>
<string id="30068">pyrrent2http (python-libtorrent via http)</string>
<string id="30101">Interface</string>
<string id="30102">P2P Network</string>
<string id="30103">Advanced</string>

View File

@ -65,6 +65,7 @@
<string id="30065">Не добавлять в История Просмотров если больше (%)</string>
<string id="30066">Confluence (от safonov_ivan)</string>
<string id="30067">Aeon Nox (от joyrider)</string>
<string id="30068">pyrrent2http (python-libtorrent по http)</string>
<string id="30101">Интерфейс</string>
<string id="30102">P2P Сеть</string>
<string id="30103">Дополнительные</string>

View File

@ -15,7 +15,7 @@
<setting id="debug" type="bool" label="30015" default="false"/>
</category>
<category label="30102">
<setting id="torrent_player" type="enum" label="30023" default="2" lvalues="30021|30022|30046" />
<setting id="torrent_player" type="enum" label="30023" default="2" lvalues="30021|30022|30046|30068" />
<setting id="storage" type="folder" label="30004" default=""/>
<setting id="keep_files" type="enum" label="30008" default="1" lvalues="30043|30044|30045"/>
<setting id="next_dl" type="bool" label="30013" default="true" visible="!eq(-3,1)"/>
@ -61,7 +61,7 @@
<setting id="torrent_qbittorrent_password" type="text" label="50316" visible="eq(-21,4)" default="admin" option="hidden"/>
</category>
<category label="30105">
<setting id="torrent_player" type="enum" label="30023" default="2" lvalues="30021|30022|30046" />
<setting id="torrent_player" type="enum" label="30023" default="2" lvalues="30021|30022|30046|30068" />
<setting id="ask_dir" type="bool" label="30031" default="false"/>
<setting id="connections_limit" type="number" label="30051" default="200" visible=" eq(-2,2)"/>
<setting id="use_random_port" type="bool" label="30052" default="false" visible=" eq(-3,2)"/>