Unit3Dup 0.14.4__tar.gz → 0.14.7__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.4 → unit3dup-0.14.7}/PKG-INFO +1 -1
  2. {unit3dup-0.14.4 → unit3dup-0.14.7}/Unit3Dup.egg-info/PKG-INFO +1 -1
  3. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/theMovieDB/core/api.py +11 -7
  4. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/trailers/api.py +4 -6
  5. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/settings.py +4 -6
  6. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/trackers/signs_list.py +1 -0
  7. {unit3dup-0.14.4 → unit3dup-0.14.7}/pyproject.toml +1 -1
  8. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/__main__.py +1 -0
  9. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/pvtVideo.py +2 -2
  10. {unit3dup-0.14.4 → unit3dup-0.14.7}/LICENSE +0 -0
  11. {unit3dup-0.14.4 → unit3dup-0.14.7}/README.rst +0 -0
  12. {unit3dup-0.14.4 → unit3dup-0.14.7}/Unit3Dup.egg-info/SOURCES.txt +0 -0
  13. {unit3dup-0.14.4 → unit3dup-0.14.7}/Unit3Dup.egg-info/dependency_links.txt +0 -0
  14. {unit3dup-0.14.4 → unit3dup-0.14.7}/Unit3Dup.egg-info/entry_points.txt +0 -0
  15. {unit3dup-0.14.4 → unit3dup-0.14.7}/Unit3Dup.egg-info/requires.txt +0 -0
  16. {unit3dup-0.14.4 → unit3dup-0.14.7}/Unit3Dup.egg-info/top_level.txt +0 -0
  17. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/__init__.py +0 -0
  18. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/bdinfo_string.py +0 -0
  19. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/bittorrent.py +0 -0
  20. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/command.py +0 -0
  21. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/constants.py +0 -0
  22. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/database.py +0 -0
  23. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/__init__.py +0 -0
  24. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/ftpx/__init__.py +0 -0
  25. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/ftpx/client.py +0 -0
  26. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/ftpx/core/__init__.py +0 -0
  27. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/ftpx/core/ftpx_service.py +0 -0
  28. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/ftpx/core/ftpx_session.py +0 -0
  29. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/ftpx/core/menu.py +0 -0
  30. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/ftpx/core/models/__init__.py +0 -0
  31. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/ftpx/core/models/list.py +0 -0
  32. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/igdb/__init__.py +0 -0
  33. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/igdb/client.py +0 -0
  34. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/igdb/core/__init__.py +0 -0
  35. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/igdb/core/api.py +0 -0
  36. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/igdb/core/models/__init__.py +0 -0
  37. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/igdb/core/models/search.py +0 -0
  38. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/igdb/core/platformid.py +0 -0
  39. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/igdb/core/tags.py +0 -0
  40. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/imageHost.py +0 -0
  41. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/mediaresult.py +0 -0
  42. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/sessions/__init__.py +0 -0
  43. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/sessions/agents.py +0 -0
  44. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/sessions/exceptions.py +0 -0
  45. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/sessions/session.py +0 -0
  46. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/theMovieDB/__init__.py +0 -0
  47. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/theMovieDB/core/__init__.py +0 -0
  48. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/theMovieDB/core/keywords.py +0 -0
  49. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/theMovieDB/core/models/__init__.py +0 -0
  50. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/theMovieDB/core/models/movie/__init__.py +0 -0
  51. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/theMovieDB/core/models/movie/alternative.py +0 -0
  52. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/theMovieDB/core/models/movie/details.py +0 -0
  53. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/theMovieDB/core/models/movie/movie.py +0 -0
  54. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/theMovieDB/core/models/movie/nowplaying.py +0 -0
  55. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/theMovieDB/core/models/movie/release_info.py +0 -0
  56. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/theMovieDB/core/models/movie/translations.py +0 -0
  57. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/theMovieDB/core/models/tvshow/__init__.py +0 -0
  58. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/theMovieDB/core/models/tvshow/alternative.py +0 -0
  59. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/theMovieDB/core/models/tvshow/details.py +0 -0
  60. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/theMovieDB/core/models/tvshow/on_the_air.py +0 -0
  61. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/theMovieDB/core/models/tvshow/translations.py +0 -0
  62. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/theMovieDB/core/models/tvshow/tvshow.py +0 -0
  63. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/theMovieDB/core/videos.py +0 -0
  64. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/trailers/__init__.py +0 -0
  65. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/trailers/response.py +0 -0
  66. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/external_services/tvdb.py +0 -0
  67. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/extractor.py +0 -0
  68. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/frames.py +0 -0
  69. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/mediainfo.py +0 -0
  70. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/mediainfo_string.py +0 -0
  71. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/tags.py +0 -0
  72. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/title.py +0 -0
  73. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/torrent_clients.py +0 -0
  74. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/trackers/__init__.py +0 -0
  75. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/trackers/ast.py +0 -0
  76. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/trackers/ban_list.py +0 -0
  77. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/trackers/data.py +0 -0
  78. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/trackers/itt.py +0 -0
  79. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/trackers/ptt.py +0 -0
  80. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/trackers/sis.py +0 -0
  81. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/trackers/tags_list.py +0 -0
  82. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/trackers/trackers.py +0 -0
  83. {unit3dup-0.14.4 → unit3dup-0.14.7}/common/utility.py +0 -0
  84. {unit3dup-0.14.4 → unit3dup-0.14.7}/requirements.txt +0 -0
  85. {unit3dup-0.14.4 → unit3dup-0.14.7}/setup.cfg +0 -0
  86. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/__init__.py +0 -0
  87. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/automode.py +0 -0
  88. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/bot.py +0 -0
  89. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/duplicate.py +0 -0
  90. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/exceptions.py +0 -0
  91. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/media.py +0 -0
  92. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/media_manager/ContentManager.py +0 -0
  93. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/media_manager/DocuManager.py +0 -0
  94. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/media_manager/GameManager.py +0 -0
  95. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/media_manager/MediaInfoManager.py +0 -0
  96. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/media_manager/SeedManager.py +0 -0
  97. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/media_manager/TorrentManager.py +0 -0
  98. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/media_manager/VideoManager.py +0 -0
  99. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/media_manager/__init__.py +0 -0
  100. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/media_manager/common.py +0 -0
  101. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/pvtDocu.py +0 -0
  102. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/pvtTorrent.py +0 -0
  103. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/pvtTracker.py +0 -0
  104. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/torrent.py +0 -0
  105. {unit3dup-0.14.4 → unit3dup-0.14.7}/unit3dup/upload.py +0 -0
  106. {unit3dup-0.14.4 → unit3dup-0.14.7}/view/__init__.py +0 -0
  107. {unit3dup-0.14.4 → unit3dup-0.14.7}/view/custom_console.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Unit3Dup
