plexflow 0.0.118__py3-none-any.whl → 0.0.120__py3-none-any.whl

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 (65) hide show
  1. plexflow/core/context/partials/__init__.py +1 -0
  2. plexflow/core/context/partials/torrent_blacklist.py +18 -0
  3. plexflow/core/downloads/candidates/__pycache__/utils.cpython-312.pyc +0 -0
  4. plexflow/core/downloads/candidates/rank/__pycache__/ranking.cpython-312.pyc +0 -0
  5. plexflow/core/downloads/candidates/rank/__pycache__/utils.cpython-312.pyc +0 -0
  6. plexflow/core/downloads/qbit/interface.py +2 -2
  7. plexflow/core/metadata/providers/plex/datatypes.py +19 -19
  8. plexflow/core/torrents/auto/__pycache__/auto_torrents.cpython-312.pyc +0 -0
  9. plexflow/core/torrents/providers/__pycache__/__init__.cpython-312.pyc +0 -0
  10. plexflow/core/torrents/providers/ext/__pycache__/__init__.cpython-312.pyc +0 -0
  11. plexflow/core/torrents/providers/ext/__pycache__/ext.cpython-312.pyc +0 -0
  12. plexflow/core/torrents/providers/ext/__pycache__/utils.cpython-312.pyc +0 -0
  13. plexflow/core/torrents/providers/extratorrent/__pycache__/__init__.cpython-312.pyc +0 -0
  14. plexflow/core/torrents/providers/extratorrent/__pycache__/extratorrent.cpython-312.pyc +0 -0
  15. plexflow/core/torrents/providers/extratorrent/__pycache__/utils.cpython-312.pyc +0 -0
  16. plexflow/core/torrents/providers/piratesparadise/__pycache__/__init__.cpython-312.pyc +0 -0
  17. plexflow/core/torrents/providers/piratesparadise/__pycache__/piratesparadise.cpython-312.pyc +0 -0
  18. plexflow/core/torrents/providers/piratesparadise/__pycache__/utils.cpython-312.pyc +0 -0
  19. plexflow/core/torrents/providers/snowfl/__pycache__/__init__.cpython-312.pyc +0 -0
  20. plexflow/core/torrents/providers/snowfl/__pycache__/snowfl.cpython-312.pyc +0 -0
  21. plexflow/core/torrents/providers/snowfl/__pycache__/utils.cpython-312.pyc +0 -0
  22. plexflow/core/torrents/providers/tgxi/__init__.py +0 -0
  23. plexflow/core/torrents/providers/tgxi/tgxi.py +16 -0
  24. plexflow/core/torrents/providers/tgxi/utils.py +61 -0
  25. plexflow/core/torrents/providers/therarbg/__pycache__/__init__.cpython-312.pyc +0 -0
  26. plexflow/core/torrents/providers/therarbg/__pycache__/therarbg.cpython-312.pyc +0 -0
  27. plexflow/core/torrents/providers/therarbg/__pycache__/utils.cpython-312.pyc +0 -0
  28. plexflow/core/torrents/providers/torrentquest/__pycache__/__init__.cpython-312.pyc +0 -0
  29. plexflow/core/torrents/providers/torrentquest/__pycache__/torrentquest.cpython-312.pyc +0 -0
  30. plexflow/core/torrents/providers/torrentquest/__pycache__/utils.cpython-312.pyc +0 -0
  31. plexflow/core/torrents/providers/tpb/__pycache__/__init__.cpython-312.pyc +0 -0
  32. plexflow/core/torrents/providers/tpb/__pycache__/tpb.cpython-312.pyc +0 -0
  33. plexflow/core/torrents/providers/tpb/__pycache__/utils.cpython-312.pyc +0 -0
  34. plexflow/core/torrents/providers/yts/__pycache__/__init__.cpython-312.pyc +0 -0
  35. plexflow/core/torrents/providers/yts/__pycache__/utils.cpython-312.pyc +0 -0
  36. plexflow/core/torrents/providers/yts/__pycache__/yts.cpython-312.pyc +0 -0
  37. plexflow/core/torrents/results/__pycache__/utils.cpython-312.pyc +0 -0
  38. plexflow/utils/antibot/__pycache__/human_like_requests.cpython-312.pyc +0 -0
  39. plexflow/utils/api/rest/__pycache__/__init__.cpython-312.pyc +0 -0
  40. plexflow/utils/api/rest/__pycache__/antibot_restful.cpython-312.pyc +0 -0
  41. plexflow/utils/api/rest/__pycache__/plexful.cpython-312.pyc +0 -0
  42. plexflow/utils/api/rest/__pycache__/restful.cpython-312.pyc +0 -0
  43. plexflow/utils/api/rest/__pycache__/url_builder.cpython-312.pyc +0 -0
  44. plexflow/utils/image/__pycache__/storage.cpython-312.pyc +0 -0
  45. plexflow/utils/strings/__pycache__/__init__.cpython-312.pyc +0 -0
  46. plexflow/utils/strings/__pycache__/filesize.cpython-312.pyc +0 -0
  47. plexflow/utils/strings/__pycache__/language.cpython-312.pyc +0 -0
  48. plexflow/utils/strings/__pycache__/sanitize.cpython-312.pyc +0 -0
  49. plexflow/utils/subtitle/__pycache__/search.cpython-312.pyc +0 -0
  50. plexflow/utils/torrent/__pycache__/__init__.cpython-312.pyc +0 -0
  51. plexflow/utils/torrent/__pycache__/files.cpython-312.pyc +0 -0
  52. plexflow/utils/torrent/__pycache__/hash.cpython-312.pyc +0 -0
  53. plexflow/utils/torrent/compare/__pycache__/with_subtitles.cpython-312.pyc +0 -0
  54. plexflow/utils/torrent/compare/with_subtitles.py +89 -0
  55. plexflow/utils/torrent/extract/__pycache__/common.cpython-312.pyc +0 -0
  56. plexflow/utils/torrent/extract/__pycache__/ext.cpython-312.pyc +0 -0
  57. plexflow/utils/torrent/extract/__pycache__/extratorrent.cpython-312.pyc +0 -0
  58. plexflow/utils/torrent/extract/__pycache__/piratesparadise.cpython-312.pyc +0 -0
  59. plexflow/utils/torrent/extract/__pycache__/therarbg.cpython-312.pyc +0 -0
  60. plexflow/utils/torrent/extract/__pycache__/torrentquest.cpython-312.pyc +0 -0
  61. plexflow/utils/torrent/extract/tgxi.py +64 -0
  62. {plexflow-0.0.118.dist-info → plexflow-0.0.120.dist-info}/METADATA +2 -1
  63. {plexflow-0.0.118.dist-info → plexflow-0.0.120.dist-info}/RECORD +65 -58
  64. {plexflow-0.0.118.dist-info → plexflow-0.0.120.dist-info}/entry_points.txt +1 -0
  65. {plexflow-0.0.118.dist-info → plexflow-0.0.120.dist-info}/WHEEL +0 -0
@@ -13,3 +13,4 @@ from plexflow.core.context.partials.candidates import Candidates
13
13
  from plexflow.core.context.partials.completed_downloads import CompletedDownloads
14
14
  from plexflow.core.context.partials.movie_assets import MovieAssets
15
15
  from plexflow.core.context.partials.torrent_deadline import TorrentDeadline
16
+ from plexflow.core.context.partials.torrent_blacklist import TorrentBlacklist
@@ -0,0 +1,18 @@
1
+ from plexflow.core.context.partial_context import PartialContext
2
+ from qbittorrentapi.torrents import TorrentDictionary
3
+
4
+ class TorrentBlacklist(PartialContext):
5
+ def __init__(self, **kwargs) -> None:
6
+ super().__init__(**kwargs)
7
+
8
+ def ban(self, torrent: TorrentDictionary):
9
+ hash = torrent.hash
10
+ key = f"blacklist/torrents/{hash}"
11
+ self.set_global(key, torrent)
12
+
13
+ def is_banned(self, hash: str) -> bool:
14
+ try:
15
+ torrent = self.get_global(f"blacklist/torrents/{hash}")
16
+ return isinstance(torrent, TorrentDictionary)
17
+ except:
18
+ return False
@@ -61,9 +61,9 @@ def is_completed(torrent: TorrentDictionary) -> bool:
61
61
  def is_downloading(torrent: TorrentDictionary) -> bool:
62
62
  return torrent.state in [
63
63
  "downloading",
64
- "stalled_downloading",
64
+ # "stalled_downloading",
65
65
  "checking",
66
- "stalledDL",
66
+ # "stalledDL",
67
67
  "forcedDL",
68
68
  ]
69
69
 
@@ -245,25 +245,25 @@ class PlexMovieMetadata:
245
245
  Rating (Optional[List[PlexRating]]): The list of ratings of the movie.
246
246
  Studio (Optional[List[PlexStudio]]): The list of studios associated with the movie.
