Unit3Dup 0.9.5__tar.gz → 0.9.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {unit3dup-0.9.5 → unit3dup-0.9.8}/PKG-INFO +1 -1
- {unit3dup-0.9.5 → unit3dup-0.9.8}/Unit3Dup.egg-info/PKG-INFO +1 -1
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/p2p_tags.py +43 -16
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/settings.py +1 -1
- {unit3dup-0.9.5 → unit3dup-0.9.8}/pyproject.toml +1 -1
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/media.py +1 -2
- {unit3dup-0.9.5 → unit3dup-0.9.8}/LICENSE +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/README.rst +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/Unit3Dup.egg-info/SOURCES.txt +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/Unit3Dup.egg-info/dependency_links.txt +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/Unit3Dup.egg-info/entry_points.txt +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/Unit3Dup.egg-info/requires.txt +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/Unit3Dup.egg-info/top_level.txt +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/__init__.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/bdinfo_string.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/bittorrent.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/command.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/constants.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/database.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/__init__.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/ftpx/__init__.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/ftpx/client.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/ftpx/core/__init__.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/ftpx/core/ftpx_service.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/ftpx/core/ftpx_session.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/ftpx/core/menu.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/ftpx/core/models/__init__.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/ftpx/core/models/list.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/igdb/__init__.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/igdb/client.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/igdb/core/__init__.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/igdb/core/api.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/igdb/core/models/__init__.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/igdb/core/models/search.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/igdb/core/platformid.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/igdb/core/tags.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/imageHost.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/mediaresult.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/sessions/__init__.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/sessions/agents.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/sessions/exceptions.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/sessions/session.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/__init__.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/__init__.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/api.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/keywords.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/__init__.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/movie/__init__.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/movie/alternative_titles.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/movie/details.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/movie/movie.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/movie/nowplaying.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/movie/release_info.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/tvshow/__init__.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/tvshow/alternative.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/tvshow/details.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/tvshow/on_the_air.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/tvshow/translations.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/tvshow/tvshow.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/videos.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/trailers/__init__.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/trailers/api.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/trailers/response.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/tvdb.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/extractor.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/frames.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/mediainfo.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/mediainfo_string.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/title.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/torrent_clients.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/trackers/__init__.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/trackers/data.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/trackers/itt.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/trackers/sis.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/trackers/trackers.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/common/utility.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/requirements.txt +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/setup.cfg +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/__init__.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/__main__.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/automode.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/bot.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/duplicate.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/exceptions.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/media_manager/ContentManager.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/media_manager/DocuManager.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/media_manager/GameManager.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/media_manager/MediaInfoManager.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/media_manager/SeedManager.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/media_manager/TorrentManager.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/media_manager/VideoManager.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/media_manager/__init__.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/media_manager/common.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/pvtDocu.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/pvtTorrent.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/pvtTracker.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/pvtVideo.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/torrent.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/upload.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/view/__init__.py +0 -0
- {unit3dup-0.9.5 → unit3dup-0.9.8}/view/custom_console.py +0 -0
|
@@ -3,7 +3,7 @@ import os
|
|
|
3
3
|
import re
|
|
4
4
|
from common.utility import ManageTitles
|
|
5
5
|
from common.mediainfo import MediaFile
|
|
6
|
-
from collections import
|
|
6
|
+
from collections import deque
|
|
7
7
|
|
|
8
8
|
TAG_TYPES = {
|
|
9
9
|
"WEB-DL": "source",
|
|
@@ -13,6 +13,7 @@ TAG_TYPES = {
|
|
|
13
13
|
"WEBMUX": "source",
|
|
14
14
|
"WEBRIP": "source",
|
|
15
15
|
"BD-UNTOUCHED": "source",
|
|
16
|
+
"REMUX": "source",
|
|
16
17
|
"VU": "source",
|
|
17
18
|
"UHD": "source",
|
|
18
19
|
"BLURAY": "source",
|
|
@@ -58,14 +59,20 @@ TAG_TYPES = {
|
|
|
58
59
|
"FRA": "flag",
|
|
59
60
|
"GER": "flag",
|
|
60
61
|
"ESP": "flag",
|
|
62
|
+
"JPN": "flag",
|
|
63
|
+
"JAP": "flag",
|
|
64
|
+
"POR": "flag",
|
|
65
|
+
"PRT": "flag",
|
|
61
66
|
|
|
62
67
|
"ATMOS": "audio",
|
|
63
68
|
"TRUEHD": "audio",
|
|
64
69
|
"DTSHD": "audio",
|
|
65
70
|
"DTS-HD": "audio",
|
|
71
|
+
"DTS-HD MA": "audio",
|
|
66
72
|
"DDP7.1": "audio",
|
|
67
73
|
"DDP5.1": "audio",
|
|
68
74
|
"DDP2.0": "audio",
|
|
75
|
+
"DTS": "audio",
|
|
69
76
|
|
|
70
77
|
"DD7.1": "audio",
|
|
71
78
|
"DD5.1": "audio",
|
|
@@ -112,6 +119,12 @@ TAG_TYPES = {
|
|
|
112
119
|
"HDR10PLUS": "video",
|
|
113
120
|
"HDR": "video",
|
|
114
121
|
"HDR10+": "video",
|
|
122
|
+
"FHDRIP": "video",
|
|
123
|
+
"UHDRIP": "video",
|
|
124
|
+
"FULL HD": "video",
|
|
125
|
+
"FULLHD": "video",
|
|
126
|
+
"HD": "video",
|
|
127
|
+
"UHD 4K": "video",
|
|
115
128
|
|
|
116
129
|
"4320P": "resolution",
|
|
117
130
|
"2160P": "resolution",
|
|
@@ -146,7 +159,6 @@ class P2pTags:
|
|
|
146
159
|
|
|
147
160
|
# Search for tags in the title
|
|
148
161
|
tags_match = pattern.findall(filename.upper())
|
|
149
|
-
|
|
150
162
|
# remove dope
|
|
151
163
|
tags_match = list(dict.fromkeys(tags_match))
|
|
152
164
|
|
|
@@ -166,8 +178,7 @@ class P2pTags:
|
|
|
166
178
|
|
|
167
179
|
# Add video codec only if there is no video categories
|
|
168
180
|
if 'video' not in categories:
|
|
169
|
-
video_codec = self.mediafile.video_track[0].get('
|
|
170
|
-
"") if self.mediafile.video_track else ""
|
|
181
|
+
video_codec = self.mediafile.video_track[0].get('format', "") if self.mediafile.video_track else ""
|
|
171
182
|
tags_match.append(video_codec)
|
|
172
183
|
|
|
173
184
|
# Add audio codec only if there is no audio categories
|
|
@@ -175,9 +186,12 @@ class P2pTags:
|
|
|
175
186
|
audio_format = self.mediafile.audio_track[0].get('format', "") if self.mediafile.audio_track else ""
|
|
176
187
|
tags_match.append(audio_format)
|
|
177
188
|
|
|
178
|
-
# Add
|
|
179
|
-
|
|
180
|
-
|
|
189
|
+
# Add tag language if there is no tag
|
|
190
|
+
flags = self._audio_lang()
|
|
191
|
+
# are all the language tags from mediaInfo available in the title?
|
|
192
|
+
if len(flags) != tags_match.count('flag'):
|
|
193
|
+
missing_flags = [tag for tag in flags if tag not in tags_match]
|
|
194
|
+
tags_match.extend(missing_flags)
|
|
181
195
|
|
|
182
196
|
# Add subtitle tag if subtitle_track exist and there is no 'sub' in the title
|
|
183
197
|
if 'subtitle' not in categories:
|
|
@@ -197,6 +211,19 @@ class P2pTags:
|
|
|
197
211
|
"DDP": "DD+",
|
|
198
212
|
}
|
|
199
213
|
|
|
214
|
+
# Translate video codec
|
|
215
|
+
video_translate = {
|
|
216
|
+
"H.264": "x264",
|
|
217
|
+
"X.264": "x264",
|
|
218
|
+
"X264": "x264",
|
|
219
|
+
"AVC": "x264",
|
|
220
|
+
"H.265": "x265",
|
|
221
|
+
"H265": "x265",
|
|
222
|
+
"X.265": "x265",
|
|
223
|
+
"X265": "x265",
|
|
224
|
+
"HEVC": "x265",
|
|
225
|
+
}
|
|
226
|
+
|
|
200
227
|
# lower the res..
|
|
201
228
|
resolution_lower = {"4320P", "2160P", "1080P", "720P", "576P", "480P"}
|
|
202
229
|
codec_lower = {'X.264', 'X265', 'X.265', 'X264'}
|
|
@@ -209,13 +236,15 @@ class P2pTags:
|
|
|
209
236
|
t = tag.upper()
|
|
210
237
|
if t in audio_translate:
|
|
211
238
|
codec = audio_translate[t]
|
|
212
|
-
|
|
213
239
|
# Add channels only if it does not exist
|
|
214
240
|
if ch and not has_channel_tag:
|
|
215
241
|
tag = f"{codec} {ch}"
|
|
216
242
|
else:
|
|
217
243
|
tag = codec
|
|
218
244
|
|
|
245
|
+
elif t in video_translate:
|
|
246
|
+
tag = video_translate[t]
|
|
247
|
+
|
|
219
248
|
# Lower the res
|
|
220
249
|
elif t in resolution_lower:
|
|
221
250
|
tag = t.lower()
|
|
@@ -236,15 +265,9 @@ class P2pTags:
|
|
|
236
265
|
if not any(TAG_TYPES.get(tag.upper()) == "resolution" for tag in tags_match):
|
|
237
266
|
tags_match.append(self.mediafile_resolution)
|
|
238
267
|
|
|
239
|
-
# Assign an index to the 'precedence' keywords
|
|
240
|
-
# precedence_index = {}
|
|
241
|
-
# for i, v in enumerate(self.tags_position):
|
|
242
|
-
# precedence_index[v] = i
|
|
243
|
-
|
|
244
268
|
# /// Sort tags based on 2 rules:
|
|
245
269
|
# 1) Order by tag_positions
|
|
246
270
|
# 2) For audio and flag categories alternate them (audio/flag/audio/flag)
|
|
247
|
-
|
|
248
271
|
# We can't sort each tags so we create dedicated list
|
|
249
272
|
audio_q = deque()
|
|
250
273
|
flag_q = deque()
|
|
@@ -311,8 +334,12 @@ class P2pTags:
|
|
|
311
334
|
for t in l:
|
|
312
335
|
c = ManageTitles.convert_iso(t)
|
|
313
336
|
if c:
|
|
314
|
-
|
|
315
|
-
|
|
337
|
+
if isinstance(c,list):
|
|
338
|
+
lang.extend(c)
|
|
339
|
+
break
|
|
340
|
+
else:
|
|
341
|
+
lang.append(c)
|
|
342
|
+
break
|
|
316
343
|
return lang
|
|
317
344
|
|
|
318
345
|
def process(self) -> str:
|
|
@@ -15,7 +15,7 @@ from common.utility import ManageTitles
|
|
|
15
15
|
from common import trackers
|
|
16
16
|
|
|
17
17
|
config_file = "Unit3Dbot.json"
|
|
18
|
-
version = "0.9.
|
|
18
|
+
version = "0.9.8"
|
|
19
19
|
|
|
20
20
|
if os.name == "nt":
|
|
21
21
|
WATCHER_DESTINATION_PATH: Path = Path(os.getenv("LOCALAPPDATA", ".")) / "Unit3Dup_config" / "watcher_destination_path"
|
|
@@ -222,7 +222,7 @@ class Media:
|
|
|
222
222
|
if not self._display_name:
|
|
223
223
|
self._guess_filename = title.Guessit(self.title_sanitized)
|
|
224
224
|
guess = self._guess_filename.guessit
|
|
225
|
-
p2p_tags = P2pTags(filename=self.
|
|
225
|
+
p2p_tags = P2pTags(filename=self.title_sanitized,
|
|
226
226
|
title=guess.get("title", None),
|
|
227
227
|
year=guess.get("year", ""),
|
|
228
228
|
episode_title=guess.get("episode_title", None),
|
|
@@ -350,7 +350,6 @@ class Media:
|
|
|
350
350
|
}:
|
|
351
351
|
# Read from the current video file the height field
|
|
352
352
|
file_path = os.path.join(self.folder, self.file_name)
|
|
353
|
-
|
|
354
353
|
# Media file
|
|
355
354
|
self._media_file = MediaFile(file_path)
|
|
356
355
|
return self._media_file
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/__init__.py
RENAMED
|
File without changes
|
{unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/movie/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/movie/details.py
RENAMED
|
File without changes
|
{unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/movie/movie.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/tvshow/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/tvshow/details.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/tvshow/tvshow.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|