View difference between Paste ID: MbrTZS8L and THWn99Qp
SHOW: | | - or go back to the newest paste.
1
import sys, os
2-
import xbmc, xbmcgui, xbmcaddon, xbmcplugin
2+
3-
import unicodedata
3+
4-
import urllib
4+
from xbmcswift2 import Plugin, xbmc, xbmcaddon
5-
from urlparse import parse_qs
5+
6
7
plugin = Plugin()
8-
from xbmcswift2 import Plugin
8+
9-
import datetime
9+
# Calls XBMC's JSON RPC
10
def send_request(method, params = None):
11-
#from lib import scraper
11+
12
    data = {"method"  : method,
13
            "jsonrpc" : "2.0",
14
            "id"      : plugin.id}
15-
__addonid__ =     'plugin.video.trailersnob'
15+
16-
__addon__ =       xbmcaddon.Addon(id=__addonid__)
16+
17-
__addonname__ =   __addon__.getAddonInfo('name')
17+
18-
__scriptdebug__ = True
18+
19-
__handle__ =      int(sys.argv[1])
19+
# Makes a movie title into an HD-Trailer's title
20
def clean(title):
21-
def enum(*sequential, **named):
21+
22-
    enums = dict(zip(sequential, range(len(sequential))), **named)
22+
23-
    return type('Enum', (), enums)
23+
24
get_tree_original = scraper.__get_tree
25-
TASKS = enum('ALL', 'MISSING', 'BAD', 'LAME', 'SHOW_MOVIE')
25+
26-
TASK = "task"
26+
27-
MOVIE_ID = "movieid"
27+
28
        return None
29
    tree = get_tree_original(url)
30
    result = tree.find("meta", attrs = {"http-equiv":"refresh"})
31
    if result:
32
        wait,text=result["content"].split(";")
33
        if text.lower().startswith("url="):
34
            url=text[4:]
35
            return get_tree_new(url, tries + 1)
36-
            "id"      : __addonid__}
36+
37
        return tree
38
scraper.__get_tree = get_tree_new
39
# END HACK
40
41
##
42
## -- Beginning of URL handling functions --
43
##
44
45
@plugin.route('/')
46
def root_menu():
47
    items = [
48
        {'label':"All Movies",
49
         'path': plugin.url_for('all_menu', filter_by = "None")}
50
        ]
51
    return items
52
53
def list_movies(movies, filter_by):
54
    items = []
55
    for movie in movies:
56
        items.append( {'label': movie["label"],
57
                       'path' : plugin.url_for('movie_menu',
58
                                               movie_id = "%d" % movie["movieid"],
59
                                               filter_by = filter_by)} )
60
    return items
61
62
63
@plugin.route('/movies/<filter_by>')
64
def all_menu(filter_by):
65
    return list_movies(send_request("VideoLibrary.GetMovies")["result"]["movies"], filter_by)
66
67
def get_details(movie_id):
68
    result = send_request("VideoLibrary.GetMovieDetails",
69
                          {"properties" : ["trailer", "year"], "movieid" : int(movie_id)})
70
    return result["result"]["moviedetails"]
71
72
@plugin.route('/movies/<filter_by>/<movie_id>')
73
def movie_menu(filter_by, movie_id):
74
    details = get_details(movie_id)
75
    items = [
76
        {'label' : "Play current trailer",
77
         'path'  : plugin.url_for('play_trailer',
78
                                  movie_id = movie_id,
79
                                  filter_by = filter_by),
80-
                                               movie_id = "%d" % movie[MOVIE_ID],
80+
81
         {'label' : "Choose trailer",
82-
        print movie[MOVIE_ID]
82+
83
                                  movie_id = movie_id,
84
                                  filter_by = filter_by) }
85
        ]
86
    return items
87
88
@plugin.route('/movies/<filter_by>/<movie_id>/play')
89
def play_trailer(filter_by, movie_id):
90
    details = get_details(movie_id)
91-
    result = send_request("VideoLibrary.GetMovieDetails", {"properties" : ["trailer", "year"], "movieid" : int(movie_id)})
91+
92
    plugin.log.info("Playing: %s" % trailer)
93
    plugin.set_resolved_url(trailer)
94
95
def trailer_menu_items(filter_by, movie_id):
96
    details = get_details(int(movie_id))
97
    try:
98
        movie, trailers, clips = scraper.get_videos(clean(details["label"]))
99
    except scraper.NetworkError:
100
        plugin.notify("No trailers found.")
101
        return None
102
103
    resolution = plugin.getSetting("resolution", str)
104
    items = []
105
    for trailer in trailers:
106
        if resolution in trailer["resolutions"]:
107
            items.append(
108
            {'label' : trailer["title"],
109
             'path'  : plugin.url_for('set_trailer',
110
                                      filter_by = filter_by, movie_id = movie_id,
111
                                      url = trailer['resolutions'][resolution],
112
                                      source = trailer['source'])})
113
    return items
114
115
@plugin.route('/movies/<filter_by>/<movie_id>/list')
116
def trailer_menu(filter_by, movie_id):
117
    return trailer_menu_items(filter_by, movie_id)
118
119
120
@plugin.route('/movies/<filter_by>/<movie_id>/set_trailer/<url>/<source>')
121
def set_trailer(filter_by, movie_id, url, source):
122
    if source == "apple.com":
123
        url = '%s|User-Agent=QuickTime' % url
124
125-
    resolution = __addon__.getSetting("resolution")
125+
    result = send_request('VideoLibrary.SetMovieDetails',
126
                          {'movieid' : int(movie_id), 'trailer' : url})
127
    if "result" in result:
128
        if result["result"] == "OK":
129
            plugin.notify(msg='Successfully set trailer')
130
            plugin.log.info("Set trailer for \"%s\" to: %s" % (movie_id, url))
131-
             'path'  : plugin.url_for('set_trailer', filter_by = filter_by, url = trailer['resolutions'][resolution], movie_id = movie_id, source = trailer['source'])})
131+
132
            plugin.log.error("Failed to set trailer for \"%s\" to: %s" % (movie_id, url))
133
            plugin.log.error(result)
134
    else:
135
        plugin.log.error(result["error"])
136
137
    # Go back to trailer menu
138
    return plugin.finish(trailer_menu_items(filter_by, movie_id), update_listing = True)
139
140
if __name__ == "__main__":
141
    plugin.run()