diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 1bf5c46..b04c831 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,10 +1,9 @@ - + - - + @@ -34,72 +33,17 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - @@ -221,127 +165,71 @@ + + - - - - + + + + - - - - - - - - - - - + - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + @@ -354,7 +242,7 @@ - + @@ -382,35 +270,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -456,21 +320,45 @@ - - + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + @@ -486,6 +374,16 @@ + + + + + + + + + + @@ -508,26 +406,9 @@ @@ -890,42 +788,6 @@ @@ -1195,9 +1093,8 @@ - - + @@ -1207,10 +1104,11 @@ - + + - + @@ -1225,9 +1123,6 @@ - - - @@ -1250,141 +1145,18 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1413,13 +1185,6 @@ - - - - - - - @@ -1427,13 +1192,6 @@ - - - - - - - @@ -1462,13 +1220,6 @@ - - - - - - - @@ -1476,22 +1227,6 @@ - - - - - - - - - - - - - - - - @@ -1499,39 +1234,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1551,51 +1253,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1606,21 +1263,6 @@ - - - - - - - - - - - - - - - @@ -1628,68 +1270,38 @@ - + - - - - + - + - - - - + - + - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - + + - + @@ -1734,87 +1346,187 @@ - + - - - - - - - - - - - - - - - - - - - - - + + - + - - - + + - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - @@ -1936,15 +1648,137 @@ + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Anteoloader.py b/Anteoloader.py index c440ebc..bff6d73 100644 --- a/Anteoloader.py +++ b/Anteoloader.py @@ -386,6 +386,7 @@ 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, @@ -520,7 +521,7 @@ class AnteoPlayer(xbmc.Player): xbmc.sleep(2000) # very important, do not edit this, podavan i = 0 - while not xbmc.abortRequested and not self.isPlaying() and i < 50: + while not xbmc.abortRequested and not self.isPlaying() and i < 150: xbmc.sleep(200) i += 1 diff --git a/Core.py b/Core.py index e1843ce..9278334 100644 --- a/Core.py +++ b/Core.py @@ -1101,11 +1101,13 @@ class Core: view_style('searchOption') xbmcplugin.endOfDirectory(handle=int(sys.argv[1]), succeeded=True) - def drawItem(self, title, action, link='', image='', isFolder=True, contextMenu=None, replaceMenu=True, action2='', + 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))) if not info: info = {"Title": title, "plot": title} + if not isFolder and fileSize: + info['size'] = fileSize if isinstance(link, dict): link_url = '' for key in link.keys(): @@ -1127,6 +1129,7 @@ class Core: listitem.setInfo(type='Video', infoLabels=info) else: listitem.setInfo(type='Video', infoLabels=info) + listitem.setArt({'thumb': image}) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=listitem, isFolder=isFolder) def getParameters(self, parameterString): @@ -1353,44 +1356,7 @@ class Core: % ('torrentPlayer', url)) return if url: - self.__settings__.setSetting("lastTorrentUrl", url) - torrent = Downloader.Torrent(self.userStorageDirectory, torrentFilesDirectory=self.torrentFilesDirectory) - self.__settings__.setSetting("lastTorrent", torrent.saveTorrent(url)) - contentList = [] - for filedict in torrent.getContentList(): - fileTitle = filedict.get('title') - if filedict.get('size'): - fileTitle += ' [%d MB]' % (filedict.get('size') / 1024 / 1024) - contentList.append((unescape(fileTitle), str(filedict.get('ind')))) - contentList = sorted(contentList, key=lambda x: x[0]) - - #print str(contentList) - - dirList, contentListNew = cutFolder(contentList, tdir) - - for title in dirList: - self.drawItem(title, 'openTorrent', url, isFolder=True, action2=title) - - ids_video_result = get_ids_video(contentListNew) - ids_video='' - - if len(ids_video_result)>0: - for identifier in ids_video_result: - ids_video = ids_video + str(identifier) + ',' - - for title, identifier in contentListNew: - contextMenu = [ - (self.localize('Download via T-client'), - 'XBMC.RunPlugin(%s)' % ('%s?action=%s&ind=%s') % ( - sys.argv[0], 'downloadFilesList', str(identifier))), - (self.localize('Download via Libtorrent'), - 'XBMC.RunPlugin(%s)' % ('%s?action=%s&ind=%s') % ( - sys.argv[0], 'downloadLibtorrent', str(identifier))), - ] - self.drawItem(title, 'playTorrent', identifier, isFolder=False, action2=ids_video.rstrip(','), - contextMenu=contextMenu, replaceMenu=False) - view_style('torrentPlayer') - xbmcplugin.endOfDirectory(handle=int(sys.argv[1]), succeeded=True) + self.openTorrent(params) def userStorage(self, params): save=False @@ -1486,7 +1452,7 @@ class Core: def openTorrent(self, params={}): get = params.get tdir = unquote(get("url2"),None) - thumbnail = unquote(get("thumbnail"),'') + thumbnail = unquote(get("thumbnail"), False) and True or 'DefaultVideo.png' save_folder = unquote(get("save_folder"),'') url = urllib.unquote_plus(get("url")) @@ -1501,19 +1467,24 @@ class Core: if not torrent: torrent = Downloader.Torrent(self.userStorageDirectory, torrentFilesDirectory=self.torrentFilesDirectory) self.__settings__.setSetting("lastTorrent", torrent.saveTorrent(url)) - + + append_filesize = self.__settings__.getSetting("append_filesize") == 'true' + hasSize = False contentList = [] for filedict in torrent.getContentList(): fileTitle = filedict.get('title') - if filedict.get('size'): - fileTitle += ' [%d MB]' % (filedict.get('size') / 1024 / 1024) - contentList.append((unescape(fileTitle), str(filedict.get('ind')))) - contentList = sorted(contentList, key=lambda x: x[0]) + size = filedict.get('size') + if size: + if append_filesize: + fileTitle += ' [%d MB]' % (size / 1024 / 1024) + hasSize = True + contentList.append((unescape(fileTitle), str(filedict.get('ind')), size)) + #contentList = sorted(contentList, key=lambda x: x[0]) dirList, contentListNew = cutFolder(contentList, tdir) for title in dirList: - self.drawItem(title, 'openTorrent', url, image=thumbnail, isFolder=True, action2=title) + self.drawItem(title, 'openTorrent', url, isFolder=True, action2=title) ids_video_result = get_ids_video(contentListNew) ids_video='' @@ -1522,7 +1493,7 @@ class Core: for identifier in ids_video_result: ids_video = ids_video + str(identifier) + ',' - for title, identifier in contentListNew: + for title, identifier, filesize in contentListNew: contextMenu = [ (self.localize('Download via T-client'), 'XBMC.RunPlugin(%s)' % ('%s?action=%s&ind=%s') % ( @@ -1533,9 +1504,20 @@ class Core: ] 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) + action2=ids_video.rstrip(','), contextMenu=contextMenu, replaceMenu=False, fileSize=filesize) view_style('openTorrent') - xbmcplugin.endOfDirectory(handle=int(sys.argv[1]), succeeded=True) + p_handle = int(sys.argv[1]) + try: + xbmcplugin.addSortMethod(p_handle, xbmcplugin.SORT_METHOD_LABEL) + if hasSize: + xbmcplugin.addSortMethod(p_handle, xbmcplugin.SORT_METHOD_SIZE) + xbmc.executebuiltin("Container.SetSortMethod(%s)" % str(1)) + #xbmc.executebuiltin("Container.SetSortDirection()") + except: + log(' !!!! >>>> Faild to set sorting method to ' + str(xbmcplugin.SORT_METHOD_SIZE)) + pass + + xbmcplugin.endOfDirectory(p_handle, succeeded=True) def openSection(self, params={}): get = params.get diff --git a/Libtorrent.py b/Libtorrent.py index 220e31d..e95c99e 100644 --- a/Libtorrent.py +++ b/Libtorrent.py @@ -96,7 +96,9 @@ class Libtorrent: torrentUrl) + '.torrent' try: if not re.match("^http\:.+$", torrentUrl): - content = xbmcvfs.File(torrentUrl, "rb").read() + contentFile = xbmcvfs.File(torrentUrl, "rb") + content = contentFile.read() + contentFile.close() else: request = urllib2.Request(torrentUrl) request.add_header('Referer', torrentUrl) @@ -123,33 +125,26 @@ class Libtorrent: log('Exception: ' + str(e)) xbmcvfs.delete(torrentFile) return - + if not xbmcvfs.exists(self.torrentFilesPath): + xbmcvfs.mkdirs(self.torrentFilesPath) + newFile = self.torrentFilesPath + self.md5(torrentUrl) + '.torrent' + if newFile != torrentFile: + if xbmcvfs.exists(newFile): + xbmcvfs.delete(newFile) + if not xbmcvfs.exists(newFile): + try: + xbmcvfs.rename(torrentFile, newFile) + except Exception, 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: + e=self.lt.bdecode(xbmcvfs.File(self.torrentFile,'rb').read()) + self.torrentFileInfo = self.lt.torrent_info(e) self.torrentFile = torrentFile return self.torrentFile - #baseName = localize_path(os.path.basename(self.getFilePath())) - #if not xbmcvfs.exists(self.torrentFilesPath): - # xbmcvfs.mkdirs(self.torrentFilesPath) - #newFile = self.torrentFilesPath + self.md5( - # torrentUrl) + '.torrent' #self.md5(baseName) + '.' + - #if xbmcvfs.exists(newFile): - # log('saveTorrent: delete file ' + newFile) - # xbmcvfs.delete(newFile) - #if not xbmcvfs.exists(newFile): - # try: - # renamed = xbmcvfs.rename(torrentFile, newFile) - # log('saveTorrent: xbmcvfs.rename %s %s to %s' %(torrentFile, newFile, str(renamed))) - # except Exception, 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: - # e=self.lt.bdecode(xbmcvfs.File(self.torrentFile,'rb').read()) - # self.torrentFileInfo = self.lt.torrent_info(e) - # log('torrentFileInfo (saveTorrent2)=' + str(self.torrentFileInfo)) - - #return self.torrentFile - + def getMagnetInfo(self): magnetSettings = { 'url': self.magnetLink, diff --git a/SearcherABC.py b/SearcherABC.py index 1e4a432..2d0a4c9 100644 --- a/SearcherABC.py +++ b/SearcherABC.py @@ -254,4 +254,9 @@ class SearcherABC: status = str(r1.status) + " " + r1.reason content = r1.read() self.debug('[open2] status:'+str(status)) - return content \ No newline at end of file + return content + + def showMessage(self, heading, message, times=10000): + xbmc.executebuiltin('XBMC.Notification("%s", "%s", %s, "%s")' % ( + heading.replace('"', "'"), message.replace('"', "'"), times, self.searchIcon)) + self.log(str((heading.replace('"', "'"), message.replace('"', "'"), times, self.searchIcon))) \ No newline at end of file diff --git a/addon.xml b/addon.xml index 6231ca4..3510c38 100644 --- a/addon.xml +++ b/addon.xml @@ -1,5 +1,5 @@  - + diff --git a/changelog.txt b/changelog.txt index e6b9ee0..09674ff 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,5 +1,8 @@ English changelog at http://bit.ly/1MfSVUP +[B]Version 2.5.2[/B] +[+] Упорядочивание по разверу файла. + [B]Version 2.5.1[/B] [+] Исправлена работа с кодировками. diff --git a/functions.py b/functions.py index 45e5801..dc26d3c 100644 --- a/functions.py +++ b/functions.py @@ -428,13 +428,16 @@ def cutFolder(contentList, tdir=None): common_folder = common_folder.split('/')[0] common = True - for fileTitle, contentId in contentList: + for item in contentList: + fileTitle = item[0] if common_folder not in fileTitle: common = False break # print common_folder - for fileTitle, contentId in contentList: + for item in contentList: + fileTitle = item[0] + contentId = item[1] dir = None if common: fileTitle = fileTitle[len(common_folder) + 1:] @@ -446,10 +449,12 @@ def cutFolder(contentList, tdir=None): elif '/' in fileTitle: dir = fileTitle.split('/')[0] elif not tdir: - contentListNew.append((fileTitle, contentId)) + contentListNew.append(item) if tdir and dir == tdir: - contentListNew.append((fileTitle[len(dir) + 1:], contentId)) + tupleContent = list(item) + tupleContent[0] = fileTitle[len(dir) + 1:] + contentListNew.append(tuple(tupleContent)) if not tdir and dir and dir not in dirList: dirList.append(dir) @@ -1711,7 +1716,9 @@ def get_ids_video(contentList): 'fli', 'flc', 'm4v', 'iso'] allowed_music_ext = ['mp3', 'flac', 'wma', 'ogg', 'm4a', 'aac', 'm4p', 'rm', 'ra'] for extlist in [allowed_video_ext, allowed_music_ext]: - for title, identifier in contentList: + for item in contentList: + title = item[0] + identifier = item[1] try: ext = title.split('.')[-1] if ext.lower() in extlist: diff --git a/resources/language/English/strings.xml b/resources/language/English/strings.xml index da2da48..39e3cb3 100644 --- a/resources/language/English/strings.xml +++ b/resources/language/English/strings.xml @@ -3,7 +3,7 @@ Interface Language Lock Folders View Style Off - Save Files To Folder + Save Files To Folder (not FAT32) Use magnet-links Keep downloaded files Keep seeding of downloaded files @@ -66,6 +66,7 @@ Confluence (by safonov_ivan) Aeon Nox (by joyrider) pyrrent2http (python-libtorrent via http) + Append size to file name Interface P2P Network Advanced diff --git a/resources/language/Russian/strings.xml b/resources/language/Russian/strings.xml index 3bd940f..a6be9a9 100644 --- a/resources/language/Russian/strings.xml +++ b/resources/language/Russian/strings.xml @@ -1,9 +1,9 @@ - + Язык интерфейса Удерживать стиль отображения Отключено - Сохранять файлы в директорию + Сохранять файлы в директорию (не FAT32) Использовать магнет-ссылки Хранить загруженные файлы Оставаться на раздаче скачанных файлов @@ -66,6 +66,7 @@ Confluence (от safonov_ivan) Aeon Nox (от joyrider) pyrrent2http (python-libtorrent по http) + Добавлять размер к имени файла Интерфейс P2P Сеть Дополнительные diff --git a/resources/settings.xml b/resources/settings.xml index 1dc796b..bddb0dd 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -69,5 +69,6 @@ +