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.
Files changed (101) hide show
  1. {unit3dup-0.9.5 → unit3dup-0.9.8}/PKG-INFO +1 -1
  2. {unit3dup-0.9.5 → unit3dup-0.9.8}/Unit3Dup.egg-info/PKG-INFO +1 -1
  3. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/p2p_tags.py +43 -16
  4. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/settings.py +1 -1
  5. {unit3dup-0.9.5 → unit3dup-0.9.8}/pyproject.toml +1 -1
  6. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/media.py +1 -2
  7. {unit3dup-0.9.5 → unit3dup-0.9.8}/LICENSE +0 -0
  8. {unit3dup-0.9.5 → unit3dup-0.9.8}/README.rst +0 -0
  9. {unit3dup-0.9.5 → unit3dup-0.9.8}/Unit3Dup.egg-info/SOURCES.txt +0 -0
  10. {unit3dup-0.9.5 → unit3dup-0.9.8}/Unit3Dup.egg-info/dependency_links.txt +0 -0
  11. {unit3dup-0.9.5 → unit3dup-0.9.8}/Unit3Dup.egg-info/entry_points.txt +0 -0
  12. {unit3dup-0.9.5 → unit3dup-0.9.8}/Unit3Dup.egg-info/requires.txt +0 -0
  13. {unit3dup-0.9.5 → unit3dup-0.9.8}/Unit3Dup.egg-info/top_level.txt +0 -0
  14. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/__init__.py +0 -0
  15. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/bdinfo_string.py +0 -0
  16. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/bittorrent.py +0 -0
  17. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/command.py +0 -0
  18. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/constants.py +0 -0
  19. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/database.py +0 -0
  20. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/__init__.py +0 -0
  21. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/ftpx/__init__.py +0 -0
  22. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/ftpx/client.py +0 -0
  23. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/ftpx/core/__init__.py +0 -0
  24. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/ftpx/core/ftpx_service.py +0 -0
  25. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/ftpx/core/ftpx_session.py +0 -0
  26. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/ftpx/core/menu.py +0 -0
  27. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/ftpx/core/models/__init__.py +0 -0
  28. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/ftpx/core/models/list.py +0 -0
  29. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/igdb/__init__.py +0 -0
  30. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/igdb/client.py +0 -0
  31. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/igdb/core/__init__.py +0 -0
  32. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/igdb/core/api.py +0 -0
  33. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/igdb/core/models/__init__.py +0 -0
  34. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/igdb/core/models/search.py +0 -0
  35. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/igdb/core/platformid.py +0 -0
  36. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/igdb/core/tags.py +0 -0
  37. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/imageHost.py +0 -0
  38. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/mediaresult.py +0 -0
  39. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/sessions/__init__.py +0 -0
  40. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/sessions/agents.py +0 -0
  41. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/sessions/exceptions.py +0 -0
  42. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/sessions/session.py +0 -0
  43. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/__init__.py +0 -0
  44. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/__init__.py +0 -0
  45. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/api.py +0 -0
  46. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/keywords.py +0 -0
  47. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/__init__.py +0 -0
  48. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/movie/__init__.py +0 -0
  49. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/movie/alternative_titles.py +0 -0
  50. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/movie/details.py +0 -0
  51. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/movie/movie.py +0 -0
  52. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/movie/nowplaying.py +0 -0
  53. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/movie/release_info.py +0 -0
  54. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/tvshow/__init__.py +0 -0
  55. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/tvshow/alternative.py +0 -0
  56. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/tvshow/details.py +0 -0
  57. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/tvshow/on_the_air.py +0 -0
  58. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/tvshow/translations.py +0 -0
  59. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/models/tvshow/tvshow.py +0 -0
  60. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/theMovieDB/core/videos.py +0 -0
  61. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/trailers/__init__.py +0 -0
  62. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/trailers/api.py +0 -0
  63. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/trailers/response.py +0 -0
  64. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/external_services/tvdb.py +0 -0
  65. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/extractor.py +0 -0
  66. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/frames.py +0 -0
  67. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/mediainfo.py +0 -0
  68. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/mediainfo_string.py +0 -0
  69. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/title.py +0 -0
  70. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/torrent_clients.py +0 -0
  71. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/trackers/__init__.py +0 -0
  72. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/trackers/data.py +0 -0
  73. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/trackers/itt.py +0 -0
  74. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/trackers/sis.py +0 -0
  75. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/trackers/trackers.py +0 -0
  76. {unit3dup-0.9.5 → unit3dup-0.9.8}/common/utility.py +0 -0
  77. {unit3dup-0.9.5 → unit3dup-0.9.8}/requirements.txt +0 -0
  78. {unit3dup-0.9.5 → unit3dup-0.9.8}/setup.cfg +0 -0
  79. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/__init__.py +0 -0
  80. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/__main__.py +0 -0
  81. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/automode.py +0 -0
  82. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/bot.py +0 -0
  83. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/duplicate.py +0 -0
  84. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/exceptions.py +0 -0
  85. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/media_manager/ContentManager.py +0 -0
  86. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/media_manager/DocuManager.py +0 -0
  87. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/media_manager/GameManager.py +0 -0
  88. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/media_manager/MediaInfoManager.py +0 -0
  89. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/media_manager/SeedManager.py +0 -0
  90. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/media_manager/TorrentManager.py +0 -0
  91. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/media_manager/VideoManager.py +0 -0
  92. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/media_manager/__init__.py +0 -0
  93. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/media_manager/common.py +0 -0
  94. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/pvtDocu.py +0 -0
  95. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/pvtTorrent.py +0 -0
  96. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/pvtTracker.py +0 -0
  97. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/pvtVideo.py +0 -0
  98. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/torrent.py +0 -0
  99. {unit3dup-0.9.5 → unit3dup-0.9.8}/unit3dup/upload.py +0 -0
  100. {unit3dup-0.9.5 → unit3dup-0.9.8}/view/__init__.py +0 -0
  101. {unit3dup-0.9.5 → unit3dup-0.9.8}/view/custom_console.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Unit3Dup
3
- Version: 0.9.5
3
+ Version: 0.9.8
4
4
  Summary: An uploader for the Unit3D torrent tracker
5
5
  Author: Parzival
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Unit3Dup
3
- Version: 0.9.5
3
+ Version: 0.9.8
4
4
  Summary: An uploader for the Unit3D torrent tracker
5
5
  Author: Parzival
6
6
  License-Expression: MIT
@@ -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 defaultdict, deque
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('encoded_library_name',
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 audio language if there is no audio categories
179
- if 'flag' not in categories:
180
- tags_match.extend(self._audio_lang())
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
- lang.append(c)
315
- break
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.5"
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"
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
  [project]
6
6
  dynamic = ["dependencies"]
7
7
  name = "Unit3Dup"
8
- version = "0.9.5"
8
+ version = "0.9.8"
9
9
  description = "An uploader for the Unit3D torrent tracker"
10
10
  readme = "README.rst"
11
11
  requires-python = ">=3.10"
@@ -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.file_name,
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