3
- Version: 0.14.4
3
+ Version: 0.14.7
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.4
3
+ Version: 0.14.7
4
4
  Summary: An uploader for the Unit3D torrent tracker
5
5
  Author: Parzival
6
6
  License-Expression: MIT
@@ -430,15 +430,17 @@ class DbOnline(TmdbAPI):
430
430
  if 'no_key' in config_settings.tracker_config.YOUTUBE_KEY:
431
431
  return "not available"
432
432
 
433
- if not config_settings.user_preferences.SKIP_YOUTUBE:
433
+ if config_settings.user_preferences.SKIP_YOUTUBE:
434
434
  return "Skipped"
435
435
 
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,10 @@ 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
- custom_console.bot_log(f"'TRAILER' ....... https://www.youtube.com/watch?v={results.trailer_key}")
479
+ if results.trailer_key.upper() in ['SKIPPED', 'NOT AVAILABLE']:
480
+ custom_console.bot_log(f"'TRAILER' ....... {results.trailer_key}")
481
+ else:
482
+ custom_console.bot_log(f"'TRAILER' ....... https://www.youtube.com/watch?v={results.trailer_key}")
479
483
 
480
484
  def load_cache(self, query: str) -> MediaResult | None:
481
485
  # Check if the item is in the cache
@@ -15,33 +15,31 @@ class YtTrailer:
15
15
  def __init__(self, title: str):
16
16
 
17
17
  # Add language to the query (title) string to increase the prob of getting results in the pref lang
18
- force_query = ManageTitles.iso_3166_alpha2_to_alpha3.get(config_settings.user_preferences.PREFERRED_LANG.upper(), "")
18
+ force_query = ManageTitles.iso_3166_alpha2_to_alpha3.get(config_settings.user_preferences.YOUTUBE_PREF_LANG.upper(), "")
19
19
  self.title = f"{title} {force_query}"
