-
Notifications
You must be signed in to change notification settings - Fork 3
/
main.py
293 lines (255 loc) · 9.92 KB
/
main.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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
# -*- coding: utf-8 -*-
# Module: main
# Author: moedje
# Github: https://github.com/moedje/
# Updated on: August 2019
# License: GPL v.3 https://www.gnu.org/copyleft/gpl.html
import ssl, re, os, sys
try:
import xbmc, xbmcplugin
except:
import Kodistubs.xbmc as xbmc
import Kodistubs.xbmcplugin as xbmcplugin
from resources import lib
handle = int(sys.argv[1])
path = os.path
ssl._create_default_https_context = ssl._create_unverified_context
plugin = lib.Plugin() #simpleplugin.Plugin()
__datadir__ = xbmc.translatePath('special://profile/addon_data/{0}/'.format(plugin.id))
__cookie__ = path.join(__datadir__, 'cookies.lwp')
__next__ = path.join(xbmc.translatePath('special://home/addons/{0}/resources/'.format(plugin.id)), 'next.png')
__search__ = __next__.replace('next', 'search')
API = lib.newTumbl(datadir=__datadir__)
urlquick = lib.urlquick
#API = newtumbl.newTumbl(datadir=__datadir__)
VIEWLIST = 51
VIEWTHUMB = 500
@plugin.action()
def root():
plugin.set_setting('nosearch', "false")
tagnamelast = plugin.get_setting('lastsearch')
pagenum = 0
pagenum = plugin.get_setting('startpagenum')
if pagenum is None or pagenum == '':
pagenum = 0
rootmenu = {
"Home": [
{'label': 'Dashboard', 'is_folder': True, 'is_playable': False, 'url': plugin.get_url(action="get_dashboard", page=pagenum)},
{'label': 'Dashboard (Public)', 'is_folder': True, 'is_playable': False,
'url': plugin.get_url(action="get_dashboard", page=pagenum, tag='public')},
{'label': 'Liked/Favorites', 'is_folder': True, 'is_playable': False, 'url': plugin.get_url(action="get_liked")},
{'label': 'Blogs Followed', 'is_folder': True, 'is_playable': False, 'url': plugin.get_url(action="get_blogs_followed")},
{'label': 'Blogs Search', 'thumb': __search__, 'icon': __search__, 'is_folder': True, 'is_playable': False, 'url': plugin.get_url(action="find_blogs")},
{'label': 'Tags Followed', 'is_folder': True, 'is_playable': False, 'url': plugin.get_url(action="get_tags_followed")},
{'label': 'Tagged Gay', 'is_folder': True, 'is_playable': False, 'url': plugin.get_url(action="get_tag", tagname='gay')},
{'label': 'Search By Tag', 'thumb': __search__, 'icon': __search__, 'is_folder': True, 'is_playable': False, 'url': plugin.get_url(action="prompt_tag")}
]
}
xbmc.executebuiltin("Container.SetViewMode({0})".format(str(VIEWLIST)))
return rootmenu["Home"]
@plugin.action()
def view_blog(params):
blogix = 0
if params.blogid is not None:
blogix = params.blogid
litems = []
blogposts = []
blogposts = API.getBlogPosts(blogid=blogix, pagenum=0)
for item in blogposts:
litems.append(add_ContextDL(item))
#for post in blogposts:
# postid = post.get('properties', {}).get('postix', 0)
# ctx = [("Like Post", 'RunPlugin("{0}")'.format(plugin.url(action='like_post', postix=postid)))]
# post.update({"context_menu": ctx})
# litems.append(post)
xbmc.executebuiltin("Container.SetViewMode({0})".format(str(VIEWTHUMB)))
plugin.set_setting('nosearch', "true")
return litems
@plugin.action()
def get_blogs_followed():
litems = []
blogs = []
blogs = API.getFollowedBlogs()
for item in blogs:
blogix = item.get("properties", {}).get("blogix", "")
url = plugin.get_url(action="view_blog", blogid=blogix)
item.update({'url': url})
litems.append(item)
return litems
@plugin.action()
def find_blogs():
litems = []
txt = ''
txt = get_input(settingid='lastblogsearch')
bloglist = API.SearchForBlog(keyword=txt)
for item in bloglist:
blogix = item.get("properties", {}).get("blogix", "")
url = plugin.get_url(action="view_blog", blogid=blogix)
ctx = [('Follow Blog', 'RunPlugin("{0}")'.format(plugin.get_url(action='follow_blog', blogid=blogix)),)]
item.update({"context_menu": ctx, "url": url})
litems.append(item)
xbmc.executebuiltin("Container.SetViewMode({0})".format(str(VIEWTHUMB)))
plugin.set_setting('nosearch', "true")
return litems
@plugin.action()
def get_liked():
litems = []
items = API.getLikedPosts(pagenum=0)
xbmc.executebuiltin("Container.SetViewMode({0})".format(str(VIEWTHUMB)))
for item in items:
litems.append(add_ContextDL(item))
return litems
@plugin.action()
def get_dashboard(params):
pagenum = 0
tag=''
if params.page is not None:
pagenum = int(params.page)
if params.tag is not None:
tag = params.tag
litems = []
items = []
try:
litems = API.getDashPosts(page=pagenum, tag=tag)
except Exception as e:
showMessage(e.__context__.__str__(), e.__str__())
print(e.__str__())
for item in items:
litems.append(add_ContextDL(item))
if len(litems) >= 99:
nextitem = {'label': "Next Page", 'icon': __next__, 'thumb': __next__, 'url': plugin.get_url(action='get_dashboard', page=(pagenum+100), tag=tag), 'is_folder': True}
litems.append(nextitem)
try:
xbmc.executebuiltin("Container.SetViewMode({0})".format(str(VIEWTHUMB)))
except Exception as e:
showMessage(e.__context__.__str__(), e.__str__())
print(e.__str__())
return litems
@plugin.action()
def get_tag(params):
litems = []
if params.tagname is not None:
tag = params.tagname
else:
tag = "gay"
items = API.getVidsForTag(tagname=tag)
for item in items:
litems.append(add_ContextDL(item))
xbmc.executebuiltin("Container.SetViewMode({0})".format(str(VIEWTHUMB)))
#plugin.log(msg=str(items[:]), level=xbmc.LOGINFO)
plugin.set_setting('nosearch', "true")
return litems
@plugin.action()
def get_tags_followed():
litems = []
items = API.getFollowedTags()
for item in items:
path = plugin.get_url(action='get_tag', tagname=item.get('url', ''))
item.update({'url': path})
litems.append(item)
xbmc.executebuiltin("Container.SetViewMode({0})".format(str(VIEWTHUMB)))
return litems
@plugin.action()
def tag_search():
txt = ''
txt = get_input(settingid='lastsearch')
xbmc.executebuiltin("Container.SetViewMode({0})".format(str(VIEWTHUMB)))
plugin.set_setting('nosearch', "true")
return API.getVidsForTag(tagname=txt)
@plugin.action()
def search_blogs():
txt = get_input(settingid='lastblogsearch')
plugin.set_setting('nosearch', "true")
return dofind_blogs(txt)
def dofind_blogs(keyword=""):
litems = []
bloglist = API.SearchForBlog(keyword=keyword)
for item in bloglist:
blogix = item.get("properties", {}).get("blogix", "")
url = plugin.get_url(action="view_blog", blogid=blogix)
ctx = [('Follow Blog', 'RunPlugin("{0}")'.format(plugin.get_url(action='follow_blog', blogid=blogix)),)]
item.update({"context_menu": ctx, "url": url})
litems.append(item)
xbmc.executebuiltin("Container.SetViewMode({0})".format(str(VIEWTHUMB)))
plugin.set_setting('nosearch', "true")
return litems
@plugin.action()
def follow_blog(params):
blogix = 0
if params.blogid is not None:
blogix = params.blogid
API.FollowBlog(blogix)
showMessage(header="NewTumbl", msg="Blog Followed: " + str(blogix))
@plugin.action()
def like_vid(params):
vidid = 0
if params.vidid is not None:
vidid = params.vidid
if API.LikeVid(vidid):
showMessage(header="NewTumbl", msg="Added Video to Liked: " + str(vidid))
else:
showMessage(header="NewTumbl", msg="Failed to Like Video :( " + str(vidid))
def add_ContextDL(item={}):
ctxlist = []
ctxlist = item.get('context_menu', [])
name = item.get('label', item.get('label2', ''))
vurl = urlquick.unquote(item.get('url', ''))
ctx = ("[COLOR green]Download[/COLOR]", 'RunPlugin("{0}")'.format(plugin.get_url(action="download", video=vurl)),)
ctxlist.append(ctx)
ctx = ("[COLOR orange]Like[/COLOR]", 'RunPlugin("{0}")'.format(plugin.get_url(action="like_vid", vidid=vurl)),)
ctxlist.append(ctx)
item.update({"context_menu": ctxlist})
return item
@plugin.action()
def download(params):
vurl = ''
if params.video is not None:
vurl = params.video
else:
return None
try:
from YDStreamExtractor import getVideoInfo
from YDStreamExtractor import handleDownload
info = getVideoInfo(vurl, resolve_redirects=True)
dlpath = plugin.get_setting('downloadpath')
if not path.exists(dlpath):
dlpath = xbmc.translatePath("home://")
handleDownload(info, bg=True, path=dlpath)
except:
showMessage(msg=vurl, header="Download Failed")
def showMessage(header='', msg=''):
try:
header = str(header.encode('utf-8', 'ignore'))
msg = str(msg.encode('utf-8', 'ignore'))
xbmc.executebuiltin('Notification({0},{1})'.format(header, msg))
except:
print(header + '\n' + msg)
def get_input(default='', settingid='lastsearch'):
if default=='':
default = plugin.get_setting(settingid)
if bool(plugin.get_setting('nosearch')):
return default
kb = xbmc.Keyboard(default, 'Search NewTumbl')
kb.setDefault(default)
kb.setHeading('NewTumbl')
kb.setHiddenInput(False)
kb.doModal()
if (kb.isConfirmed()):
search_term = kb.getText()
plugin.set_setting(settingid, search_term)
return(search_term)
else:
return None
if __name__ == '__main__':
# Run our plugin
xbmcplugin.setContent(handle, 'movies')
userid = plugin.get_setting('userid')
usertoken = plugin.get_setting('usertoken')
VIEWTHUMB = plugin.get_setting('viewthumb')
VIEWLIST = plugin.get_setting('viewlist')
API.UserId = userid
API.UserToken = usertoken
plugin.run()
xbmcplugin.setPluginCategory(handle, 'porn')
xbmc.executebuiltin("Container.SetViewMode({0})".format(str(VIEWTHUMB)))
#xbmc.executebuiltin('Skin.SetBool(SkinHelper.EnableAnimatedPosters)')