-
Notifications
You must be signed in to change notification settings - Fork 9
/
service.py
144 lines (111 loc) · 5.17 KB
/
service.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# -*- coding: utf-8 -*-
import os
import sys
from urllib.parse import unquote
import xbmc
import xbmcvfs
import xbmcaddon
import xbmcplugin
import xbmcgui
__addon__ = xbmcaddon.Addon()
__scriptid__ = __addon__.getAddonInfo('id')
__scriptname__ = __addon__.getAddonInfo('name')
__version__ = __addon__.getAddonInfo('version')
__language__ = __addon__.getLocalizedString
__cwd__ = xbmcvfs.translatePath(__addon__.getAddonInfo('path'))
__profile__ = xbmcvfs.translatePath(__addon__.getAddonInfo('profile'))
__resource__ = xbmcvfs.translatePath(os.path.join(__cwd__, 'resources', 'lib'))
__temp__ = xbmcvfs.translatePath(os.path.join(__profile__, 'temp', ''))
from resources.lib.NapisyUtils import NapisyHelper, log, normalizeString, clean_title, parse_rls_title
def search(item):
helper = NapisyHelper()
subtitles_list = helper.get_subtitle_list(item)
if subtitles_list:
for it in subtitles_list:
listitem = xbmcgui.ListItem(label=it["language_name"],
label2=it["filename"])
listitem.setArt({'icon': str(it["rating"]), 'thumb': it["language_flag"]})
if it["sync"]:
listitem.setProperty("sync", "true")
else:
listitem.setProperty("sync", "false")
if it.get("hearing_imp", False):
listitem.setProperty("hearing_imp", "true")
else:
listitem.setProperty("hearing_imp", "false")
url = "plugin://%s/?action=download&id=%s" % (__scriptid__, it["id"])
xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=listitem, isFolder=False)
return
def get_params():
param = []
paramstring = sys.argv[2]
if len(paramstring) >= 2:
params = paramstring
cleanedparams = params.replace('?', '')
if params[len(params) - 1] == '/':
params = params[0:len(params) - 2]
pairsofparams = cleanedparams.split('&')
param = {}
for i in range(len(pairsofparams)):
splitparams = {}
splitparams = pairsofparams[i].split('=')
if (len(splitparams)) == 2:
param[splitparams[0]] = splitparams[1]
return param
params = get_params()
if params['action'] in ['search', 'manualsearch']:
log("Version: '%s'" % (__version__,))
item = {}
item['temp'] = False
item['rar'] = False
item['year'] = xbmc.getInfoLabel("VideoPlayer.Year") # Year
item['season'] = str(xbmc.getInfoLabel("VideoPlayer.Season")) # Season
item['episode'] = str(xbmc.getInfoLabel("VideoPlayer.Episode")) # Episode
item['tvshow'] = normalizeString(xbmc.getInfoLabel("VideoPlayer.TVshowtitle")) # Show
item['title'] = normalizeString(xbmc.getInfoLabel("VideoPlayer.OriginalTitle")) # try to get original title
item['file_original_path'] = unquote(xbmc.Player().getPlayingFile()) # Full path of a playing file
item['file_original_name'] = os.path.basename(item['file_original_path']) # Name of playing file
item['3let_language'] = []
item['preferredlanguage'] = unquote(params.get('preferredlanguage', ''))
item['preferredlanguage'] = xbmc.convertLanguage(item['preferredlanguage'], xbmc.ISO_639_2)
for lang in unquote(params['languages']).split(","):
item['3let_language'].append(xbmc.convertLanguage(lang, xbmc.ISO_639_2))
if item['title'] == "":
log("VideoPlayer.OriginalTitle not found")
item['title'] = normalizeString(xbmc.getInfoLabel("VideoPlayer.Title")) # no original title, get just Title
if params['action'] == 'manualsearch':
if item['season'] != '' or item['episode']:
item['tvshow'] = unquote(params['searchstring'])
else:
item['title'] = unquote(params['searchstring'])
log("Item before cleaning: \n %s" % item)
# clean title + tvshow params
clean_title(item)
parse_rls_title(item)
if item['episode'].lower().find("s") > -1: # Check if season is "Special"
item['season'] = "0"
item['episode'] = item['episode'][-1:]
if item['file_original_path'].find("http") > -1:
item['temp'] = True
elif item['file_original_path'].find("rar://") > -1:
item['rar'] = True
item['file_original_path'] = os.path.dirname(item['file_original_path'][6:])
elif item['file_original_path'].find("stack://") > -1:
stackPath = item['file_original_path'].split(" , ")
item['file_original_path'] = stackPath[0][8:]
item["file_original_size"] = xbmcvfs.File(item["file_original_path"]).size()
log("item: %s" % (item))
search(item)
elif params['action'] == 'download':
helper = NapisyHelper()
subs = helper.download(params["id"])
# # we can return more than one subtitle for multi CD versions, for now we are still working out how to handle
# that in XBMC core
for sub in subs:
listitem = xbmcgui.ListItem(label=sub)
xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=sub, listitem=listitem, isFolder=False)
elif params['action'] == 'login':
helper = NapisyHelper()
helper.login(True)
__addon__.openSettings()
xbmcplugin.endOfDirectory(int(sys.argv[1])) ## send end of directory to XBMC