Skip to content

Commit d7bc17a

Browse files
committed
Implemented find best subtitles, enabling/disabling providers, provider settings
1 parent be3a291 commit d7bc17a

2 files changed

Lines changed: 112 additions & 28 deletions

File tree

Contents/Code/__init__.py

Lines changed: 52 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#hdbits.org
1+
# hdbits.org
22

33
import string, os, urllib, zipfile, re, copy
44
from babelfish import Language
@@ -7,38 +7,52 @@
77
import logger
88

99
OS_PLEX_USERAGENT = 'plexapp.com v9.0'
10-
subtitleExt = ['utf','utf8','utf-8','sub','srt','smi','rt','ssa','aqt','jss','ass','idx']
11-
12-
langPrefs2Podnapisi = {'sq':'29','ar':'12','be':'50','bs':'10','bg':'33','ca':'53','zh':'17','cs':'7','da':'24','nl':'23','en':'2','et':'20','fi':'31','fr':'8','de':'5','el':'16','he':'22','hi':'42','hu':'15','is':'6','id':'54','it':'9','ja':'11','ko':'4','lv':'21','lt':'19','mk':'35','ms':'55','no':'3','pl':'26','pt':'32','ro':'13','ru':'27','sr':'36','sk':'37','sl':'1','es':'28','sv':'25','th':'44','tr':'30','uk':'46','vi':'51','hr':'38'}
13-
14-
mediaCopies = {}
1510

1611
DEPENDENCY_MODULE_NAMES = ['subliminal', 'enzyme', 'guessit', 'requests']
1712

13+
SUPPORTED_PROVIDERS = ['opensubtitles', 'thesubdb', 'podnapisi', 'addic7ed', 'tvsubtitles']
14+
15+
ENABLED_PROVIDERS = {'opensubtitles' : Prefs['provider.opensubtitles'],
16+
'thesubdb' : Prefs['provider.thesubdb'],
17+
'podnapisi' : Prefs['provider.podnapisi'],
18+
'addic7ed' : Prefs['provider.addic7ed'],
19+
'tvsubtitles' : Prefs['provider.tvsubtitles']
20+
}
21+
# dict((key,value) for key, value in a.iteritems() if key == 1)
22+
SUPPORTED_PROVIDER_SETTINGS = {'addic7ed': {
23+
'username': Prefs['provider.addic7ed.username'],
24+
'password': Prefs['provider.addic7ed.password']
25+
}
26+
}
27+
1828
def Start():
1929
HTTP.CacheTime = 0
2030
HTTP.Headers['User-agent'] = OS_PLEX_USERAGENT
21-
Log.Debug("START CALLED")
31+
Log.Debug("START CALLED")
2232
logger.registerLoggingHander(DEPENDENCY_MODULE_NAMES)
2333

2434
def ValidatePrefs():
2535
Log.Debug("Validate Prefs called.")
2636
return
2737

28-
#Prepare a list of languages we want subs for
38+
# Prepare a list of languages we want subs for
2939
def getLangList():
30-
langList = [Prefs["langPref1"]]
40+
langList = {Language.fromietf(Prefs["langPref1"])}
3141
if(Prefs["langPref2"] != "None"):
32-
langList.append(Prefs["langPref2"])
42+
langList.update({Language.fromietf(Prefs["langPref2"])})
43+
3344
return langList
3445

35-
class SubInfo():
36-
def __init__(self, lang, url, sub, name):
37-
self.lang = lang
38-
self.url = url
39-
self.sub = sub
40-
self.name = name
41-
self.ext = string.split(self.name, '.')[-1]
46+
def getProviders():
47+
enabledProviders = []
48+
for supportedProvider in SUPPORTED_PROVIDERS:
49+
if Prefs["provider." + supportedProvider]:
50+
Log.Debug("Provider %s is enabled" % supportedProvider)
51+
enabledProviders.append(supportedProvider)
52+
return enabledProviders
53+
54+
def getProviderSettings():
55+
return SUPPORTED_PROVIDER_SETTINGS
4256

4357
class SubliminalSubtitlesAgentMovies(Agent.Movies):
4458
name = 'Subliminal Movie Subtitles'
@@ -48,41 +62,51 @@ class SubliminalSubtitlesAgentMovies(Agent.Movies):
4862

4963
def search(self, results, media, lang):
5064
Log.Debug("MOVIE SEARCH CALLED")
51-
65+
results.Append(MetadataSearchResult(id='null', score=100))
66+
5267

