From f72316b4e279cea46359adecaab1bcce0dff1a6f Mon Sep 17 00:00:00 2001 From: DiMartinoX Date: Sat, 10 Jan 2015 18:47:07 +0300 Subject: [PATCH] save path keyboard --- .idea/workspace.xml | 482 +++++++++++++++++-------- Core.py | 48 ++- Libtorrent.py | 19 +- Player.py | 12 +- changelog.txt | 6 +- resources/language/English/strings.xml | 1 + resources/language/Russian/strings.xml | 1 + resources/settings.xml | 17 +- 8 files changed, 404 insertions(+), 182 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index ce91045..f330574 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,9 +2,13 @@ - - - + + + + + + + @@ -39,56 +43,87 @@ - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -105,21 +140,21 @@ - - + + - - + + - - + + - - + + @@ -129,20 +164,10 @@ - - - - - - - - - - - + @@ -164,13 +189,18 @@ @@ -206,6 +236,7 @@ + @@ -252,19 +283,53 @@ + + + + + + + + + + + - + + + + + + + @@ -441,7 +506,11 @@ 1420833581950 1420833581950 - @@ -468,8 +537,7 @@ - - + @@ -481,11 +549,12 @@ - + + - + @@ -504,24 +573,91 @@ - - + + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + + + + + + + + + + + + + + + + + @@ -530,62 +666,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -597,6 +677,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -605,18 +805,10 @@ - + - - - - - - - - - - + + diff --git a/Core.py b/Core.py index 8f55772..ff4aa6d 100644 --- a/Core.py +++ b/Core.py @@ -128,7 +128,7 @@ class Core: self.drawItem(self.localize('< Login >'), 'loginUser', image=self.ROOT + '/icons/login.png') self.drawItem(self.localize('< Register >'), 'registerUser', image=self.ROOT + '/icons/register.png')''' if 'true' == self.__settings__.getSetting("keep_files"): - self.drawItem(self.localize('Clear Storage'), 'clearStorage', isFolder=True, + self.drawItem('< %s >' % self.localize('Clear Storage'), 'clearStorage', isFolder=True, image=self.ROOT + '/icons/clear.png') view_style('sectionMenu') xbmcplugin.endOfDirectory(handle=int(sys.argv[1]), succeeded=True) @@ -759,10 +759,11 @@ class Core: options = [] - img = '' + img, save_folder = '','' if get('img'): img = get('img') if get('title'): + save_folder=get('title') options.append(get('title')) if get('originaltitle') and get('originaltitle') != get('title'): @@ -773,6 +774,7 @@ class Core: options.append(get('contenter_title')) if get('year'): + save_folder=save_folder+' ('+get('year')+')' if get('title'): options.append('%s %s' % (get('title'), get('year'))) if get('originaltitle') and get('originaltitle') != get('title'): options.append( '%s %s' % (get('originaltitle'), get('year'))) @@ -780,12 +782,12 @@ class Core: 'contenter_title'): options.append('%s %s' % (get('contenter_title'), get('year'))) if get('episode') and get('season'): - if get('title'): options.append('%s S%sE%s' % (get('title'), get('season'), get('episode'))) + if get('title'): options.append('%s S%2dE%2d' % (get('title'), int(get('season')), int(get('episode')))) if get('original_title'): options.append( - '%s S%sE%s' % (get('original_title'), get('season'), get('episode'))) + '%s S%2dE%2d' % (get('original_title'), int(get('season')), int(get('episode')))) for title in options: - link = {'url': title.encode('utf-8', 'ignore'), 'thumbnail': img} + link = {'url': title.encode('utf-8', 'ignore'), 'thumbnail': img, 'save_folder':save_folder.encode('utf-8', 'ignore')} self.drawItem(title.encode('utf-8', 'ignore'), 'search', link, img) view_style('searchOption') @@ -1062,9 +1064,26 @@ class Core: def playTorrent(self, params={}): torrentUrl = self.__settings__.getSetting("lastTorrent") + if self.__settings__.getSetting("keep_files")=='true' \ + and self.__settings__.getSetting("ask_dir")=='true': + try: + save_folder = urllib.unquote_plus(params.get('save_folder')) + except: + save_folder = '' + if len(save_folder)>0: + default=os.path.join(self.userStorageDirectory, save_folder) + else: + default=self.userStorageDirectory + keyboard = xbmc.Keyboard(default, self.localize('Save to path') + ':') + keyboard.doModal() + dirname = keyboard.getText() + if not keyboard.isConfirmed(): + return + if len(dirname)>0: + self.userStorageDirectory=dirname if self.torrent_player == '0': if 0 != len(torrentUrl): - self.Player = TorrentPlayer(torrentUrl=torrentUrl, params=params) + self.Player = TorrentPlayer(userStorageDirectory=self.userStorageDirectory, torrentUrl=torrentUrl, params=params) else: print self.__plugin__ + " Unexpected access to method playTorrent() without torrent content" elif self.torrent_player == '1': @@ -1126,6 +1145,10 @@ class Core: thumbnail = urllib.unquote_plus(get("thumbnail")) except: thumbnail = '' + try: + save_folder = urllib.unquote_plus(get("save_folder")) + except: + save_folder = '' url = urllib.unquote_plus(get("url")) self.__settings__.setSetting("lastTorrentUrl", url) classMatch = re.search('(\w+)::(.+)', url) @@ -1211,7 +1234,7 @@ class Core: 'XBMC.RunPlugin(%s)' % ('%s?action=%s&url=%s') % ( sys.argv[0], 'downloadopenTorrent', str(identifier))) ] - link = {'url': identifier, 'thumbnail': thumbnail} + link = {'url': identifier, 'thumbnail': thumbnail, 'save_folder':save_folder} self.drawItem(title, 'playTorrent', link, image=thumbnail, isFolder=False, action2=ids_video.rstrip(','), contextMenu=contextMenu, replaceMenu=False) view_style('openTorrent') @@ -1382,14 +1405,15 @@ class Core: external = urllib.unquote_plus(get("external")) except: external = None - try: - silent = get("silent") - except: - silent = None + silent = get("silent") try: thumbnail = urllib.unquote_plus(get("thumbnail")) except: thumbnail = '' + try: + save_folder = urllib.unquote_plus(get("save_folder")) + except: + save_folder = '' if external: try: s = json.loads(json.loads(urllib.unquote_plus(get("sdata")))) @@ -1438,7 +1462,7 @@ class Core: sys.argv[0], 'downloadFilesList', urllib.quote_plus(link))) ] title = self.titleMake(seeds, leechers, size, title) - link = {'url': link, 'thumbnail': thumbnail} + link = {'url': link, 'thumbnail': thumbnail, 'save_folder':save_folder} self.drawItem(title, 'openTorrent', link, image, contextMenu=contextMenu, replaceMenu=False) view_style('showFilesList') xbmcplugin.endOfDirectory(handle=int(sys.argv[1]), succeeded=True) diff --git a/Libtorrent.py b/Libtorrent.py index 8713acb..84b82eb 100644 --- a/Libtorrent.py +++ b/Libtorrent.py @@ -40,7 +40,6 @@ class Libtorrent: torrentFile = None magnetLink = None storageDirectory = '' - torrentFilesDirectory = 'torrents' startPart = 0 endPart = 0 partOffset = 0 @@ -82,11 +81,8 @@ class Libtorrent: self.lt = libtorrent del libtorrent - self.torrentFilesDirectory = torrentFilesDirectory self.storageDirectory = storageDirectory - _path=os.path.join(self.storageDirectory, self.torrentFilesDirectory)+os.sep - if not xbmcvfs.exists(_path): - xbmcvfs.mkdirs(_path) + self.torrentFilesPath=os.path.join(self.storageDirectory, torrentFilesDirectory)+os.sep if xbmcvfs.exists(torrentFile): self.torrentFile = torrentFile self.torrentFileInfo = self.lt.torrent_info(file_decode(self.torrentFile)) @@ -99,7 +95,9 @@ class Libtorrent: self.magnetToTorrent(torrentUrl) return self.torrentFile else: - torrentFile = self.storageDirectory + os.sep + self.torrentFilesDirectory + os.sep + self.md5( + if not xbmcvfs.exists(self.torrentFilesPath): + xbmcvfs.mkdirs(self.torrentFilesPath) + torrentFile = self.torrentFilesPath + self.md5( torrentUrl) + '.torrent' try: if not re.match("^http\:.+$", torrentUrl): @@ -130,8 +128,9 @@ class Libtorrent: xbmcvfs.delete(torrentFile) return baseName = file_encode(os.path.basename(self.getFilePath())) - newFile = self.storageDirectory + os.sep + self.torrentFilesDirectory + os.sep + baseName + '.' + self.md5( - torrentUrl) + '.torrent' + if not xbmcvfs.exists(self.torrentFilesPath): + xbmcvfs.mkdirs(self.torrentFilesPath) + newFile = self.torrentFilesPath + baseName + '.' + self.md5(torrentUrl) + '.torrent' xbmcvfs.delete(newFile) if not xbmcvfs.exists(newFile): @@ -177,7 +176,9 @@ class Libtorrent: try: torrentFile = self.lt.create_torrent(torrentInfo) baseName = file_encode(os.path.basename(self.storageDirectory + os.sep + torrentInfo.files()[0].path)) - self.torrentFile = self.storageDirectory + os.sep + self.torrentFilesDirectory + os.sep + baseName + '.torrent' + if not xbmcvfs.exists(self.torrentFilesPath): + xbmcvfs.mkdirs(self.torrentFilesPath) + self.torrentFile = self.torrentFilesPath + baseName + '.torrent' torentFileHandler = xbmcvfs.File(self.torrentFile, "w+b") torentFileHandler.write(self.lt.bencode(torrentFile.generate())) torentFileHandler.close() diff --git a/Player.py b/Player.py index 0531393..71829ed 100644 --- a/Player.py +++ b/Player.py @@ -108,22 +108,14 @@ class TorrentPlayer(xbmc.Player): __plugin__ = sys.modules["__main__"].__plugin__ __settings__ = sys.modules["__main__"].__settings__ ROOT = sys.modules["__main__"].__root__ #.decode('utf-8').encode(sys.getfilesystemencoding()) - userStorageDirectory = __settings__.getSetting("storage") USERAGENT = "Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0" torrentFilesDirectory = 'torrents' debug = __settings__.getSetting('debug') == 'true' subs_dl = __settings__.getSetting('subs_dl') == 'true' seeding = __settings__.getSetting('keep_seeding') == 'true' - def __init__(self, torrentUrl, params={}): - if 0 == len(self.userStorageDirectory): - try: - temp_dir = tempfile.gettempdir() - except: - temp_dir = tempdir() - self.userStorageDirectory = temp_dir + os.path.sep + 'Torrenter' - else: - self.userStorageDirectory = self.userStorageDirectory + 'Torrenter' + def __init__(self, userStorageDirectory, torrentUrl, params={}): + self.userStorageDirectory = userStorageDirectory xbmc.Player.__init__(self) print ("[TorrentPlayer] Initalized") self.params = params diff --git a/changelog.txt b/changelog.txt index e5e4e50..84469fb 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,8 @@ -[B]Version 2.0.7[/B] +[B]Version 2.0.8[/B] +[+] Проигрывание: Добавлена возможность менять путь хранения +[+] Торрент-клиент: Добавлена возможность менять путь скачки + +[B]Version 2.0.7[/B] [+] Поиск: Добавлено несколько зарубежных трекеров [+] Добавлена поддержка интернациональности, придется пару раз кликнуть нет diff --git a/resources/language/English/strings.xml b/resources/language/English/strings.xml index 7fb9f30..24f5504 100644 --- a/resources/language/English/strings.xml +++ b/resources/language/English/strings.xml @@ -28,6 +28,7 @@ Long (30s) Predownload subtitles from all folders Keep seeding until Kodi restart + Ask to change storage before play Interface P2P Network Save path diff --git a/resources/language/Russian/strings.xml b/resources/language/Russian/strings.xml index 989334c..1d3a7cd 100644 --- a/resources/language/Russian/strings.xml +++ b/resources/language/Russian/strings.xml @@ -28,6 +28,7 @@ Долгое (30с) Предзакачать и подключить субтитры Сидировать до полного выключения Kodi + Предлагать изменить место хранения Интерфейс P2P Сеть Директория для сохранения файлов diff --git a/resources/settings.xml b/resources/settings.xml index c0534eb..0278e66 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -60,40 +60,47 @@ label="30008" default="true" /> +