20
20
  self.params = {
21
21
  'part': 'snippet',
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:
29
29
 
30
30
  # Use pref language for searching
31
31
  self.params['userId'] = 'me'
32
- self.params['regionCode'] = config_settings.user_preferences.PREFERRED_LANG.upper()
33
- self.params['relevanceLanguage'] = config_settings.user_preferences.PREFERRED_LANG.lower()
32
+ self.params['regionCode'] = config_settings.user_preferences.YOUTUBE_PREF_LANG.upper()
33
+ self.params['relevanceLanguage'] = config_settings.user_preferences.YOUTUBE_PREF_LANG.lower()
34
34
 
35
35
  attempt: int = 0
36
36
  max_attempts: int = 3
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.4"
27
+ version = "0.14.7"
28
28
 
29
29
  if os.name == "nt":
30
30
  WATCHER_DESTINATION_PATH: Path = Path(
@@ -128,8 +128,7 @@ class UserPreferences(BaseModel):
128
128
  TAGS_POSITION_SERIE: list[str] | None = None
129
129
 
130
130
  NUMBER_OF_SCREENSHOTS: int = 4
131
- # YOUTUBE_FAV_CHANNEL_ID: str | None = None
132
- # YOUTUBE_CHANNEL_ENABLE: bool = False
131
+ YOUTUBE_PREF_LANG: str | None = None
133
132
  DUPLICATE_ON: bool = False
134
133
  SKIP_DUPLICATE: bool = False
135
134
  SKIP_TMDB: bool = False
@@ -490,7 +489,7 @@ class Config(BaseModel):
490
489
  'FAST_LOAD']:
491
490
  section[field] = Validate.integer(value=section[field], field_name=field)
492
491
 
493
- if field == 'PREFERRED_LANG':
492
+ if field in ['PREFERRED_LANG', 'YOUTUBE_PREF_LANG']:
494
493
  section[field] = Validate.iso3166(value=section[field], field_name=field)
495
494
 
496
495
  if field == 'CACHE_PATH':
@@ -652,8 +651,7 @@ class Load:
652
651
  "multi", "acodec", "channels", "flag", "subtitle", "hdr", "vcodec",
653
652
  "video_encoder"],
654
653
 
655
- # "YOUTUBE_FAV_CHANNEL_ID": "UCGCbxpnt25hWPFLSbvwfg_w",
656
- # "YOUTUBE_CHANNEL_ENABLE": "False",
654
+ "YOUTUBE_PREF_LANG": "IT",
657
655
  "DUPLICATE_ON": "true",
658
656
  "SKIP_DUPLICATE": "false",
659
657
  "SKIP_TMDB": "false",
@@ -150,6 +150,7 @@ SIGNS_LIST = {
150
150
  "MADHEX": "releaser",
151
151
  "MADSKY": "releaser",
152
152
  "MADTIA": "releaser",
153
+ "MATITA": "releaser",
153
154
  "MAX": "releaser",
154
155
  "MAX2014": "releaser",
155
156
  "ME7ALH": "releaser",
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
  [project]
6
6
  dynamic = ["dependencies"]
7
7
  name = "Unit3Dup"
8
- version = "0.14.4"
8
+ version = "0.14.7"
9
9
  description = "An uploader for the Unit3D torrent tracker"
10
10
  readme = "README.rst"
11
11
  requires-python = ">=3.10"
@@ -28,6 +28,7 @@ def main():
28
28
  custom_console.bot_log(f"[Watcher] '{config.user_preferences.WATCHER_PATH}'")
29
29
  custom_console.bot_log(f"[Watcher] '{config.user_preferences.WATCHER_DESTINATION_PATH}'")
30
30
  custom_console.bot_log(f"[Preferred Language] '{config.user_preferences.PREFERRED_LANG}'")
31
+ custom_console.bot_log(f"[Youtube Preferred Language] '{config.user_preferences.YOUTUBE_PREF_LANG}'")
31
32
  print()
32
33
 
33
34
  # /// Initialize command line interface
@@ -21,7 +21,7 @@ class Video:
21
21
  self.display_name: str = media.display_name
22
22
 
23
23
  self.tmdb_id: int = tmdb_id
24
- self.trailer_key: int = trailer_key
24
+ self.trailer_key: str = trailer_key
25
25
  self.cache = diskcache.Cache(str(config_settings.user_preferences.CACHE_PATH))
26
26
 
27
27
  # Create a cache key for tmdb_id
@@ -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 self.trailer_key:
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
File without changes