Unit3Dup 0.14.6__tar.gz → 0.14.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 (107) hide show
  1. {unit3dup-0.14.6 → unit3dup-0.14.8}/PKG-INFO +1 -1
  2. {unit3dup-0.14.6 → unit3dup-0.14.8}/Unit3Dup.egg-info/PKG-INFO +1 -1
  3. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/imageHost.py +1 -1
  4. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/theMovieDB/core/api.py +7 -6
  5. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/trailers/api.py +1 -3
  6. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/settings.py +1 -1
  7. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/tags.py +2 -4
  8. {unit3dup-0.14.6 → unit3dup-0.14.8}/pyproject.toml +1 -1
  9. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/media_manager/VideoManager.py +15 -3
  10. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/media_manager/common.py +1 -2
  11. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/pvtVideo.py +1 -1
  12. {unit3dup-0.14.6 → unit3dup-0.14.8}/LICENSE +0 -0
  13. {unit3dup-0.14.6 → unit3dup-0.14.8}/README.rst +0 -0
  14. {unit3dup-0.14.6 → unit3dup-0.14.8}/Unit3Dup.egg-info/SOURCES.txt +0 -0
  15. {unit3dup-0.14.6 → unit3dup-0.14.8}/Unit3Dup.egg-info/dependency_links.txt +0 -0
  16. {unit3dup-0.14.6 → unit3dup-0.14.8}/Unit3Dup.egg-info/entry_points.txt +0 -0
  17. {unit3dup-0.14.6 → unit3dup-0.14.8}/Unit3Dup.egg-info/requires.txt +0 -0
  18. {unit3dup-0.14.6 → unit3dup-0.14.8}/Unit3Dup.egg-info/top_level.txt +0 -0
  19. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/__init__.py +0 -0
  20. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/bdinfo_string.py +0 -0
  21. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/bittorrent.py +0 -0
  22. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/command.py +0 -0
  23. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/constants.py +0 -0
  24. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/database.py +0 -0
  25. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/__init__.py +0 -0
  26. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/ftpx/__init__.py +0 -0
  27. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/ftpx/client.py +0 -0
  28. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/ftpx/core/__init__.py +0 -0
  29. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/ftpx/core/ftpx_service.py +0 -0
  30. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/ftpx/core/ftpx_session.py +0 -0
  31. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/ftpx/core/menu.py +0 -0
  32. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/ftpx/core/models/__init__.py +0 -0
  33. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/ftpx/core/models/list.py +0 -0
  34. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/igdb/__init__.py +0 -0
  35. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/igdb/client.py +0 -0
  36. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/igdb/core/__init__.py +0 -0
  37. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/igdb/core/api.py +0 -0
  38. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/igdb/core/models/__init__.py +0 -0
  39. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/igdb/core/models/search.py +0 -0
  40. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/igdb/core/platformid.py +0 -0
  41. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/igdb/core/tags.py +0 -0
  42. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/mediaresult.py +0 -0
  43. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/sessions/__init__.py +0 -0
  44. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/sessions/agents.py +0 -0
  45. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/sessions/exceptions.py +0 -0
  46. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/sessions/session.py +0 -0
  47. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/theMovieDB/__init__.py +0 -0
  48. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/theMovieDB/core/__init__.py +0 -0
  49. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/theMovieDB/core/keywords.py +0 -0
  50. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/theMovieDB/core/models/__init__.py +0 -0
  51. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/theMovieDB/core/models/movie/__init__.py +0 -0
  52. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/theMovieDB/core/models/movie/alternative.py +0 -0
  53. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/theMovieDB/core/models/movie/details.py +0 -0
  54. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/theMovieDB/core/models/movie/movie.py +0 -0
  55. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/theMovieDB/core/models/movie/nowplaying.py +0 -0
  56. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/theMovieDB/core/models/movie/release_info.py +0 -0
  57. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/theMovieDB/core/models/movie/translations.py +0 -0
  58. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/theMovieDB/core/models/tvshow/__init__.py +0 -0
  59. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/theMovieDB/core/models/tvshow/alternative.py +0 -0
  60. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/theMovieDB/core/models/tvshow/details.py +0 -0
  61. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/theMovieDB/core/models/tvshow/on_the_air.py +0 -0
  62. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/theMovieDB/core/models/tvshow/translations.py +0 -0
  63. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/theMovieDB/core/models/tvshow/tvshow.py +0 -0
  64. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/theMovieDB/core/videos.py +0 -0
  65. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/trailers/__init__.py +0 -0
  66. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/trailers/response.py +0 -0
  67. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/external_services/tvdb.py +0 -0
  68. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/extractor.py +0 -0
  69. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/frames.py +0 -0
  70. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/mediainfo.py +0 -0
  71. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/mediainfo_string.py +0 -0
  72. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/title.py +0 -0
  73. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/torrent_clients.py +0 -0
  74. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/trackers/__init__.py +0 -0
  75. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/trackers/ast.py +0 -0
  76. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/trackers/ban_list.py +0 -0
  77. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/trackers/data.py +0 -0
  78. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/trackers/itt.py +0 -0
  79. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/trackers/ptt.py +0 -0
  80. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/trackers/signs_list.py +0 -0
  81. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/trackers/sis.py +0 -0
  82. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/trackers/tags_list.py +0 -0
  83. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/trackers/trackers.py +0 -0
  84. {unit3dup-0.14.6 → unit3dup-0.14.8}/common/utility.py +0 -0
  85. {unit3dup-0.14.6 → unit3dup-0.14.8}/requirements.txt +0 -0
  86. {unit3dup-0.14.6 → unit3dup-0.14.8}/setup.cfg +0 -0
  87. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/__init__.py +0 -0
  88. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/__main__.py +0 -0
  89. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/automode.py +0 -0
  90. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/bot.py +0 -0
  91. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/duplicate.py +0 -0
  92. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/exceptions.py +0 -0
  93. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/media.py +0 -0
  94. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/media_manager/ContentManager.py +0 -0
  95. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/media_manager/DocuManager.py +0 -0
  96. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/media_manager/GameManager.py +0 -0
  97. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/media_manager/MediaInfoManager.py +0 -0
  98. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/media_manager/SeedManager.py +0 -0
  99. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/media_manager/TorrentManager.py +0 -0
  100. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/media_manager/__init__.py +0 -0
  101. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/pvtDocu.py +0 -0
  102. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/pvtTorrent.py +0 -0
  103. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/pvtTracker.py +0 -0
  104. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/torrent.py +0 -0
  105. {unit3dup-0.14.6 → unit3dup-0.14.8}/unit3dup/upload.py +0 -0
  106. {unit3dup-0.14.6 → unit3dup-0.14.8}/view/__init__.py +0 -0
  107. {unit3dup-0.14.6 → unit3dup-0.14.8}/view/custom_console.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Unit3Dup
