Sorting: name and size

pull/5/head
Sergey Shramchenko 2016-03-17 22:55:20 +02:00
parent 1974c5a41a
commit ef053f9b86
3 changed files with 77 additions and 68 deletions

99
Core.py
View File

@ -1101,11 +1101,13 @@ class Core:
view_style('searchOption') view_style('searchOption')
xbmcplugin.endOfDirectory(handle=int(sys.argv[1]), succeeded=True) 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={}): info={}):
listitem = xbmcgui.ListItem(title, iconImage=image, thumbnailImage=image) listitem = xbmcgui.ListItem(title, iconImage=image, thumbnailImage=image)
#log('[drawItem]:'+str((title, action, image, isFolder, contextMenu, replaceMenu, action2, info))) #log('[drawItem]:'+str((title, action, image, isFolder, contextMenu, replaceMenu, action2, info)))
if not info: info = {"Title": title, "plot": title} if not info: info = {"Title": title, "plot": title}
if not isFolder and fileSize:
info['size'] = fileSize
if isinstance(link, dict): if isinstance(link, dict):
link_url = '' link_url = ''
for key in link.keys(): for key in link.keys():
@ -1356,41 +1358,46 @@ class Core:
self.__settings__.setSetting("lastTorrentUrl", url) self.__settings__.setSetting("lastTorrentUrl", url)
torrent = Downloader.Torrent(self.userStorageDirectory, torrentFilesDirectory=self.torrentFilesDirectory) torrent = Downloader.Torrent(self.userStorageDirectory, torrentFilesDirectory=self.torrentFilesDirectory)
self.__settings__.setSetting("lastTorrent", torrent.saveTorrent(url)) self.__settings__.setSetting("lastTorrent", torrent.saveTorrent(url))
contentList = []
for filedict in torrent.getContentList(): self.drawFolder(torrent, tdir, url, 'torrentPlayer')
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) #contentList = []
#for filedict in torrent.getContentList():
# fileTitle = filedict.get('title')
# size = filedict.get('size')
# if size:
# fileTitle += ' [%d MB]' % (size / 1024 / 1024)
# contentList.append((unescape(fileTitle), str(filedict.get('ind')), size))
#contentList = sorted(contentList, key=lambda x: x[0])
##print str(contentList)
dirList, contentListNew = cutFolder(contentList, tdir) #dirList, contentListNew = cutFolder(contentList, tdir)
for title in dirList: #for title in dirList:
self.drawItem(title, 'openTorrent', url, isFolder=True, action2=title) # self.drawItem(title, 'openTorrent', url, isFolder=True, action2=title)
ids_video_result = get_ids_video(contentListNew) #ids_video_result = get_ids_video(contentListNew)
ids_video='' #ids_video=''
if len(ids_video_result)>0: #if len(ids_video_result)>0:
for identifier in ids_video_result: # for identifier in ids_video_result:
ids_video = ids_video + str(identifier) + ',' # ids_video = ids_video + str(identifier) + ','
for title, identifier in contentListNew: #for title, identifier, filesize in contentListNew:
contextMenu = [ # contextMenu = [
(self.localize('Download via T-client'), # (self.localize('Download via T-client'),
'XBMC.RunPlugin(%s)' % ('%s?action=%s&ind=%s') % ( # 'XBMC.RunPlugin(%s)' % ('%s?action=%s&ind=%s') % (
sys.argv[0], 'downloadFilesList', str(identifier))), # sys.argv[0], 'downloadFilesList', str(identifier))),
(self.localize('Download via Libtorrent'), # (self.localize('Download via Libtorrent'),
'XBMC.RunPlugin(%s)' % ('%s?action=%s&ind=%s') % ( # 'XBMC.RunPlugin(%s)' % ('%s?action=%s&ind=%s') % (
sys.argv[0], 'downloadLibtorrent', str(identifier))), # sys.argv[0], 'downloadLibtorrent', str(identifier))),
] # ]
self.drawItem(title, 'playTorrent', identifier, isFolder=False, action2=ids_video.rstrip(','), # self.drawItem(title, 'playTorrent', identifier, isFolder=False, action2=ids_video.rstrip(','),
contextMenu=contextMenu, replaceMenu=False) # contextMenu=contextMenu, replaceMenu=False, fileSize=filesize)
view_style('torrentPlayer') #view_style('torrentPlayer')
xbmcplugin.endOfDirectory(handle=int(sys.argv[1]), succeeded=True)
#xbmcplugin.endOfDirectory(handle=int(sys.argv[1]), succeeded=True)
def userStorage(self, params): def userStorage(self, params):
save=False save=False
@ -1501,14 +1508,19 @@ class Core:
if not torrent: torrent = Downloader.Torrent(self.userStorageDirectory, if not torrent: torrent = Downloader.Torrent(self.userStorageDirectory,
torrentFilesDirectory=self.torrentFilesDirectory) torrentFilesDirectory=self.torrentFilesDirectory)
self.__settings__.setSetting("lastTorrent", torrent.saveTorrent(url)) self.__settings__.setSetting("lastTorrent", torrent.saveTorrent(url))
self.drawFolder(torrent, tdir, url, 'openTorrent', thumbnail, save_folder)
def drawFolder(self, torrent, tdir, url, vstyle, thumbnail='', save_folder=''):
hasSize = False
contentList = [] contentList = []
for filedict in torrent.getContentList(): for filedict in torrent.getContentList():
fileTitle = filedict.get('title') fileTitle = filedict.get('title')
if filedict.get('size'): size = filedict.get('size')
fileTitle += ' [%d MB]' % (filedict.get('size') / 1024 / 1024) if size:
contentList.append((unescape(fileTitle), str(filedict.get('ind')))) fileTitle += ' [%d MB]' % (size / 1024 / 1024)
contentList = sorted(contentList, key=lambda x: x[0]) hasSize = True
contentList.append((unescape(fileTitle), str(filedict.get('ind')), size))
#contentList = sorted(contentList, key=lambda x: x[0])
dirList, contentListNew = cutFolder(contentList, tdir) dirList, contentListNew = cutFolder(contentList, tdir)
@ -1522,7 +1534,7 @@ class Core:
for identifier in ids_video_result: for identifier in ids_video_result:
ids_video = ids_video + str(identifier) + ',' ids_video = ids_video + str(identifier) + ','
for title, identifier in contentListNew: for title, identifier, filesize in contentListNew:
contextMenu = [ contextMenu = [
(self.localize('Download via T-client'), (self.localize('Download via T-client'),
'XBMC.RunPlugin(%s)' % ('%s?action=%s&ind=%s') % ( 'XBMC.RunPlugin(%s)' % ('%s?action=%s&ind=%s') % (
@ -1533,9 +1545,20 @@ class Core:
] ]
link = {'url': identifier, 'thumbnail': thumbnail, 'save_folder':save_folder} link = {'url': identifier, 'thumbnail': thumbnail, 'save_folder':save_folder}
self.drawItem(title, 'playTorrent', link, image=thumbnail, isFolder=False, 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') view_style(vstyle)
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={}): def openSection(self, params={}):
get = params.get get = params.get

View File

@ -96,7 +96,9 @@ class Libtorrent:
torrentUrl) + '.torrent' torrentUrl) + '.torrent'
try: try:
if not re.match("^http\:.+$", torrentUrl): if not re.match("^http\:.+$", torrentUrl):
content = xbmcvfs.File(torrentUrl, "rb").read() contentFile = xbmcvfs.File(torrentUrl, "rb")
content = contentFile.read()
contentFile.close()
else: else:
request = urllib2.Request(torrentUrl) request = urllib2.Request(torrentUrl)
request.add_header('Referer', torrentUrl) request.add_header('Referer', torrentUrl)
@ -126,30 +128,7 @@ class Libtorrent:
self.torrentFile = torrentFile self.torrentFile = torrentFile
return self.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): def getMagnetInfo(self):
magnetSettings = { magnetSettings = {
'url': self.magnetLink, 'url': self.magnetLink,

View File

@ -428,13 +428,16 @@ def cutFolder(contentList, tdir=None):
common_folder = common_folder.split('/')[0] common_folder = common_folder.split('/')[0]
common = True common = True
for fileTitle, contentId in contentList: for item in contentList:
fileTitle = item[0]
if common_folder not in fileTitle: if common_folder not in fileTitle:
common = False common = False
break break
# print common_folder # print common_folder
for fileTitle, contentId in contentList: for item in contentList:
fileTitle = item[0]
contentId = item[1]
dir = None dir = None
if common: if common:
fileTitle = fileTitle[len(common_folder) + 1:] fileTitle = fileTitle[len(common_folder) + 1:]
@ -446,10 +449,12 @@ def cutFolder(contentList, tdir=None):
elif '/' in fileTitle: elif '/' in fileTitle:
dir = fileTitle.split('/')[0] dir = fileTitle.split('/')[0]
elif not tdir: elif not tdir:
contentListNew.append((fileTitle, contentId)) contentListNew.append(item)
if tdir and dir == tdir: 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: if not tdir and dir and dir not in dirList:
dirList.append(dir) dirList.append(dir)
@ -1711,7 +1716,9 @@ def get_ids_video(contentList):
'fli', 'flc', 'm4v', 'iso'] 'fli', 'flc', 'm4v', 'iso']
allowed_music_ext = ['mp3', 'flac', 'wma', 'ogg', 'm4a', 'aac', 'm4p', 'rm', 'ra'] allowed_music_ext = ['mp3', 'flac', 'wma', 'ogg', 'm4a', 'aac', 'm4p', 'rm', 'ra']
for extlist in [allowed_video_ext, allowed_music_ext]: 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: try:
ext = title.split('.')[-1] ext = title.split('.')[-1]
if ext.lower() in extlist: if ext.lower() in extlist: