forked from soju6jan/metadata
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlogic_jav_censored_ama.py
executable file
·258 lines (222 loc) · 9.82 KB
/
logic_jav_censored_ama.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
# third-party
from flask import jsonify, render_template
# sjva 공용
from framework import SystemModelSetting
from lib_metadata import MetadataServerUtil, SiteDmm, SiteJav321, SiteJavbus, SiteMgstageAma, SiteUtil
from plugin import LogicModuleBase
# 패키지
from .plugin import P
logger = P.logger
package_name = P.package_name
ModelSetting = P.ModelSetting
#########################################################
class LogicJavCensoredAma(LogicModuleBase):
db_default = {
"jav_censored_ama_db_version": "1",
"jav_censored_ama_order": "mgsama jav321",
"jav_censored_ama_title_format": "[{title}] {tagline}",
"jav_censored_ama_tag_option": "2",
"jav_censored_ama_use_extras": "True",
# mgsama
"jav_censored_ama_mgsama_use_sjva": "False",
"jav_censored_ama_mgsama_use_proxy": "False",
"jav_censored_ama_mgsama_proxy_url": "",
"jav_censored_ama_mgsama_image_mode": "0",
"jav_censored_ama_mgsama_small_image_to_poster": "",
"jav_censored_ama_mgsama_crop_mode": "",
"jav_censored_ama_mgsama_title_format": "[{title}] {tagline}",
"jav_censored_ama_mgsama_art_count": "0",
"jav_censored_ama_mgsama_tag_option": "0",
"jav_censored_ama_mgsama_use_extras": "True",
"jav_censored_ama_mgsama_test_code": "siro-5107",
# jav321
"jav_censored_ama_jav321_use_sjva": "False",
"jav_censored_ama_jav321_use_proxy": "False",
"jav_censored_ama_jav321_proxy_url": "",
"jav_censored_ama_jav321_image_mode": "0",
"jav_censored_ama_jav321_small_image_to_poster": "",
"jav_censored_ama_jav321_crop_mode": "",
"jav_censored_ama_jav321_title_format": "[{title}] {tagline}",
"jav_censored_ama_jav321_art_count": "0",
"jav_censored_ama_jav321_tag_option": "0",
"jav_censored_ama_jav321_use_extras": "True",
"jav_censored_ama_jav321_test_code": "ara-464",
}
site_map = {
"dmm": SiteDmm,
"jav321": SiteJav321,
"javbus": SiteJavbus,
"mgsama": SiteMgstageAma,
}
db_prefix = {
"dmm": "jav_censored",
"javbus": "jav_censored",
}
def __init__(self, PM):
super().__init__(PM, "setting")
self.name = "jav_censored_ama"
def process_menu(self, sub, req):
arg = ModelSetting.to_dict()
arg["sub"] = self.name
try:
return render_template(f"{package_name}_{self.name}_{sub}.html", arg=arg)
except Exception:
logger.exception("메뉴 처리 중 예외:")
return render_template("sample.html", title=f"{package_name} - {sub}")
def process_ajax(self, sub, req):
try:
if sub == "test":
code = req.form["code"]
call = req.form["call"]
ModelSetting.set(f"{self.name}_{call}_test_code", code)
data = self.search2(code, call)
if data is None:
return jsonify({"ret": "no_match", "log": f"no results for '{code}' by '{call}'"})
return jsonify({"search": data, "info": self.info(data[0]["code"])})
except Exception as e:
logger.exception("AJAX 요청 처리 중 예외:")
return jsonify({"ret": "exception", "log": str(e)})
def process_api(self, sub, req):
if sub == "search":
keyword = req.args.get("keyword")
manual = req.args.get("manual") == "True"
return jsonify(self.search(keyword, manual=manual))
if sub == "info":
return jsonify(self.info(req.args.get("code")))
return None
#########################################################
def search2(self, keyword, site, manual=False):
SiteClass = self.site_map.get(site, None)
if SiteClass is None:
return None
sett = self.__site_settings(site)
data = SiteClass.search(keyword, do_trans=manual, manual=manual, **sett)
if data["ret"] == "success" and len(data["data"]) > 0:
return data["data"]
return None
def search(self, keyword, manual=False):
ret = []
site_list = ModelSetting.get_list(f"{self.name}_order", ",")
for idx, site in enumerate(site_list):
data = self.search2(keyword, site, manual=manual)
if data is not None:
for item in data:
item["score"] -= idx
ret += data
ret = sorted(ret, key=lambda k: k["score"], reverse=True)
if manual:
continue
if len(ret) > 0 and ret[0]["score"] > 95:
break
return ret
def info(self, code):
if code[1] == "T":
site = "jav321"
elif code[1] == "D":
site = "dmm"
elif code[1] == "B":
site = "javbus"
elif code[1] == "M":
site = "mgsama"
else:
logger.error("처리할 수 없는 코드: code=%s", code)
return None
ret = self.info2(code, site)
if ret is None:
return ret
db_prefix = f"{self.db_prefix.get(site, self.name)}_{site}"
# lib_metadata로부터 받은 데이터를 가공
ret["plex_is_proxy_preview"] = True # ModelSetting.get_bool('jav_censored_plex_is_proxy_preview')
ret["plex_is_landscape_to_art"] = True # ModelSetting.get_bool('jav_censored_plex_landscape_to_art')
ret["plex_art_count"] = len(ret["fanart"])
actors = ret["actor"] or []
for item in actors:
self.P.logic.get_module("jav_censored").process_actor(item)
try:
name_ja, name_ko = item["originalname"], item["name"]
if name_ja and name_ko:
name_trans = SiteUtil.trans(name_ja)
if name_trans != name_ko:
ret["plot"] = ret["plot"].replace(name_trans, name_ko)
ret["tagline"] = ret["tagline"].replace(name_trans, name_ko)
for extra in ret["extras"] or []:
extra["title"] = extra["title"].replace(name_trans, name_ko)
except Exception:
logger.exception("오역된 배우 이름이 들어간 항목 수정 중 예외:")
ret["title"] = ModelSetting.get(f"{db_prefix}_title_format").format(
originaltitle=ret["originaltitle"],
plot=ret["plot"],
title=ret["title"],
sorttitle=ret["sorttitle"],
runtime=ret["runtime"],
country=ret["country"],
premiered=ret["premiered"],
year=ret["year"],
actor=actors[0].get("name", "") if actors else "",
tagline=ret["tagline"] or "",
)
if "tag" in ret:
tag_option = ModelSetting.get(f"{db_prefix}_tag_option")
if tag_option == "0":
ret["tag"] = []
elif tag_option == "1":
ret["tag"] = [ret["originaltitle"].split("-")[0]]
elif tag_option == "3":
tmp = []
for _ in ret.get("tag", []):
if _ != ret["originaltitle"].split("-")[0]:
tmp.append(_)
ret["tag"] = tmp
return ret
def info2(self, code, site):
db_prefix = f"{self.db_prefix.get(site, self.name)}_{site}"
use_sjva = ModelSetting.get_bool(f"{db_prefix}_use_sjva")
if use_sjva:
ret = MetadataServerUtil.get_metadata(code)
if ret is not None:
logger.debug("서버로부터 메타 정보 가져옴: %s", code)
return ret
SiteClass = self.site_map.get(site, None)
if SiteClass is None:
return None
sett = self.__info_settings(site, code)
data = SiteClass.info(code, **sett)
if data["ret"] != "success":
return None
ret = data["data"]
trans_ok = (
SystemModelSetting.get("trans_type") == "1" and SystemModelSetting.get("trans_google_api_key").strip() != ""
) or SystemModelSetting.get("trans_type") in ["3", "4"]
if use_sjva and sett["image_mode"] == "3" and trans_ok:
MetadataServerUtil.set_metadata_jav_censored(code, ret, ret["title"].lower())
return ret
def __site_settings(self, site: str):
db_prefix = f"{self.db_prefix.get(site, self.name)}_{site}"
proxy_url = None
if ModelSetting.get_bool(f"{db_prefix}_use_proxy"):
proxy_url = ModelSetting.get(f"{db_prefix}_proxy_url")
return {
"proxy_url": proxy_url,
"image_mode": ModelSetting.get(f"{db_prefix}_image_mode"),
}
def __info_settings(self, site: str, code: str):
db_prefix = f"{self.db_prefix.get(site, self.name)}_{site}"
sett = self.__site_settings(site)
sett["max_arts"] = ModelSetting.get_int(f"{db_prefix}_art_count")
sett["use_extras"] = ModelSetting.get_bool(f"{db_prefix}_use_extras")
ps_to_poster = False
for tmp in ModelSetting.get_list(f"{db_prefix}_small_image_to_poster", ","):
if tmp in code:
ps_to_poster = True
break
sett["ps_to_poster"] = ps_to_poster
crop_mode = None
for tmp in ModelSetting.get(f"{db_prefix}_crop_mode").splitlines():
tmp = list(map(str.strip, tmp.split(":")))
if len(tmp) != 2:
continue
if tmp[0] in code and tmp[1] in ["r", "l", "c"]:
crop_mode = tmp[1]
break
sett["crop_mode"] = crop_mode
return sett