3
- Version: 0.14.6
3
+ Version: 0.14.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.14.6
3
+ Version: 0.14.8
4
4
  Summary: An uploader for the Unit3D torrent tracker
5
5
  Author: Parzival
6
6
  License-Expression: MIT
@@ -277,7 +277,7 @@ class Build:
277
277
  description = "[center]\n"
278
278
  console_url = []
279
279
 
280
- custom_console.bot_log("Starting image upload..")
280
+ custom_console.bot_log(f"\n[STARTING IMAGE UPLOAD..]")
281
281
  _number = 0
282
282
  for img_bytes in self.extracted_frames:
283
283
  _number = _number + 1
@@ -436,9 +436,11 @@ class DbOnline(TmdbAPI):
436
436
  yt_trailer = YtTrailer(self.query)
437
437
  result = yt_trailer.get_trailer_link()
438
438
  if result:
439
- # choose the first in the list
440
- # todo compare against the media title especially for the favorite channel
441
- return result[0].items[0].id.videoId
439
+ for r in result:
440
+ title = r.items[0].snippet.title if r.items else None
441
+ if self.query in title:
442
+ return r.items[0].id.videoId
443
+ return "not available"
442
444
  else:
443
445
  user_youtube_id = custom_console.user_input_str(message="Sorry trailer not found."
444
446
  " Please digit a valid Youtube ID (0=skip)->")
@@ -450,8 +452,7 @@ class DbOnline(TmdbAPI):
450
452
  # Search for tmdb trailer
451
453
  trailers = self._videos(video_id, self.category)
452
454
  if trailers:
453
- trailer = next((video for video in trailers if video.type.lower() == 'trailer'
454
- and video.site.lower() == 'youtube'), None)
455
+ trailer = next((video for video in trailers if video.site.lower() == 'youtube'), None)
455
456
  if trailer:
456
457
  return trailer.key
457
458
  else:
@@ -475,7 +476,7 @@ class DbOnline(TmdbAPI):
475
476
  if results.tvdb_id:
476
477
  custom_console.bot_warning_log(f"'TVDB ID'........ '{results.tvdb_id}'")
477
478
  custom_console.bot_log(f"'TMDB KEYWORDS'.. {results.keywords_list}")
478
- if 'SKIPPED' in results.trailer_key.upper():
479
+ if results.trailer_key.upper() in ['SKIPPED', 'NOT AVAILABLE']:
479
480
  custom_console.bot_log(f"'TRAILER' ....... {results.trailer_key}")
480
481
  else:
481
482
  custom_console.bot_log(f"'TRAILER' ....... https://www.youtube.com/watch?v={results.trailer_key}")
@@ -22,7 +22,7 @@ class YtTrailer:
22
22
  'q': f'{self.title} trailer',
23
23
  'type': 'video',
24
24
  'key': config_settings.tracker_config.YOUTUBE_KEY,
25
- 'maxResults': 3,
25
+ 'maxResults': 50,
26
26
  }
27
27
 
28
28
  def get_trailer_link(self) -> list[YouTubeSearchResponse] | None:
@@ -37,11 +37,9 @@ class YtTrailer:
37
37
  response = None
38
38
 
39
39
  while attempt < max_attempts:
40
- custom_console.bot_log("Searching YouTube for a trailer...")
41
40
  try:
42
41
  response = requests.get(self.url, params=self.params, timeout=5)
43
42
  if response.status_code == 200:
44
- custom_console.bot_log("YouTube Response with no error")
45
43
  break
46
44
  except requests.RequestException:
47
45
  custom_console.error(f"Could not connect to YouTube API {response.status_code}")
@@ -24,7 +24,7 @@ user_tags_file = "tags_list.json"
24
24
  user_sign_file = "sign_list.json"
25
25
  bane_file = "ban_list.json"
26
26
 
27
- version = "0.14.6"
27
+ version = "0.14.8"
28
28
 
29
29
  if os.name == "nt":
30
30
  WATCHER_DESTINATION_PATH: Path = Path(
@@ -142,7 +142,7 @@ class SearchTags(object):
142
142
  refactored = ' '.join(build) + self.releaser_sign
143
143
  return refactored
144
144
 
145
- def process(self) -> str:
145
+ def process(self) -> tuple[str, dict]:
146
146
  patterns = []
147
147
 
148
148
  # Remove banned items from categories
@@ -251,10 +251,8 @@ class SearchTags(object):
251
251
  for k in self.tags_position
252
252
  if k in self.tags_dict
253
253
  }
254
-
255
254
  new_title = self.build_title(tags_dict)
256
-
257
- return new_title
255
+ return new_title, tags_dict
258
256
 
259
257
  def mediainfo_audio(self, category: str) -> dict:
260
258
  languages = []
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
  [project]
6
6
  dynamic = ["dependencies"]
7
7
  name = "Unit3Dup"
8
- version = "0.14.6"
8
+ version = "0.14.8"
9
9
  description = "An uploader for the Unit3D torrent tracker"
10
10
  readme = "README.rst"
11
11
  requires-python = ">=3.10"
@@ -48,6 +48,8 @@ class VideoManager:
48
48
 
49
49
  # Init the torrent list
50
50
  bittorrent_list = []
51
+ # Tags list extracted used to build title ( -b flag)
52
+ tags_dictionary = {}
51
53
  for content in self.contents:
52
54
  # /// User request to build the title; overwriting display_name
53
55
  if self.cli.buildtags:
@@ -67,7 +69,8 @@ class VideoManager:
67
69
  ban_list=self.ban_list,
68
70
  media=content,
69
71
  )
70
- content.display_name = search_tags.process()
72
+ content.display_name, tags_dictionary = search_tags.process()
73
+
71
74
 
72
75
  # get the archive path
73
76
  archive = os.path.join(tracker_archive, selected_tracker)
@@ -103,8 +106,17 @@ class VideoManager:
103
106
  video_info = Video(media=content, tmdb_id=db.video_id, trailer_key=db.trailer_key)
104
107
  video_info.build_info()
105
108
 
106
- # print the title will be shown on the torrent page
107
- custom_console.bot_log(f"'DISPLAYNAME'...{{{content.display_name}}}\n")
109
+ # Tags found ( -b flag)
110
+ if tags_dictionary:
111
+ custom_console.bot_log(f"\n[GENERATING DISPLAYNAME..]")
112
+ for key, value in tags_dictionary.items():
113
+ if isinstance(value, list):
114
+ value = " ".join(value)
115
+ custom_console.bot_log(f"{key:<13} '{value}'")
116
+ custom_console.bot_log(f"Done.\n")
117
+ else:
118
+ # print the title will be shown on the torrent page
119
+ custom_console.bot_log(f"'DISPLAYNAME'...{{{content.display_name}}}\n")
108
120
 
109
121
  # Tracker instance
110
122
  unit3d_up = UploadBot(content=content, tracker_name=selected_tracker, cli=self.cli)
@@ -76,7 +76,6 @@ class UserContent:
76
76
 
77
77
  if not tracker_name_list:
78
78
  tracker_name_list = [selected_tracker]
79
- custom_console.bot_log(f"UPLOAD TO {tracker_name_list}")
80
79
 
81
80
  # // Read the existing torrent file
82
81
  with open(torrent_path, 'rb') as f:
@@ -239,7 +238,7 @@ class UserContent:
239
238
  if not bittorrent_list:
240
239
  return None
241
240
 
242
- custom_console.bot_warning_log(f"\nSending {message} torrents to the "
241
+ custom_console.bot_log(f"\nSending {message} torrents to the "
243
242
  f"{config_settings.torrent_client_config.TORRENT_CLIENT.upper()} client "
244
243
  f"... Please wait")
245
244
 
@@ -94,7 +94,7 @@ class Video:
94
94
  [center][url={config_settings.user_preferences.MY_URL}]Tutte le mie release[/url][/center]
95
95
  """
96
96
 
97
- if 'SKIPPED' not in self.trailer_key.upper() and self.trailer_key.upper() is not None:
97
+ if self.trailer_key is not None and self.trailer_key.upper() not in ['SKIPPED', 'NOT AVAILABLE']:
98
98
  self.description += (f"[b][spoiler=Spoiler: PLAY TRAILER][center][youtube]{self.trailer_key}[/youtube]"
99
99
  f"[/center][/spoiler][/b]")
100
100
  self.is_hd = is_hd
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