247
247
  """
248
- title: Optional[str]
249
- guid: Optional[str]
250
- key: Optional[str]
251
- primaryExtraKey: Optional[str]
252
- rating: Optional[float]
253
- ratingKey: Optional[str]
254
- studio: Optional[str]
255
- summary: Optional[str]
256
- tagline: Optional[str]
257
- type: Optional[str]
258
- thumb: Optional[str]
259
- addedAt: Optional[int]
260
- duration: Optional[int]
261
- publicPagesURL: Optional[str]
262
- slug: Optional[str]
263
- userState: Optional[bool]
264
- contentRating: Optional[str]
265
- originallyAvailableAt: Optional[str]
266
- year: Optional[int]
248
+ title: Optional[str] = field(default=None)
249
+ guid: Optional[str] = field(default=None)
250
+ key: Optional[str] = field(default=None)
251
+ primaryExtraKey: Optional[str] = field(default=None)
252
+ rating: Optional[float] = field(default=None)
253
+ ratingKey: Optional[str] = field(default=None)
254
+ studio: Optional[str] = field(default=None)
255
+ summary: Optional[str] = field(default=None)
256
+ tagline: Optional[str] = field(default=None)
257
+ type: Optional[str] = field(default=None)
258
+ thumb: Optional[str] = field(default=None)
259
+ addedAt: Optional[int] = field(default=None)
260
+ duration: Optional[int] = field(default=None)
261
+ publicPagesURL: Optional[str] = field(default=None)
262
+ slug: Optional[str] = field(default=None)
263
+ userState: Optional[bool] = field(default=None)
264
+ contentRating: Optional[str] = field(default=None)
265
+ originallyAvailableAt: Optional[str] = field(default=None)
266
+ year: Optional[int] = field(default=None)
267
267
  audienceRating: Optional[float] = None
268
268
  audienceRatingImage: Optional[str] = None
269
269
  ratingImage: Optional[str] = None
File without changes
@@ -0,0 +1,16 @@
1
+ from plexflow.utils.api.rest.plexful import Plexful
2
+ from plexflow.core.torrents.providers.therarbg.utils import TheRarbgSearchResult
3
+ from plexflow.utils.torrent.extract.therarbg import extract_torrent_results
4
+ from typing import List
5
+
6
+ class TheRarbg(Plexful):
7
+ def __init__(self, base_url: str = 'https://therarbg.com'):
8
+ super().__init__(base_url=base_url)
9
+
10
+ def search(self, query: str, headless: bool = True, **kwargs) -> List[TheRarbgSearchResult]:
11
+ response = self.get(f'/get-posts/keywords:{query}/')
12
+
13
+ response.raise_for_status()
14
+
15
+ data = extract_torrent_results(html=response.text if not headless else response.html)
16
+ return list(map(lambda t: TheRarbgSearchResult(**t), data))
@@ -0,0 +1,61 @@
1
+ from datetime import datetime
2
+ from plexflow.core.torrents.results.torrent import Torrent
3
+ from plexflow.utils.imdb.imdb_codes import IMDbCode
4
+ from plexflow.utils.torrent.hash import extract_torrent_hash
5
+
6
+ class TheRarbgSearchResult(Torrent):
7
+ def __init__(self, **kwargs):
8
+ super().__init__()
9
+ self._name = kwargs.get('name')
10
+ self._date = kwargs.get('date')
11
+ self._type = kwargs.get('type')
12
+ self._size = kwargs.get('size_bytes')
13
+ self._seeds = kwargs.get('seeds')
14
+ self._peers = kwargs.get('peers')
15
+ self._link = kwargs.get('link')
16
+ self._imdb = kwargs.get('imdb')
17
+ self.src = 'therarbg'
18
+
19
+ @property
20
+ def source(self) -> str:
21
+ return self.src
22
+
23
+ @property
24
+ def magnet(self) -> str:
25
+ return None
26
+
27
+ @property
28
+ def date(self) -> datetime:
29
+ return self._date
30
+
31
+ @property
32
+ def seeds(self) -> int:
33
+ return self._seeds
34
+
35
+ @property
36
+ def peers(self) -> int:
37
+ return self._peers
38
+
39
+ @property
40
+ def size_bytes(self) -> int:
41
+ return self._size
42
+
43
+ @property
44
+ def imdb_code(self) -> IMDbCode:
45
+ return self._imdb
46
+
47
+ @property
48
+ def release_name(self) -> str:
49
+ return self._name
50
+
51
+ @property
52
+ def hash(self) -> str:
53
+ return None
54
+
55
+ @property
56
+ def url(self) -> str:
57
+ return self._link
58
+
59
+ @property
60
+ def category(self) -> str:
61
+ return self._type
@@ -0,0 +1,89 @@
1
+ import os
2
+ from google import genai
3
+ from google.genai import types
4
+
5
+
6
+ def generate(torrent: str, subtitle: str):
7
+ client = genai.Client(
8
+ api_key=os.environ.get("GEMINI_API_KEY"),
9
+ )
10
+
11
+ model = "gemini-2.5-flash"
12
+ contents = [
13
+ types.Content(
14
+ role="user",
15
+ parts=[
16
+ types.Part.from_text(text=f"""torrent: {torrent}
17
+ subtitle: {subtitle}"""),
18
+ ],
19
+ ),
20
+ ]
21
+ generate_content_config = types.GenerateContentConfig(
22
+ thinking_config = types.ThinkingConfig(
23
+ thinking_budget=-1,
24
+ ),
25
+ response_mime_type="application/json",
26
+ response_schema=genai.types.Schema(
27
+ type = genai.types.Type.OBJECT,
28
+ required = ["subtitle", "torrent", "is_match", "reason"],
29
+ properties = {
30
+ "subtitle": genai.types.Schema(
31
+ type = genai.types.Type.STRING,
32
+ ),
33
+ "torrent": genai.types.Schema(
34
+ type = genai.types.Type.STRING,
35
+ ),
36
+ "is_match": genai.types.Schema(
37
+ type = genai.types.Type.BOOLEAN,
38
+ ),
39
+ "reason": genai.types.Schema(
40
+ type = genai.types.Type.STRING,
41
+ ),
42
+ },
43
+ ),
44
+ system_instruction=[
45
+ types.Part.from_text(text="""You are an expert at matching subtitle names with torrent names. Resolution and codecs are not important. Consider the release group when matching, however it is not the most important thing. You always output a JSON in the following format:
46
+
47
+ {
48
+ \"subtitle\": string,
49
+ \"torrent\": string,
50
+ \"is_match\": boolean,
51
+ \"reason\": string
52
+ }"""),
53
+ ],
54
+ )
55
+
56
+ # Initialize an empty string to store the full response
57
+ full_response_text = ""
58
+
59
+ for chunk in client.models.generate_content_stream(
60
+ model=model,
61
+ contents=contents,
62
+ config=generate_content_config,
63
+ ):
64
+ # Append each chunk's text to the string
65
+ full_response_text += chunk.text
66
+ # Optional: Print chunks as they arrive if you still want to see the streaming
67
+ # print(chunk.text, end="")
68
+
69
+ # Now, full_response_text contains the complete JSON string
70
+ #print("\n--- Complete Generated Output ---")
71
+ #print(full_response_text)
72
+
73
+ # You can return this string if you want to use it outside the function
74
+ return full_response_text
75
+
76
+
77
+ def compare(torrent: str, subtitle: str) -> dict:
78
+ generated_json_string = generate(
79
+ torrent=torrent,
80
+ subtitle=subtitle,
81
+ )
82
+
83
+ import json
84
+ try:
85
+ data = json.loads(generated_json_string)
86
+ return data
87
+ except json.JSONDecodeError as e:
88
+ print(f"\nError decoding JSON: {e}")
89
+ print(f"Raw string: {generated_json_string}")
@@ -0,0 +1,64 @@
1
+ from bs4 import BeautifulSoup
2
+ from urllib.parse import urljoin
3
+ import dateparser
4
+ from plexflow.utils.strings.filesize import parse_size
5
+ from plexflow.utils.imdb.imdb_codes import extract_imdb_code
6
+
7
+
8
+ def extract_torrent_results(html):
9
+ """Extracts torrent information from HTML, resilient to HTML structure changes.
10
+
11
+ Args:
12
+ html: The HTML content of the page.
13
+
14
+ Returns:
15
+ A list of dictionaries, each containing torrent information:
16
+ - 'title': The title of the torrent.
17
+ - 'link': The link to the torrent detail page.
18
+ - 'category': The category of the torrent.
19
+ - 'added': The date the torrent was added.
20
+ - 'size': The size of the torrent.
21
+ - 'seeders': The number of seeders.
22
+ - 'leechers': The number of leechers.
23
+ - 'thumbnail': The URL of the torrent thumbnail (if available).
24
+ """
25
+
26
+ torrents = []
27
+ soup = BeautifulSoup(html, 'html.parser')
28
+
29
+ # Find all table rows that likely contain torrent information
30
+ rows = soup.find_all('div', class_='tgxtablerow')
31
+
32
+ for row in rows:
33
+ torrent = {}
34
+
35
+ # Extract data from the cells
36
+ cells = row.find_all('div', class_='tgxtablecell')
37
+
38
+ # Title (get full title from link href)
39
+ title_cell = cells[3]
40
+ title_link = title_cell.find('a')
41
+
42
+ if title_link:
43
+ # Get the part of the href after the last '/'
44
+ torrent['link'] = urljoin('https://torrentgalaxy.info', title_link['href'])
45
+ else:
46
+ torrent['link'] = ''
47
+
48
+ torrent['name'] = title_cell.text.strip()
49
+
50
+ # lets search in all links of the cell
51
+ # for an imdb id
52
+ for link in title_cell.find_all('a'):
53
+ href = link.get('href')
54
+ if isinstance(href, str):
55
+ imdb_code = next(extract_imdb_code(href), None)
56
+ if isinstance(imdb_code, str):
57
+ torrent['imdb'] = imdb_code
58
+ break
59
+
60
+ # TODO
61
+
62
+ torrents.append(torrent)
63
+
64
+ return torrents
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: plexflow
3
- Version: 0.0.118
3
+ Version: 0.0.120
4
4
  Summary: A short description of the package.
5
5
  License: MIT
6
6
  Keywords: keyword1,keyword2,keyword3
@@ -29,6 +29,7 @@ Requires-Dist: dataclasses-json (>=0.6.4,<0.7.0)
29
29
  Requires-Dist: dateparser (>=1.2.0,<2.0.0)
30
30
  Requires-Dist: fake-useragent (>=1.4.0,<2.0.0)
31
31
  Requires-Dist: google-cloud-pubsub (>=2.28.0,<3.0.0)
32
+ Requires-Dist: google-genai (>=1.26.0,<2.0.0)
32
33
  Requires-Dist: groq (>=0.9.0,<0.10.0)
33
34
  Requires-Dist: html5lib (>=1.1,<2.0)
34
35
  Requires-Dist: humanfriendly (>=10.0,<11.0)
@@ -20,7 +20,7 @@ plexflow/core/context/metadata/tmdb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQ
20
20
  plexflow/core/context/metadata/tmdb/__pycache__/context.cpython-311.pyc,sha256=dcvTi-0PnZfbLfsLu5QuX_jpAeQYmZR7ZbjzQMHQov4,2627
21
21
  plexflow/core/context/metadata/tmdb/context.py,sha256=zlI_Zs_1bAdR60xtl4j2_UBhIery1VcsQz2a53l5g20,1521
22
22
  plexflow/core/context/partial_context.py,sha256=684qHyQ-ulkZnXm-CMmhP7ont-9lIi1WEAbLTjyS4kA,2301
23
- plexflow/core/context/partials/__init__.py,sha256=mqTqe5ANIK7TQRKoSolPIEt4OJ3i66y2_-aUlOrCL_c,990
23
+ plexflow/core/context/partials/__init__.py,sha256=YUZlUl6vZlFV4ncwezVX1fDKs0B9gwUIXVyqkIPzMQ8,1068
24
24
  plexflow/core/context/partials/__pycache__/__init__.cpython-311.pyc,sha256=x_5HUdt-0vrq9LMmc8Vj0usxqQ_ZHD4WZd4HrvhwAZc,346
25
25
  plexflow/core/context/partials/__pycache__/ids.cpython-311.pyc,sha256=wV7r4FAwonAshns-NGcowqGamtrM_Q_2NbiHQhOLkjg,2638
26
26
  plexflow/core/context/partials/__pycache__/watchlist.cpython-311.pyc,sha256=k-0BM-AvH-zObpwY0XR8CYrT21kPEa0fmeBmf0wscE0,1466
@@ -35,6 +35,7 @@ plexflow/core/context/partials/reports.py,sha256=0W58RwK3VSsVHbF0rhvMNNlZZr01eut
35
35
  plexflow/core/context/partials/subtitles.py,sha256=0NhKGkP-sArQswuSyA7puRSjjoobF-3Ah7Pd39QkgTU,535
36
36
  plexflow/core/context/partials/tgx_batch.py,sha256=TduB09oBOQ8CtmPYsHIeNe7AI-ypKw21zQAX-7qktEs,859
37
37
  plexflow/core/context/partials/tgx_context.py,sha256=_FuhOvKsFqi_uynHxgC9_QIR2CfYmz-uJCRFtGFJmXI,1641
38
+ plexflow/core/context/partials/torrent_blacklist.py,sha256=6Uf65CF7M-JdgDt3k4Hi9WIpMkabp2eI4Ryubhjco0s,623
38
39
  plexflow/core/context/partials/torrent_deadline.py,sha256=Nr5HqvAy0VT-GSd9eYPkUtKZqHpWhniE9P51xXFOji8,782
39
40
  plexflow/core/context/partials/torrents.py,sha256=GtO4rlb7V2N-4QEWt-ODssEsdUlQ2o0lTo_BFI5i3lw,1109
40
41
  plexflow/core/context/partials/universal_torrents.py,sha256=yohdSEhspSdvmrI6NeBB2Racb7yS2kz7qyFat6gNw6k,563
@@ -67,17 +68,17 @@ plexflow/core/downloads/__pycache__/__init__.cpython-312.pyc,sha256=soaT0G2pvzN6
67
68
  plexflow/core/downloads/candidates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
69
  plexflow/core/downloads/candidates/__pycache__/__init__.cpython-312.pyc,sha256=rukNX00PSteBonRk-cayzNRk17ypWfE4noOAR3Ibjn0,170
69
70
  plexflow/core/downloads/candidates/__pycache__/download_candidate.cpython-312.pyc,sha256=6qCk-6nvWxTczY0G7FbY_tQ2xOqllQrVdROnm_IdkBg,9573
70
- plexflow/core/downloads/candidates/__pycache__/utils.cpython-312.pyc,sha256=Jwoj7R4TFzjoXc3uq_Wps3WitzFE9K_miKp9XuT_l8Y,2079
71
+ plexflow/core/downloads/candidates/__pycache__/utils.cpython-312.pyc,sha256=siHmGpfFms4ImysVqDU50VLzRt24E2tDyhJb2O6xwok,2199
71
72
  plexflow/core/downloads/candidates/download_candidate.py,sha256=6lQbtNw8uGr5B8qrkOOCxxvCKGHvFoEq8JjHGNB5FN8,5989
72
73
  plexflow/core/downloads/candidates/filtered.py,sha256=HgUY0S3aWAeHASHTjND9hyjCtGNLhUzLOL90G2CDxKg,1842
73
- plexflow/core/downloads/candidates/rank/__pycache__/ranking.cpython-312.pyc,sha256=Wz8hGAtLZNT0ThAPwloLBek5wflI6DKFDhr5_b7TzPI,4045
74
- plexflow/core/downloads/candidates/rank/__pycache__/utils.cpython-312.pyc,sha256=5Q6q1kw62WCWlPVFpXgXYt6oqf2gWHK_DHaZ-CBADwk,426
74
+ plexflow/core/downloads/candidates/rank/__pycache__/ranking.cpython-312.pyc,sha256=PyFgF-AfVisFErJ9PHeHb8RYLc4WIeRXQL3WSU83MnU,4298
75
+ plexflow/core/downloads/candidates/rank/__pycache__/utils.cpython-312.pyc,sha256=YS3mCbqz2dnIvZuODAW8hAi9iDOp3HQDde0WVl4CBo0,426
75
76
  plexflow/core/downloads/candidates/rank/ranking.py,sha256=p86f3DQmXJNE53gPk9E5RcKA7dgXI4wPQsIh9ae1uxY,2490
76
77
  plexflow/core/downloads/candidates/rank/utils.py,sha256=R4Ai4KmZRONo9vd2rf32DdGxVkANHYFwSjrO5WVjX9U,100
77
78
  plexflow/core/downloads/candidates/utils.py,sha256=BnuDSRjU9mVYSh9ejKgfvlLi0bWEqc07uLyskC-bYhw,1874
78
79
  plexflow/core/downloads/qbit/__pycache__/interface.cpython-312.pyc,sha256=szUoTWpZNpHwJ0OnXer8ZLeAYIvHND-rX1lB2Juv-J4,3335
79
80
  plexflow/core/downloads/qbit/__pycache__/schedule.cpython-312.pyc,sha256=ESOLrk6sLpb1mtijuDGNKvAHaYopVQBwSDzdt8dFNow,1350
80
- plexflow/core/downloads/qbit/interface.py,sha256=26--RLSWYnI8nx4UThF2qu3Lm7hqpOxKw5Sp47qqg2o,2435
81
+ plexflow/core/downloads/qbit/interface.py,sha256=QeBxe786H-JANSMEwueTE1t9xwYSZ3Ewkng8Me0_xC0,2440
81
82
  plexflow/core/downloads/qbit/schedule.py,sha256=5w3JpbIGRc5xS_ZjfKXMXywi-2NXL_2y_Izx0DmUGnE,907
82
83
  plexflow/core/env/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
84
  plexflow/core/env/env.py,sha256=8cK49WiKD_H3B9K0QiMu7pkXTld40ojRB3sK7noQM44,953
@@ -220,7 +221,7 @@ plexflow/core/metadata/providers/plex/__pycache__/moviemeter.cpython-311.pyc,sha
220
221
  plexflow/core/metadata/providers/plex/__pycache__/plex.cpython-311.pyc,sha256=FgbspEc3m5Vkm_m9Ry7gVAavs_2-4Er4FIREdJgaDIQ,8182
221
222
  plexflow/core/metadata/providers/plex/__pycache__/plex.cpython-312.pyc,sha256=GKjYqAdmiDSuAQ3HlsQJMRAHfi65sbw7maeLcuq6rbs,7334
222
223
  plexflow/core/metadata/providers/plex/__pycache__/tmdb.cpython-311.pyc,sha256=vWlpw_-ldSWwFvz67kTwxK9XxZPy7iExyLgD6rTOf10,4200
223
- plexflow/core/metadata/providers/plex/datatypes.py,sha256=Gj081fk2DkK9QHUjIS0oxUQllEpjBGohrc1utM2M48I,32023
224
+ plexflow/core/metadata/providers/plex/datatypes.py,sha256=-PSBCSyR5sfA2TOFCAr5mlnfSMngz8OaEjcc51CCw_U,32441
224
225
  plexflow/core/metadata/providers/plex/plex.py,sha256=KrOjSLzeZVIGDnLDC7dw87Yizq5h3Fbf9MtPv_tcET8,5918
225
226
  plexflow/core/metadata/providers/tmdb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
226
227
  plexflow/core/metadata/providers/tmdb/__pycache__/__init__.cpython-311.pyc,sha256=djXYmvhVt2MFuzdiZ7ojQCXMa9UffVv_j_hBl0bdIvM,187
@@ -396,7 +397,7 @@ plexflow/core/torrents/analyzers/analyzed_torrent.py,sha256=gsAr5RjYVXozWUaP3zSh
396
397
  plexflow/core/torrents/analyzers/analyzer.py,sha256=-KqZpwrrQpu5Aqt94plO5fUr1RQOOdCzKb1dT5P1SoE,1358
397
398
  plexflow/core/torrents/analyzers/torrentquest/__pycache__/analyzer.cpython-312.pyc,sha256=NpoTFmZEWD7_49Qdbr4_CsvIn5F0uOjls-uWa3hgodY,2759
398
399
  plexflow/core/torrents/analyzers/torrentquest/analyzer.py,sha256=f2X3CcYBA9xYZ6kRLkGQ5YK5feXjsw229z5nLWUHMEI,1907
399
- plexflow/core/torrents/auto/__pycache__/auto_torrents.cpython-312.pyc,sha256=d5aPkRYG0-_RD82MvWPwuNRCsbK75jk_Wl84cwjqS3A,2503
400
+ plexflow/core/torrents/auto/__pycache__/auto_torrents.cpython-312.pyc,sha256=9lJlAtKIDRoxpxvCL_oazLZCPhAW1Lh26soE-tZMVVk,2503
400
401
  plexflow/core/torrents/auto/auto_providers/auto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
401
402
  plexflow/core/torrents/auto/auto_providers/auto/__pycache__/__init__.cpython-311.pyc,sha256=qCFNPGmwyRmmvaF4ox321aGG3j1ix-HTZg8LA5kr0QE,197
402
403
  plexflow/core/torrents/auto/auto_providers/auto/__pycache__/__init__.cpython-312.pyc,sha256=vaXlU_2wadR_q6ZWmjygCqx4BjjtyYaHXzC5fD6CI1w,185
@@ -415,28 +416,28 @@ plexflow/core/torrents/auto/auto_providers/tpb/torrent.py,sha256=8X2i75s3sI9rGcT
415
416
  plexflow/core/torrents/auto/auto_torrents.py,sha256=Raal3-ZK30o8hOvQrwiWYmiQy7zYkFcKTLi4wQi4K7k,1721
416
417
  plexflow/core/torrents/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
417
418
  plexflow/core/torrents/providers/__pycache__/__init__.cpython-311.pyc,sha256=8u9BzsXTcFt1MeuWCG0TjlyZaO7NJjsSfx_OUByR5rE,182
418
- plexflow/core/torrents/providers/__pycache__/__init__.cpython-312.pyc,sha256=XGXMvMUUeVRElhD7NGGsnvEsyrbrbsHzrvEZzjgieR0,170
419
+ plexflow/core/torrents/providers/__pycache__/__init__.cpython-312.pyc,sha256=z6zgerdghp5H7HSd9hi6ZdF3AVAFE92_eITQtdobJyI,168
419
420
  plexflow/core/torrents/providers/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
420
421
  plexflow/core/torrents/providers/ext/__pycache__/__init__.cpython-311.pyc,sha256=IPhTUbnFhD-jhXQxUsYyjZHs08ho1cVQk1Fx6gj46_s,186
421
- plexflow/core/torrents/providers/ext/__pycache__/__init__.cpython-312.pyc,sha256=tRPyKIiMaWCA243aIesMVGCsKEU4-KMb7AvnJGMZiXw,174
422
- plexflow/core/torrents/providers/ext/__pycache__/ext.cpython-312.pyc,sha256=pNmm6zirodr_463HRaOZFODS6vdv1XZY6n1MtyOZHDg,1706
422
+ plexflow/core/torrents/providers/ext/__pycache__/__init__.cpython-312.pyc,sha256=psmUYInE7wv50Sl2__yA1jtbSMJtT4f_EhhTe-MQsMM,172
423
+ plexflow/core/torrents/providers/ext/__pycache__/ext.cpython-312.pyc,sha256=yum8H2HHgU2SF88AQTLBIYcDCs4c-9qNimpd6iOjReg,1702
423
424
  plexflow/core/torrents/providers/ext/__pycache__/extratorrent.cpython-312.pyc,sha256=jFH8XCLnDh4ZNXs_VHoua7yJrOzf4UXE9ocwEvb40uk,1849
424
425
  plexflow/core/torrents/providers/ext/__pycache__/torrentquest.cpython-312.pyc,sha256=mnM8dE7oCUjkjRL_pabx89IAi-KrjOme0WzWyQr1X0w,1835
425
426
  plexflow/core/torrents/providers/ext/__pycache__/tpb.cpython-311.pyc,sha256=e_38p1LN_QMIlb92ffVan46SkaPTaMVYFpys7BzPEaY,1688
426
427
  plexflow/core/torrents/providers/ext/__pycache__/tpb.cpython-312.pyc,sha256=OaCxggRVF0ZZiZmQTxyDZ8CyivJShLfZhLCglhUsXoI,1422
427
428
  plexflow/core/torrents/providers/ext/__pycache__/utils.cpython-311.pyc,sha256=YwB71cMUDX6MxUduWoFXRQXsP_LIRqK4rAVrJMX4v38,6704
428
- plexflow/core/torrents/providers/ext/__pycache__/utils.cpython-312.pyc,sha256=sNtplG2Wc5nGmZTojTsCa_I7a0MlgfpPMcXy-SKFhvI,3524
429
+ plexflow/core/torrents/providers/ext/__pycache__/utils.cpython-312.pyc,sha256=Op0KvfCw-d2uiTyUJSgk6F4ZPqArWTldkeMta9PMvGM,3522
429
430
  plexflow/core/torrents/providers/ext/ext.py,sha256=P_cg14aRlX4MyMZnI4j8bxFH4JnNkow0-wO2Ye9a9-s,759
430
431
  plexflow/core/torrents/providers/ext/utils.py,sha256=5luyin-_yCSxMtlx1W0DAKZaCAyKnBdvfpRmKojvTI4,1445
431
432
  plexflow/core/torrents/providers/extratorrent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
432
433
  plexflow/core/torrents/providers/extratorrent/__pycache__/__init__.cpython-311.pyc,sha256=IPhTUbnFhD-jhXQxUsYyjZHs08ho1cVQk1Fx6gj46_s,186
433
- plexflow/core/torrents/providers/extratorrent/__pycache__/__init__.cpython-312.pyc,sha256=HRZfW465DGa-74uaxBbVmkw8KImGCvqPb7rJcgM6ef8,183
434
- plexflow/core/torrents/providers/extratorrent/__pycache__/extratorrent.cpython-312.pyc,sha256=bzGwh7KQysN7ZcKfNwWizXA8qX2Vkur4MToSZ1DzOzI,1849
434
+ plexflow/core/torrents/providers/extratorrent/__pycache__/__init__.cpython-312.pyc,sha256=4LbAGJRxM6nY0F534gvcWHnAKybTf2HOy0Q-nV8JDAY,181
435
+ plexflow/core/torrents/providers/extratorrent/__pycache__/extratorrent.cpython-312.pyc,sha256=3GTVAL8Cprny9f0-U9evtm-y2sVfiLxSuzvRrKhTDD8,1845
435
436
  plexflow/core/torrents/providers/extratorrent/__pycache__/torrentquest.cpython-312.pyc,sha256=mnM8dE7oCUjkjRL_pabx89IAi-KrjOme0WzWyQr1X0w,1835
436
437
  plexflow/core/torrents/providers/extratorrent/__pycache__/tpb.cpython-311.pyc,sha256=e_38p1LN_QMIlb92ffVan46SkaPTaMVYFpys7BzPEaY,1688
437
438
  plexflow/core/torrents/providers/extratorrent/__pycache__/tpb.cpython-312.pyc,sha256=OaCxggRVF0ZZiZmQTxyDZ8CyivJShLfZhLCglhUsXoI,1422
438
439
  plexflow/core/torrents/providers/extratorrent/__pycache__/utils.cpython-311.pyc,sha256=YwB71cMUDX6MxUduWoFXRQXsP_LIRqK4rAVrJMX4v38,6704
439
- plexflow/core/torrents/providers/extratorrent/__pycache__/utils.cpython-312.pyc,sha256=Qs7pVnEBZ_KEMEyKwg2-dzTMj5Q_YIg5yYUC7G8PcNM,3962
440
+ plexflow/core/torrents/providers/extratorrent/__pycache__/utils.cpython-312.pyc,sha256=o6wntAM0FQhr7XMQIaA5WOkvsm-IikFEgLnVzsUQ6SU,3960
440
441
  plexflow/core/torrents/providers/extratorrent/extratorrent.py,sha256=eKfomcjs41jxQfttX7Qwd6b-wmpZ3S4rCcsU_sewtDo,895
441
442
  plexflow/core/torrents/providers/extratorrent/utils.py,sha256=9D0-0Lr6R6gdQb2rsGcSYOqrvt8vlcoLN0GedjumSnk,1608
442
443
  plexflow/core/torrents/providers/eztv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -448,15 +449,15 @@ plexflow/core/torrents/providers/eztv/eztv.py,sha256=VG_l6UjDztkl-pokmkLuqKsY2Gm
448
449
  plexflow/core/torrents/providers/eztv/utils.py,sha256=JaXyqGA0Zc0BhuoC75JkKy4PmN3AO4E-817_BkSY6J4,2850
449
450
  plexflow/core/torrents/providers/piratesparadise/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
450
451
  plexflow/core/torrents/providers/piratesparadise/__pycache__/__init__.cpython-311.pyc,sha256=IPhTUbnFhD-jhXQxUsYyjZHs08ho1cVQk1Fx6gj46_s,186
451
- plexflow/core/torrents/providers/piratesparadise/__pycache__/__init__.cpython-312.pyc,sha256=POQn-sb7PYiQiZZz1tPsPsexwX5PWhCfoXCfK0Tu1IQ,184
452
+ plexflow/core/torrents/providers/piratesparadise/__pycache__/__init__.cpython-312.pyc,sha256=_I4DbnxABDb3t3qVG6v8Wqv-KMndvKLvKimCnzlBPzc,184
452
453
  plexflow/core/torrents/providers/piratesparadise/__pycache__/extratorrent.cpython-312.pyc,sha256=jFH8XCLnDh4ZNXs_VHoua7yJrOzf4UXE9ocwEvb40uk,1849
453
- plexflow/core/torrents/providers/piratesparadise/__pycache__/piratesparadise.cpython-312.pyc,sha256=MvQpzbjdWV_Uhr-WrCh0ykDFdWhPhqDFu_Cs6Eqf2K4,1878
454
+ plexflow/core/torrents/providers/piratesparadise/__pycache__/piratesparadise.cpython-312.pyc,sha256=GJQDccj_-84AOSNpkyCgn46ZmomzRuIEcWhSQq1vOEs,1878
454
455
  plexflow/core/torrents/providers/piratesparadise/__pycache__/therarbg.cpython-312.pyc,sha256=EuY35TKrVDa6nz3JrVqRGURM9AOFZKeX1DPaHIGn5yo,1732
455
456
  plexflow/core/torrents/providers/piratesparadise/__pycache__/torrentquest.cpython-312.pyc,sha256=mnM8dE7oCUjkjRL_pabx89IAi-KrjOme0WzWyQr1X0w,1835
456
457
  plexflow/core/torrents/providers/piratesparadise/__pycache__/tpb.cpython-311.pyc,sha256=e_38p1LN_QMIlb92ffVan46SkaPTaMVYFpys7BzPEaY,1688
457
458
  plexflow/core/torrents/providers/piratesparadise/__pycache__/tpb.cpython-312.pyc,sha256=OaCxggRVF0ZZiZmQTxyDZ8CyivJShLfZhLCglhUsXoI,1422
458
459
  plexflow/core/torrents/providers/piratesparadise/__pycache__/utils.cpython-311.pyc,sha256=YwB71cMUDX6MxUduWoFXRQXsP_LIRqK4rAVrJMX4v38,6704
459
- plexflow/core/torrents/providers/piratesparadise/__pycache__/utils.cpython-312.pyc,sha256=IrcVcSYpD4mAn21gja6_3ULB0Kt_JUd3ZTX7piLmNRc,3447
460
+ plexflow/core/torrents/providers/piratesparadise/__pycache__/utils.cpython-312.pyc,sha256=IskKRx7fzF6aIm1vhrUH2RlqsVugV0OW4V_WT26BoAE,3543
460
461
  plexflow/core/torrents/providers/piratesparadise/piratesparadise.py,sha256=p0V00VKDKijf3B63yVaea2YdRLLIkJAOpPVhTKPglDc,929
461
462
  plexflow/core/torrents/providers/piratesparadise/utils.py,sha256=XIFQZT15e4rOjiI71uPvXPiEz2tNHAZg4jU1hrlrupU,1459
462
463
  plexflow/core/torrents/providers/rarbg2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -470,11 +471,11 @@ plexflow/core/torrents/providers/rarbg2/rarbg2.py,sha256=SZ9EPO78XQFa6AoajJWy93M
470
471
  plexflow/core/torrents/providers/rarbg2/utils.py,sha256=7M96ilgkfMssOhSvB99SgM9Dfgf1sqXEYtzw1I7SCw4,1854
471
472
  plexflow/core/torrents/providers/snowfl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
472
473
  plexflow/core/torrents/providers/snowfl/__pycache__/__init__.cpython-311.pyc,sha256=QTE1sD-I-LNDtSuyErNJyVT5WwwI5V4nhk3nzW4c60Q,186
473
- plexflow/core/torrents/providers/snowfl/__pycache__/__init__.cpython-312.pyc,sha256=XRkusYu2_fmo1Ne15aAO_4oRXCp3bexYalgf6RB9HqM,177
474
- plexflow/core/torrents/providers/snowfl/__pycache__/snowfl.cpython-312.pyc,sha256=XfaEbGTQbqo6UUDrlw840Pu5sQ4LZymC1vjnpAQ7fxY,2194
474
+ plexflow/core/torrents/providers/snowfl/__pycache__/__init__.cpython-312.pyc,sha256=Yd1nxdBnVS9Ac2b5Gp7ZdDidzRsesQg_g7N5-3pdvLA,175
475
+ plexflow/core/torrents/providers/snowfl/__pycache__/snowfl.cpython-312.pyc,sha256=knrmasp7hDV1BU-h_TC-W7apuQ7pAZoMTP5ocSvPm4E,2185
475
476
  plexflow/core/torrents/providers/snowfl/__pycache__/tpb.cpython-311.pyc,sha256=Pgfz7x-ffcY_ygNbwKFsM-BFn_CRVeH3PEm-TZMlj-s,1662
476
477
  plexflow/core/torrents/providers/snowfl/__pycache__/utils.cpython-311.pyc,sha256=3TI3O9zJmIhY9RL93XgInV0xNnVl0fVQk-fySGGok6k,4241
477
- plexflow/core/torrents/providers/snowfl/__pycache__/utils.cpython-312.pyc,sha256=b9ALJDafcJVYNKOo7X_33A8Unh4nipJxL1Ej63Y9fE4,3604
478
+ plexflow/core/torrents/providers/snowfl/__pycache__/utils.cpython-312.pyc,sha256=lJ3bN9isXhSXM9i2fqOwYv2rpSqXQiAFZSscwB4Er74,3602
478
479
  plexflow/core/torrents/providers/snowfl/__pycache__/yts.cpython-311.pyc,sha256=aLUsam8hsIOlOZ5n4hOA4TlIrst9d94nzuPGwYNNQmc,2725
479
480
  plexflow/core/torrents/providers/snowfl/__pycache__/yts.cpython-312.pyc,sha256=WLnag2fiEWBRNDRNY_OIAlZvwQd2Sdg5jX-C_Dxx38M,2245
480
481
  plexflow/core/torrents/providers/snowfl/snowfl.py,sha256=PNizfDcJkbeNpmXuw3I1SlTsgRFj9z9zZDxwblDYFAg,1200
@@ -490,45 +491,48 @@ plexflow/core/torrents/providers/tgx/context.py,sha256=qXllx-laicYXqE2tDwcJf8W-l
490
491
  plexflow/core/torrents/providers/tgx/dump.py,sha256=F9VdUyTT4BnQ7V-ESTAg7rWD4iPoUVg1ufzBWw7dIFw,1356
491
492
  plexflow/core/torrents/providers/tgx/tgx.py,sha256=nt5dIcCrDsF91zds1KOwbCDqyYseuYismyDjhtrMT3k,881
492
493
  plexflow/core/torrents/providers/tgx/utils.py,sha256=gUSgKDRcQvCZie2wo6ADYecs_ltHxqhMTAY3mlMmDGE,1813
494
+ plexflow/core/torrents/providers/tgxi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
495
+ plexflow/core/torrents/providers/tgxi/tgxi.py,sha256=_tfUQSsZJuJxUl0fjFUBoHODK89VAGrMtg3D9FAy9QU,746
496
+ plexflow/core/torrents/providers/tgxi/utils.py,sha256=J3Ee6VW72tdonbOJVC-7Pem3rY1BtuulKbIYCTd_E4U,1435
493
497
  plexflow/core/torrents/providers/therarbg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
494
498
  plexflow/core/torrents/providers/therarbg/__pycache__/__init__.cpython-311.pyc,sha256=IPhTUbnFhD-jhXQxUsYyjZHs08ho1cVQk1Fx6gj46_s,186
495
- plexflow/core/torrents/providers/therarbg/__pycache__/__init__.cpython-312.pyc,sha256=_tTm40Tz_WBnwBkVix3dciR2_jLmeNTmIh3GkGE9nkU,179
499
+ plexflow/core/torrents/providers/therarbg/__pycache__/__init__.cpython-312.pyc,sha256=mdYm0LUBPyfzzWujScP9lhjjUFoqglIgQmGLdGItzW4,177
496
500
  plexflow/core/torrents/providers/therarbg/__pycache__/extratorrent.cpython-312.pyc,sha256=jFH8XCLnDh4ZNXs_VHoua7yJrOzf4UXE9ocwEvb40uk,1849
497
- plexflow/core/torrents/providers/therarbg/__pycache__/therarbg.cpython-312.pyc,sha256=EuY35TKrVDa6nz3JrVqRGURM9AOFZKeX1DPaHIGn5yo,1732
501
+ plexflow/core/torrents/providers/therarbg/__pycache__/therarbg.cpython-312.pyc,sha256=A-y2k9Na3Ko4QaBWfHhd0hn8DTT_PDdsIGZm-SCgySE,1732
498
502
  plexflow/core/torrents/providers/therarbg/__pycache__/torrentquest.cpython-312.pyc,sha256=mnM8dE7oCUjkjRL_pabx89IAi-KrjOme0WzWyQr1X0w,1835
499
503
  plexflow/core/torrents/providers/therarbg/__pycache__/tpb.cpython-311.pyc,sha256=e_38p1LN_QMIlb92ffVan46SkaPTaMVYFpys7BzPEaY,1688
500
504
  plexflow/core/torrents/providers/therarbg/__pycache__/tpb.cpython-312.pyc,sha256=OaCxggRVF0ZZiZmQTxyDZ8CyivJShLfZhLCglhUsXoI,1422
501
505
  plexflow/core/torrents/providers/therarbg/__pycache__/utils.cpython-311.pyc,sha256=YwB71cMUDX6MxUduWoFXRQXsP_LIRqK4rAVrJMX4v38,6704
502
- plexflow/core/torrents/providers/therarbg/__pycache__/utils.cpython-312.pyc,sha256=Q-1HJKH_SvVAm1asHGOKZlk5fSr14Yfo3WgUVBLTq50,3534
506
+ plexflow/core/torrents/providers/therarbg/__pycache__/utils.cpython-312.pyc,sha256=Fr3JmQNQwfvVIlQOOak8I-Ed8upjb5f-tQxqXVKaUpI,3534
503
507
  plexflow/core/torrents/providers/therarbg/therarbg.py,sha256=aG7lbj98jjPJA0L6RAPxHePHfGMxaW8p18lkROQFL2E,798
504
508
  plexflow/core/torrents/providers/therarbg/utils.py,sha256=J3Ee6VW72tdonbOJVC-7Pem3rY1BtuulKbIYCTd_E4U,1435
505
509
  plexflow/core/torrents/providers/torrentquest/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
506
510
  plexflow/core/torrents/providers/torrentquest/__pycache__/__init__.cpython-311.pyc,sha256=IPhTUbnFhD-jhXQxUsYyjZHs08ho1cVQk1Fx6gj46_s,186
507
- plexflow/core/torrents/providers/torrentquest/__pycache__/__init__.cpython-312.pyc,sha256=sJs2uYlRHhsGNMKpx24zgNI4OTABqLx6wbDovosUIK4,183
508
- plexflow/core/torrents/providers/torrentquest/__pycache__/torrentquest.cpython-312.pyc,sha256=Utuzs9uPVADuX8-6f4vKrlkpLHdkAYNcZ5I-tVNctho,1899
511
+ plexflow/core/torrents/providers/torrentquest/__pycache__/__init__.cpython-312.pyc,sha256=n3gMuA_5WoX4Z4nqn-RtOeNiU8DOVKRJnulyLTjcCxo,181
512
+ plexflow/core/torrents/providers/torrentquest/__pycache__/torrentquest.cpython-312.pyc,sha256=QReyyREMFUZN5dtqG7_BweFgR2gW2eUFALmqeDmveIM,1895
509
513
  plexflow/core/torrents/providers/torrentquest/__pycache__/tpb.cpython-311.pyc,sha256=e_38p1LN_QMIlb92ffVan46SkaPTaMVYFpys7BzPEaY,1688
510
514
  plexflow/core/torrents/providers/torrentquest/__pycache__/tpb.cpython-312.pyc,sha256=OaCxggRVF0ZZiZmQTxyDZ8CyivJShLfZhLCglhUsXoI,1422
511
515
  plexflow/core/torrents/providers/torrentquest/__pycache__/utils.cpython-311.pyc,sha256=YwB71cMUDX6MxUduWoFXRQXsP_LIRqK4rAVrJMX4v38,6704
512
- plexflow/core/torrents/providers/torrentquest/__pycache__/utils.cpython-312.pyc,sha256=63qIdPGOxmvKu0GbgguAIHnXRgIH-eWsbViQetOWe7I,4118
516
+ plexflow/core/torrents/providers/torrentquest/__pycache__/utils.cpython-312.pyc,sha256=t29ZK6G9pRHenI9BWScUOlRPP5ucF__UD3LrLAchqQM,4116
513
517
  plexflow/core/torrents/providers/torrentquest/torrentquest.py,sha256=VxKDfVo9ArkeVuvyWnMR0kCe7REA4SgvLjsZvVN7dNg,925
514
518
  plexflow/core/torrents/providers/torrentquest/utils.py,sha256=RZoJFZpyI-vRDRX-T7tnbeGyb5jdk4UdHyhEgLuwRLM,1664
515
519
  plexflow/core/torrents/providers/tpb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
516
520
  plexflow/core/torrents/providers/tpb/__pycache__/__init__.cpython-311.pyc,sha256=IPhTUbnFhD-jhXQxUsYyjZHs08ho1cVQk1Fx6gj46_s,186
517
- plexflow/core/torrents/providers/tpb/__pycache__/__init__.cpython-312.pyc,sha256=TnrE5JwLd86J6Imssuc2QAXHDdlAEDI-4x-9wN8Ha58,174
521
+ plexflow/core/torrents/providers/tpb/__pycache__/__init__.cpython-312.pyc,sha256=DG9yNh0oyuZJ4DtCWsVbfKqQaxtIaeeHiKu-PY3taPA,172
518
522
  plexflow/core/torrents/providers/tpb/__pycache__/tpb.cpython-311.pyc,sha256=e_38p1LN_QMIlb92ffVan46SkaPTaMVYFpys7BzPEaY,1688
519
- plexflow/core/torrents/providers/tpb/__pycache__/tpb.cpython-312.pyc,sha256=MAp1JprHh9oeFLKRNGOqyytN12g0ZdUSdF6TwJ9MDCs,1504
523
+ plexflow/core/torrents/providers/tpb/__pycache__/tpb.cpython-312.pyc,sha256=5ab8EsKdFBcPnaoERfOjX_RxRKFwqDPIp6pBLBZrIew,1500
520
524
  plexflow/core/torrents/providers/tpb/__pycache__/utils.cpython-311.pyc,sha256=YwB71cMUDX6MxUduWoFXRQXsP_LIRqK4rAVrJMX4v38,6704
521
- plexflow/core/torrents/providers/tpb/__pycache__/utils.cpython-312.pyc,sha256=cJSN6zMizHkzh3_WWJ2uF4bZ6_svJSQnN296iP8YJv4,6378
525
+ plexflow/core/torrents/providers/tpb/__pycache__/utils.cpython-312.pyc,sha256=GVi8a1qda_d07qNvSpgCAoCToUUdzyjM5ENxBco2Oek,6474
522
526
  plexflow/core/torrents/providers/tpb/tpb.py,sha256=YB-a3kZ4DUzXkI4TJJszVvoJiX4L0QUJuCo-9iqC6JQ,681
523
527
  plexflow/core/torrents/providers/tpb/utils.py,sha256=M1LdYgMMhFOZ-b12eazCh81tx-KTQMkQ2H21IuhfGOQ,3708
524
528
  plexflow/core/torrents/providers/yts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
525
529
  plexflow/core/torrents/providers/yts/__pycache__/__init__.cpython-311.pyc,sha256=QTE1sD-I-LNDtSuyErNJyVT5WwwI5V4nhk3nzW4c60Q,186
526
- plexflow/core/torrents/providers/yts/__pycache__/__init__.cpython-312.pyc,sha256=rb26jCjKRY0RXaanm-6RLAFANV4e4DwgUPbZcsCw-gc,174
530
+ plexflow/core/torrents/providers/yts/__pycache__/__init__.cpython-312.pyc,sha256=GoGNHNow6hOKAdWwhK9WyHgxNTOEiM7o4Rach-CgzKg,172
527
531
  plexflow/core/torrents/providers/yts/__pycache__/tpb.cpython-311.pyc,sha256=Pgfz7x-ffcY_ygNbwKFsM-BFn_CRVeH3PEm-TZMlj-s,1662
528
532
  plexflow/core/torrents/providers/yts/__pycache__/utils.cpython-311.pyc,sha256=3TI3O9zJmIhY9RL93XgInV0xNnVl0fVQk-fySGGok6k,4241
529
- plexflow/core/torrents/providers/yts/__pycache__/utils.cpython-312.pyc,sha256=1Gjye9P-7NHVZuVVHnnGgEgWcJXuGX8LDv9OjSKdYwU,3798
533
+ plexflow/core/torrents/providers/yts/__pycache__/utils.cpython-312.pyc,sha256=_bUj5V322ioLgAG0tnDwoUMTWHwT8lbeT_9I_F8CPiY,3796
530
534
  plexflow/core/torrents/providers/yts/__pycache__/yts.cpython-311.pyc,sha256=aLUsam8hsIOlOZ5n4hOA4TlIrst9d94nzuPGwYNNQmc,2725
531
- plexflow/core/torrents/providers/yts/__pycache__/yts.cpython-312.pyc,sha256=C0rvBQVDBiYjJijszL2Bhzwsny4tYp9QVuXoJEHkNso,2544
535
+ plexflow/core/torrents/providers/yts/__pycache__/yts.cpython-312.pyc,sha256=kVQV_UPW8aVgr2tyJQsGUwagcVc2ez2ErH0C8lr1VnE,2544
532
536
  plexflow/core/torrents/providers/yts/utils.py,sha256=SYV7yohab-gF5Nj67fO8Lkus84-h0OBD3BkIY6U6A1I,1699
533
537
  plexflow/core/torrents/providers/yts/yts.py,sha256=ykwJUm87cJZS2wSe8YKKXncdPNPmIpwtpwtWucCdxWE,1378
534
538
  plexflow/core/torrents/results/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -537,7 +541,7 @@ plexflow/core/torrents/results/__pycache__/__init__.cpython-312.pyc,sha256=R6gHD
537
541
  plexflow/core/torrents/results/__pycache__/torrent.cpython-311.pyc,sha256=SxfylbSxF9gpzXvNey4Fv9XdKLjwm0a0LYlGFhg7zAY,7655
538
542
  plexflow/core/torrents/results/__pycache__/torrent.cpython-312.pyc,sha256=z8-iig6fvJcqj8R4C77wPLftziDCGuDg0uh_dlq2Qwc,8481
539
543
  plexflow/core/torrents/results/__pycache__/universal.cpython-312.pyc,sha256=jnFYw7Glwq9jgyOVTn9yDGWWDCgaM91KZgQmHU16KI8,14162
540
- plexflow/core/torrents/results/__pycache__/utils.cpython-312.pyc,sha256=vqEt3jQLzZ-K_E9WV0kKz4K79AScvcg2xyOUTlAcu70,1136
544
+ plexflow/core/torrents/results/__pycache__/utils.cpython-312.pyc,sha256=9XY-YnS0isahhJFhvGU3TUmOB7j0CS4fkMJd04BV2ao,1136
541
545
  plexflow/core/torrents/results/torrent.py,sha256=hSYlP_0Uktumi4wzXqIJ-WRRi5YAlvrZVhf_treXDrI,5203
542
546
  plexflow/core/torrents/results/universal.py,sha256=ycprOMT1Px8IthmB82YhmnxeNt7P3GAcrOlEkpKoaQk,7706
543
547
  plexflow/core/torrents/results/utils.py,sha256=abiiO_QQYDpA5aMyO8WFPxnGu5sL5xfACezE5bwrnJU,691
@@ -573,7 +577,7 @@ plexflow/spiders/tgx/spider.py,sha256=fBDksNThRm9bWjvEKeora6eiUKkxQBdISBaYOXIvjg
573
577
  plexflow/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
574
578
  plexflow/utils/__pycache__/__init__.cpython-311.pyc,sha256=504nnGOR-zQmysuOYNCQZsgbWiSz5kxnIWDWCQqOWnU,164
575
579
  plexflow/utils/__pycache__/__init__.cpython-312.pyc,sha256=je7u5-_Rcwic9Fv9deKonSjBCSx4ytlRJs87KAvLKyk,150
576
- plexflow/utils/antibot/__pycache__/human_like_requests.cpython-312.pyc,sha256=6fzUFt9uCeAKkPvA1QVz_miu2Fa-XiZMjpgY8VFp0kM,8593
580
+ plexflow/utils/antibot/__pycache__/human_like_requests.cpython-312.pyc,sha256=rqnB_01Fb2vePEo7axsDfLNLrqQdFplvBnaPtfFsxIg,8568
577
581
  plexflow/utils/antibot/human_like_requests.py,sha256=-UKo2LgJtgp7CYggxPsUT74vfXyYosdbg5f-DzaEgQU,6116
578
582
  plexflow/utils/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
579
583
  plexflow/utils/api/__pycache__/__init__.cpython-311.pyc,sha256=h5sUevkaKlWYQz-ECxScMFrE-yT8mYwUQI6CEmHaMe8,168
@@ -582,12 +586,12 @@ plexflow/utils/api/context/__pycache__/http.cpython-312.pyc,sha256=US7URBJb5VkC0
582
586
  plexflow/utils/api/context/http.py,sha256=TRpEe9_QUEfkVZIMqcAtDJ7Lu5Xl53KyiwBiTHVpbms,4120
583
587
  plexflow/utils/api/rest/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
584
588
  plexflow/utils/api/rest/__pycache__/__init__.cpython-311.pyc,sha256=WWFZn7TmRF2ToVVOLwB03WIieIZDONWxTGLNPu6Kz-o,173
585
- plexflow/utils/api/rest/__pycache__/__init__.cpython-312.pyc,sha256=VY5JN7ymAqZREdHbrZKg7o2WxL-VqTu-APTwN2hilkY,161
586
- plexflow/utils/api/rest/__pycache__/antibot_restful.cpython-312.pyc,sha256=PWfUYxzzIdqv05l6Rfmhi580qZR5Gv3GPuAzbX670eQ,3313
587
- plexflow/utils/api/rest/__pycache__/plexful.cpython-312.pyc,sha256=-Ccbo9-8SqrFcCGvsN7QFMX6vdE3wW0__ZMIt7Ne3Ak,4214
589
+ plexflow/utils/api/rest/__pycache__/__init__.cpython-312.pyc,sha256=VzXtpbdfDPBTJJiuejTnozRip2Rb8IKEnptjH_pU9gs,159
590
+ plexflow/utils/api/rest/__pycache__/antibot_restful.cpython-312.pyc,sha256=65gCcN59_E-_CCQjt35FAk_MxX2-uRDQSubGR2-b5j8,3311
591
+ plexflow/utils/api/rest/__pycache__/plexful.cpython-312.pyc,sha256=G05xdLUP6Wo2yBJ0_ctb2GVmKJHaIf8RRR6KqIYE2UQ,4212
588
592
  plexflow/utils/api/rest/__pycache__/restful.cpython-311.pyc,sha256=0-y7XoIm-MYQj0ZauQmdLlS6H6w5laqEKBsErMkcErE,5502
589
- plexflow/utils/api/rest/__pycache__/restful.cpython-312.pyc,sha256=3Tbim-DHZEObecV1nrWd5MzqacRKX3u4ckAcUo4V8js,3297
590
- plexflow/utils/api/rest/__pycache__/url_builder.cpython-312.pyc,sha256=yIAzRvU7CciuadY5TWiUqwkddU5zbxkneXav2Zc8WHQ,691
593
+ plexflow/utils/api/rest/__pycache__/restful.cpython-312.pyc,sha256=UFSmQfdqD59Lq9OsxPHuIR1DW80dkx0G0k-M9rp50N8,3295
594
+ plexflow/utils/api/rest/__pycache__/url_builder.cpython-312.pyc,sha256=EDukT0MArjYFJbkHQrbTNFlbtlkfDo-FFYc3bDAiULQ,689
591
595
  plexflow/utils/api/rest/antibot_restful.py,sha256=7sxaNsx5jAehyBg1qYfLg45Q_AyijsG8X48_y5oI5Yk,2749
592
596
  plexflow/utils/api/rest/plexful.py,sha256=H9_hm08zpBajLE46E7OJGdTUwWJvFivFbYpzm2U5cVQ,3202
593
597
  plexflow/utils/api/rest/restful.py,sha256=vk7TjRuvXcs4c3MgjU38IPDhVy9GQ2y-WZyJAvEbT88,2405
@@ -621,7 +625,7 @@ plexflow/utils/hooks/__pycache__/redis.cpython-312.pyc,sha256=gR1Wu6-9UHfu_Bb9Wh
621
625
  plexflow/utils/hooks/http.py,sha256=qyQNAx0RK1XfDgn71SKlxKJ_466j39VgXUEfnw8L9YY,3994
622
626
  plexflow/utils/hooks/postgresql.py,sha256=Ixhw6XNtutXVGPlcYB1g7SJkzHo8EkMPD5XFpZsd5cQ,4002
623
627
  plexflow/utils/hooks/redis.py,sha256=ZvrSgM7s-OgRLIb8uV8rm6XjF40rLkoPOPABEmuKdNk,4228
624
- plexflow/utils/image/__pycache__/storage.cpython-312.pyc,sha256=PuYT0whsl53o7lLLoQcSQUI-JidJ6HbqRbznEQAcEUo,1581
628
+ plexflow/utils/image/__pycache__/storage.cpython-312.pyc,sha256=wpDVCg1O9Qnp1VfpaPwRU1LKcGto_VEB2C71L_uZJEU,1579
625
629
  plexflow/utils/image/storage.py,sha256=RlV7D0aGqoG583xP8YCC7TK5YmW8rFff2NwvtOzy5DE,1168
626
630
  plexflow/utils/imdb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
627
631
  plexflow/utils/imdb/__pycache__/__init__.cpython-311.pyc,sha256=Om33PdqDky-6oW50l1mrHRNKJISmC1j9wBn5OdA0Nxs,169
@@ -641,17 +645,17 @@ plexflow/utils/retry/__pycache__/utils.cpython-311.pyc,sha256=aMITcG_0hVW031sGoe
641
645
  plexflow/utils/retry/__pycache__/utils.cpython-312.pyc,sha256=yYgzVZ7PBvC7qG6CnhLoVmkUm8g77VTzutHm77OOH98,2228
642
646
  plexflow/utils/retry/utils.py,sha256=wqdtkxSBT9dYVgWGKSYxuEiZHBVmfOjzVxXDOweVuoo,1784
643
647
  plexflow/utils/strings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
644
- plexflow/utils/strings/__pycache__/__init__.cpython-312.pyc,sha256=p5hP2pQNNaFqWyYwsecCOSQJdXi6qwTw6gZmPPxjx_E,160
648
+ plexflow/utils/strings/__pycache__/__init__.cpython-312.pyc,sha256=atTiIOHRHIt3rlAFmo4TSb0b-4ta85Nw767kksMXTd8,158
645
649
  plexflow/utils/strings/__pycache__/filesize.cpython-311.pyc,sha256=X9fexslLrSygnwySEnqFTN8b7LxF-W_WeVwpxTlf-HM,878
646
- plexflow/utils/strings/__pycache__/filesize.cpython-312.pyc,sha256=rwweeoyPPod9hRAf7ZGbNXi5W8z-sxXQryXrnRql9JQ,1878
650
+ plexflow/utils/strings/__pycache__/filesize.cpython-312.pyc,sha256=cBx5vnx7qHqfmuuAC54pE1VkO1AWBx-tgJ6wPQvfAzA,1871
647
651
  plexflow/utils/strings/__pycache__/json_extract.cpython-312.pyc,sha256=LE-dU05XzIsJRC6iQh1LodV2dcA0rWcgUktxRGCq76U,14966
648
- plexflow/utils/strings/__pycache__/language.cpython-312.pyc,sha256=KmJqMsvEJaR2yqeFb4jy6Ha3h4VSDbmhwVlGYKojcps,562
649
- plexflow/utils/strings/__pycache__/sanitize.cpython-312.pyc,sha256=fRcOYMIZxmik87gtVCWNr_RBl07TY1qBlEIPGvwNSf4,599
652
+ plexflow/utils/strings/__pycache__/language.cpython-312.pyc,sha256=RBsfDrWFmGydji7sauH2iWswv6NqXs_qDT-lsp513hU,560
653
+ plexflow/utils/strings/__pycache__/sanitize.cpython-312.pyc,sha256=al-VD4Gphby-bd-En36L1wjcK1LCrrOMxFGN-XrmS4w,599
650
654
  plexflow/utils/strings/filesize.py,sha256=mLVd0xqIEzAif5Tn_PyCddFmUPXPNnEbLhBNJTsgOvs,1547
651
655
  plexflow/utils/strings/json_extract.py,sha256=590oY1LMnbe9COm3fD6z74OtOzxeXd3Hrf06afhHOvc,14884
652
656
  plexflow/utils/strings/language.py,sha256=J9-wqmCdxf9Ws5_X1tV4vX4d7AGkKci0eaBE4Lit0j0,269
653
657
  plexflow/utils/strings/sanitize.py,sha256=V-58iC4-0xIb-dgK595JbPNyyB9jZbY1xHMazXnQyuI,274
654
- plexflow/utils/subtitle/__pycache__/search.cpython-312.pyc,sha256=VFulOf14P0m9ncFRxXwENemR8wNolA8xZykpfdAq4eg,3542
658
+ plexflow/utils/subtitle/__pycache__/search.cpython-312.pyc,sha256=RiMTyALG74DJn67xhCvZ2ofXBOTyetMOU3Tq_bVdbts,3554
655
659
  plexflow/utils/subtitle/search.py,sha256=HW_JOrj-cpRrVnxWh56XjRWhb98E73V1V5QHCq2y7CM,2441
656
660
  plexflow/utils/tasks/__pycache__/decorators.cpython-311.pyc,sha256=8zuAsEfYLEBQQ4DGKqkx-JFCjd73kGhAiPblBNFa2cQ,1675
657
661
  plexflow/utils/tasks/__pycache__/tasks.cpython-311.pyc,sha256=8RRMTHAy-t6yW0rlDX9wpZyO-9Cg4SQoD-NVasL94SQ,1670
@@ -663,25 +667,28 @@ plexflow/utils/thread_safe/safe_list.py,sha256=BScIH27Gh84Nb7SZxmfeZ9vF2hh75yCml
663
667
  plexflow/utils/thread_safe/safe_set.py,sha256=wTlR3RK6QShRFdij1-HOT2YUAtONivySQ1wfWRL-7pU,1844
664
668
  plexflow/utils/torrent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
665
669
  plexflow/utils/torrent/__pycache__/__init__.cpython-311.pyc,sha256=nWgaKrMbrQpiPPcpuHy-B-TAMwt8w5iofUZ2ba2SRss,172
666
- plexflow/utils/torrent/__pycache__/__init__.cpython-312.pyc,sha256=Mcrkp8qZ6zSdhdJdYbUfnEGJFySd8hayoOQEewLeFbE,160
670
+ plexflow/utils/torrent/__pycache__/__init__.cpython-312.pyc,sha256=o3dvDnTCgvMrnZhFYAcZi73nOeGap4LAD8b7HjDWWb8,158
667
671
  plexflow/utils/torrent/__pycache__/analyze.cpython-312.pyc,sha256=bkmS6HF05DdGSuZHpr-K3n0ncsooMqUzrUbNpTMS3Zo,6926
668
- plexflow/utils/torrent/__pycache__/files.cpython-312.pyc,sha256=s0TsS5xH_R1iit2PseyDlLspXwt37Ll_PN932l4fBQo,3930
672
+ plexflow/utils/torrent/__pycache__/files.cpython-312.pyc,sha256=S4-DaMpZ37kVsLj41X-2dhgVR07ulmZDKq6qrQ7DemM,3928
669
673
  plexflow/utils/torrent/__pycache__/hash.cpython-311.pyc,sha256=RDp8Sv5NLkUw0r6w6JD8rOH1ksN3NnTv4DzhZuZBouA,2284
670
- plexflow/utils/torrent/__pycache__/hash.cpython-312.pyc,sha256=jlbSscMzvGQkHDBP-zB3JB8DMRenvzSRIiOKprFhYQQ,3631
674
+ plexflow/utils/torrent/__pycache__/hash.cpython-312.pyc,sha256=WopjMrIXzIakvSpjMBokBArQ8j7Yy4cu0yXdMITdU2k,3619
671
675
  plexflow/utils/torrent/analyze.py,sha256=4f71sz1JZSgOAFdJY31dHomFNCUPlyxft7P3ffrWroU,4902
672
- plexflow/utils/torrent/extract/__pycache__/common.cpython-312.pyc,sha256=WTgyNFyySpFEtklNMsrhdvngA_ap8AAY-5-QPHVtxfM,1862
673
- plexflow/utils/torrent/extract/__pycache__/ext.cpython-312.pyc,sha256=qRVyjKJFb5P5wGETuI05oqUxUaKvNMzBpk8jB7sHk1E,272185
674
- plexflow/utils/torrent/extract/__pycache__/extratorrent.cpython-312.pyc,sha256=a08Mno5zwRLr5VQTzF5OFskW5cHt5kKdhJbxQRqWzF4,3448
675
- plexflow/utils/torrent/extract/__pycache__/piratesparadise.cpython-312.pyc,sha256=waiUKJht8KLl40FvbF1Sgspqx1dxckV7Sa4Ft4sQfgw,2621
676
+ plexflow/utils/torrent/compare/__pycache__/with_subtitles.cpython-312.pyc,sha256=2XV3manUcmu9gi6V9bsYv96hFclpxIbX4xkHzyTkvag,3554
677
+ plexflow/utils/torrent/compare/with_subtitles.py,sha256=7qT8E7utesCCLqyObFlctbJkD6g8ijlXfeTfm5Ei2xY,2835
678
+ plexflow/utils/torrent/extract/__pycache__/common.cpython-312.pyc,sha256=r0g2SaOUKmtQVIM89z6BpUXI0SEMYvGX_HmBQoezWn0,1872
679
+ plexflow/utils/torrent/extract/__pycache__/ext.cpython-312.pyc,sha256=Xkuv_NW2TReyiekSGgL_Az_B42fWyuGsZN5lbgOlAxM,272178
680
+ plexflow/utils/torrent/extract/__pycache__/extratorrent.cpython-312.pyc,sha256=MgzrUiRepe3xY0EbdyXv368fLM-1HM2mcXTQs4Bdo_4,3442
681
+ plexflow/utils/torrent/extract/__pycache__/piratesparadise.cpython-312.pyc,sha256=bJTs7wN0cVm_iBviuLbWi1ecT0USM4GJP_ky9peNUjg,2621
676
682
  plexflow/utils/torrent/extract/__pycache__/tgx.cpython-312.pyc,sha256=rH61J6FQJZ97FC8ZwEDKNwU6lYOMenU1QvDYAD-bEwM,4659
677
- plexflow/utils/torrent/extract/__pycache__/therarbg.cpython-312.pyc,sha256=cPovyLOodqJbjr14ROsBBhRQzRjp9KT0dC_WHb3tZCU,7889
678
- plexflow/utils/torrent/extract/__pycache__/torrentquest.cpython-312.pyc,sha256=hOpCw3fSf5GPYxZnOv9VEW1RzsnFzTfHH5wK5ubbp3Y,7880
683
+ plexflow/utils/torrent/extract/__pycache__/therarbg.cpython-312.pyc,sha256=gkOguMpZqK0whTPBLamoljYVBZ6gXvyau3Rbv4Y5JF8,7872
684
+ plexflow/utils/torrent/extract/__pycache__/torrentquest.cpython-312.pyc,sha256=Hwax3WNMFF0NS2z0JbA2HPhY2L-3ges6QLx5j9g2wZM,7866
679
685
  plexflow/utils/torrent/extract/common.py,sha256=DtEe7aUfE96pwWnVl0aUOlRBq2ps36tEfealFZp70hg,1216
680
686
  plexflow/utils/torrent/extract/ext.py,sha256=3jmBfR1zL8XgdhR1BVZWRmH7TN68gFcX5K799bjwN0o,271641
681
687
  plexflow/utils/torrent/extract/extratorrent.py,sha256=G_PlvT1CcMiq96q3BMsSwMg-BEjD3kp0IBB6up8zoK4,2339
682
688
  plexflow/utils/torrent/extract/kat.py,sha256=-pQND_1forno9wn5w-Kua7PJFjKpDH_HcYvMIOJ8kA0,91269
683
689
  plexflow/utils/torrent/extract/piratesparadise.py,sha256=yAlMDRdtmAZvHlo-rvMNDZEkH4HCyXDe_DMhV5SATNM,1912
684
690
  plexflow/utils/torrent/extract/tgx.py,sha256=EMvuK5LcuukTaDgTsSU-9fP4vYDU931957JnyLnhCcY,3223
691
+ plexflow/utils/torrent/extract/tgxi.py,sha256=wkqlPKqfhBcdMyH1wzxIWq1CSLYrAqvSVSb39JDC884,2068
685
692
  plexflow/utils/torrent/extract/therarbg.py,sha256=q97dJCmpnzKJcrhlOwOWx-ovMCk5qVY1HCXa4RAvrao,6527
686
693
  plexflow/utils/torrent/extract/torrentquest.py,sha256=gQn9GanFM5SXvpwjcyRu0XgTZ23KTJ_FeHIsanGl2WI,6868
687
694
  plexflow/utils/torrent/files.py,sha256=XJxvFedZQb8H-wSzNIZI_2nUOT-pqr6MwgYcoty0yA0,2285
@@ -697,7 +704,7 @@ plexflow/utils/video/__pycache__/audio.cpython-312.pyc,sha256=vXBnJwWgTDFdixMBs-
697
704
  plexflow/utils/video/__pycache__/subtitle.cpython-312.pyc,sha256=PCjpCLydGXaRsQy6cikhgsEs8WlComfOoYPiLFqfVMA,2515
698
705
  plexflow/utils/video/audio.py,sha256=tJ_lNwcjVuBQYD5cYOlXpr__eh8-hnReIgNRgIYOpqo,3380
699
706
  plexflow/utils/video/subtitle.py,sha256=qPvvBjlPj0fynJJvGJgGeKt9ey26R-cF6EoLaYt9iXU,1333
700
- plexflow-0.0.118.dist-info/METADATA,sha256=1l8zKckww9-3crNzZe_l-tW8ot03de3k9jzaOhd1KcU,3094
701
- plexflow-0.0.118.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
702
- plexflow-0.0.118.dist-info/entry_points.txt,sha256=SSLjrLcZa2880346VUIsCG9vcLsquf-RTX9pkdNaTO8,1498
703
- plexflow-0.0.118.dist-info/RECORD,,
707
+ plexflow-0.0.120.dist-info/METADATA,sha256=mgWquex8fayOpHr1-9Pyzsg4mLAy2_UFhZ5JvaCxIvU,3140
708
+ plexflow-0.0.120.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
709
+ plexflow-0.0.120.dist-info/entry_points.txt,sha256=9RJC3ikOQORHNOn573EdwJOBUnFU_4EGHbtNUM5pjjY,1557
710
+ plexflow-0.0.120.dist-info/RECORD,,
@@ -22,6 +22,7 @@ redis_hook=scripts.redis.redis_hook:main
22
22
  refresh=scripts.plex.library.refresh:main
23
23
  schedule=scripts.downloads.qbit.schedule:main
24
24
  subscribe_hello_world=scripts.kafka.subscribe_hello_world:main
25
+ subtitle_compare=scripts.torrents.subtitle_comparison:main
25
26
  tgx_context=scripts.torrents.tgx_context:main
26
27
  tgx_spider=scripts.spiders.tgx_spider:main
27
28
  torrentquest=scripts.torrents.torrentquest:main