5368
def update(self, metadata, media, lang):
5469
Log.Debug("MOVIE UPDATE CALLED")
55-
70+
for item in media.items:
71+
for part in item.parts:
72+
Log.Debug("Append: %s" % part.file)
73+
try:
74+
scannedVideo = subliminal.video.scan_video(part.file, subtitles=True, embedded_subtitles=True)
75+
except ValueError:
76+
Log.Warn("File could not be guessed by subliminal")
77+
continue
78+
79+
videos.append(scannedVideo)
80+
81+
subtitles = subliminal.api.download_best_subtitles(videos, getLangList(), getProviders(), getProviderSettings())
82+
subliminal.api.save_subtitles(subtitles)
5683

5784
class SubliminalSubtitlesAgentTvShows(Agent.TV_Shows):
5885

59-
providers = ['opensubtitles']
6086
name = 'Subliminal TV Subtitles'
6187
languages = [Locale.Language.English]
6288
primary_provider = False
6389
contributes_to = ['com.plexapp.agents.thetvdb']
6490

6591
def search(self, results, media, lang):
6692
Log.Debug("TV SEARCH CALLED")
67-
results.Append(MetadataSearchResult(id = 'null', score = 100))
68-
93+
results.Append(MetadataSearchResult(id='null', score=100))
6994

7095
def update(self, metadata, media, lang):
71-
videos= []
96+
videos = []
7297
Log.Debug("TvUpdate. Lang %s" % lang)
7398
for season in media.seasons:
7499
for episode in media.seasons[season].episodes:
75100
for item in media.seasons[season].episodes[episode].items:
76101
for part in item.parts:
77102
Log.Debug("Append: %s" % part.file)
78103
try:
79-
scannedVideo = subliminal.video.scan_video(part.file)
104+
scannedVideo = subliminal.video.scan_video(part.file, subtitles=True, embedded_subtitles=True)
80105
except ValueError:
81106
Log.Warn("File could not be guessed by subliminal")
82107
continue
83108

84109
videos.append(scannedVideo)
85-
86-
result = subliminal.api.list_subtitles(videos,{Language('eng')}, self.providers)
87-
Log.Debug(result)
88-
110+
111+
subtitles = subliminal.api.download_best_subtitles(videos, getLangList(), getProviders(), getProviderSettings())
112+
subliminal.api.save_subtitles(subtitles)

Contents/DefaultPrefs.json

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
[
2+
{
3+
"id": "provider.opensubtitles",
4+
"label": "Enable OpenSubtitles",
5+
"type": "bool",
6+
"default": "true"
7+
},
8+
{
9+
"id": "provider.thesubdb",
10+
"label": "Enable TheSubDB",
11+
"type": "bool",
12+
"default": "true"
13+
},
14+
{
15+
"id": "provider.podnapisi",
16+
"label": "Enable Podnapisi.NET",
17+
"type": "bool",
18+
"default": "true"
19+
},
20+
{
21+
"id": "provider.addic7ed",
22+
"label": "Enable Addic7ed",
23+
"type": "bool",
24+
"default": "true"
25+
},
26+
{
27+
"id": "provider.tvsubtitles",
28+
"label": "Enable TVsubtitles.net",
29+
"type": "bool",
30+
"default": "true"
31+
},
32+
{
33+
"id": "provider.addic7ed.username",
34+
"label": "Addic7ed Username",
35+
"type": "text",
36+
"default": "Username"
37+
},
38+
{
39+
"id": "provider.addic7ed.password",
40+
"label": "Addic7ed Password",
41+
"type": "text",
42+
"option": "hidden",
43+
"default": "",
44+
"secure": "true"
45+
},
46+
{
47+
"id": "langPref1",
48+
"label": "Subtitle Language (1)",
49+
"type": "enum",
50+
"values": ["sq","ar","be","bs","bg","ca","zh","cs","da","nl","en","et","fi","fr","de","el","he","hi","hu","is","id","it","ja","ko","lv","lt","mk","ms","no","pl","pt","ro","ru","sr","sk","sl","es","sv","th","tr","uk","vi","hr"],
51+
"default": "en"
52+
},
53+
{
54+
"id": "langPref2",
55+
"label": "Subtitle Language (2)",
56+
"type": "enum",
57+
"values": ["None", "sq","ar","be","bs","bg","ca","zh","cs","da","nl","en","et","fi","fr","de","el","he","hi","hu","is","id","it","ja","ko","lv","lt","mk","ms","no","pl","pt","ro","ru","sr","sk","sl","es","sv","th","tr","uk","vi","hr"],
58+
"default": "None"
59+
}
60+
]

0 commit comments

Comments
 (0)