KekikStream 0.2.5__py3-none-any.whl → 0.2.7__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.
@@ -3,6 +3,7 @@
3
3
  from ..CLI import konsol
4
4
  from .ExtractorModels import ExtractResult
5
5
  import subprocess
6
+ import os
6
7
 
7
8
  class MediaHandler:
8
9
  def __init__(self, title: str = "KekikStream", headers: dict = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5)"}):
@@ -15,11 +16,13 @@ class MediaHandler:
15
16
  self.play_with_mpv(extract_data)
16
17
  return
17
18
 
18
- vlc_command = ["vlc"]
19
+ vlc_command = ["vlc", "--quiet"]
19
20
 
20
21
  if self.title:
21
- vlc_command.append(f"--meta-title={self.title}")
22
- vlc_command.append(f"--input-title-format={self.title}")
22
+ vlc_command.extend([
23
+ f"--meta-title={self.title}",
24
+ f"--input-title-format={self.title}"
25
+ ])
23
26
 
24
27
  if "User-Agent" in self.headers:
25
28
  vlc_command.append(f"--http-user-agent={self.headers.get('User-Agent')}")
@@ -31,7 +34,10 @@ class MediaHandler:
31
34
  vlc_command.append(f"--sub-file={subtitle.url}")
32
35
 
33
36
  vlc_command.append(extract_data.url)
34
- subprocess.run(vlc_command, check=True)
37
+
38
+ with open(os.devnull, "w") as devnull:
39
+ subprocess.run(vlc_command, stdout=devnull, stderr=devnull, check=True)
40
+
35
41
  except subprocess.CalledProcessError as e:
36
42
  konsol.print(f"[red]VLC oynatma hatası: {e}[/red]")
37
43
  konsol.print({"title": self.title, "url": extract_data.url, "headers": self.headers})
@@ -41,7 +47,7 @@ class MediaHandler:
41
47
 
42
48
  def play_with_mpv(self, extract_data: ExtractResult):
43
49
  try:
44
- mpv_command = ["mpv"]
50
+ mpv_command = ["mpv", "--really-quiet"]
45
51
 
46
52
  if self.title:
47
53
  mpv_command.append(f"--title={self.title}")
@@ -59,7 +65,10 @@ class MediaHandler:
59
65
  mpv_command.append(f"--sub-file={subtitle.url}")
60
66
 
61
67
  mpv_command.append(extract_data.url)
62
- subprocess.run(mpv_command, check=True)
68
+
69
+ with open(os.devnull, "w") as devnull:
70
+ subprocess.run(mpv_command, stdout=devnull, stderr=devnull, check=True)
71
+
63
72
  except subprocess.CalledProcessError as e:
64
73
  konsol.print(f"[red]mpv oynatma hatası: {e}[/red]")
65
74
  konsol.print({"title": self.title, "url": extract_data.url, "headers": self.headers})
@@ -0,0 +1,81 @@
1
+ # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
+
3
+ from KekikStream.Core import ExtractorBase, ExtractResult, Subtitle
4
+ import re
5
+
6
+ class ContentX(ExtractorBase):
7
+ name = "ContentX"
8
+ main_url = "https://contentx.me"
9
+
10
+ async def extract(self, url, referer=None) -> list[ExtractResult]:
11
+ if referer:
12
+ self.oturum.headers.update({"Referer": referer})
13
+
14
+ istek = await self.oturum.get(url)
15
+ istek.raise_for_status()
16
+ i_source = istek.text
17
+
18
+ i_extract = re.search(r"window\.openPlayer\('([^']+)'\)", i_source)
19
+ if not i_extract:
20
+ raise ValueError("iExtract is null")
21
+ i_extract_value = i_extract.group(1)
22
+
23
+ subtitles = []
24
+ sub_urls = set()
25
+ for match in re.finditer(r'"file":"([^"]+)","label":"([^"]+)"', i_source):
26
+ sub_url, sub_lang = match.groups()
27
+
28
+ if sub_url in sub_urls:
29
+ continue
30
+ sub_urls.add(sub_url)
31
+
32
+ subtitles.append(
33
+ Subtitle(
34
+ name = sub_lang.replace("\\u0131", "ı")
35
+ .replace("\\u0130", "İ")
36
+ .replace("\\u00fc", "ü")
37
+ .replace("\\u00e7", "ç"),
38
+ url = self.fix_url(sub_url.replace("\\", ""))
39
+ )
40
+ )
41
+
42
+ vid_source_request = await self.oturum.get(f"{self.main_url}/source2.php?v={i_extract_value}", headers={"Referer": referer or self.main_url})
43
+ vid_source_request.raise_for_status()
44
+
45
+ vid_source = vid_source_request.text
46
+ vid_extract = re.search(r'file":"([^"]+)"', vid_source)
47
+ if not vid_extract:
48
+ raise ValueError("vidExtract is null")
49
+ m3u_link = vid_extract.group(1).replace("\\", "")
50
+
51
+ results = [
52
+ ExtractResult(
53
+ name = self.name,
54
+ url = m3u_link,
55
+ referer = url,
56
+ subtitles = subtitles
57
+ )
58
+ ]
59
+
60
+ i_dublaj = re.search(r',\"([^"]+)\",\"Türkçe"', i_source)
61
+ if i_dublaj:
62
+ dublaj_value = i_dublaj.group(1)
63
+ dublaj_source_request = await self.oturum.get(f"{self.main_url}/source2.php?v={dublaj_value}", headers={"Referer": referer or self.main_url})
64
+ dublaj_source_request.raise_for_status()
65
+
66
+ dublaj_source = dublaj_source_request.text
67
+ dublaj_extract = re.search(r'file":"([^"]+)"', dublaj_source)
68
+ if not dublaj_extract:
69
+ raise ValueError("dublajExtract is null")
70
+ dublaj_link = dublaj_extract.group(1).replace("\\", "")
71
+
72
+ results.append(
73
+ ExtractResult(
74
+ name = f"{self.name} Türkçe Dublaj",
75
+ url = dublaj_link,
76
+ referer = url,
77
+ subtitles = []
78
+ )
79
+ )
80
+
81
+ return results
@@ -0,0 +1,7 @@
1
+ # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
+
3
+ from KekikStream.Extractors.ContentX import ContentX
4
+
5
+ class FourCX(ContentX):
6
+ name = "FourCX"
7
+ main_url = "https://four.contentx.me"
@@ -0,0 +1,7 @@
1
+ # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
+
3
+ from KekikStream.Extractors.ContentX import ContentX
4
+
5
+ class FourPichive(ContentX):
6
+ name = "FourPichive"
7
+ main_url = "https://four.pichive.online"
@@ -0,0 +1,7 @@
1
+ # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
+
3
+ from KekikStream.Extractors.ContentX import ContentX
4
+
5
+ class FourPlayRu(ContentX):
6
+ name = "FourPlayRu"
7
+ main_url = "https://four.playru.net"
@@ -0,0 +1,7 @@
1
+ # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
+
3
+ from KekikStream.Extractors.PeaceMakerst import PeaceMakerst
4
+
5
+ class HDStreamAble(PeaceMakerst):
6
+ name = "HDStreamAble"
7
+ main_url = "https://hdstreamable.com"
@@ -0,0 +1,7 @@
1
+ # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
+
3
+ from KekikStream.Extractors.ContentX import ContentX
4
+
5
+ class Hotlinger(ContentX):
6
+ name = "Hotlinger"
7
+ main_url = "https://hotlinger.com"
@@ -0,0 +1,43 @@
1
+ # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
+
3
+ from KekikStream.Core import ExtractorBase, ExtractResult
4
+ from Kekik.Sifreleme import AESManager
5
+ import re
6
+ import json
7
+
8
+ class MixPlayHD(ExtractorBase):
9
+ name = "MixPlayHD"
10
+ main_url = "https://mixplayhd.com"
11
+
12
+ async def extract(self, url, referer=None) -> ExtractResult:
13
+ if referer:
14
+ self.oturum.headers.update({"Referer": referer})
15
+
16
+ istek = await self.oturum.get(url)
17
+ istek.raise_for_status()
18
+
19
+ be_player_match = re.search(r"bePlayer\('([^']+)',\s*'(\{[^\}]+\})'\);", istek.text)
20
+ if not be_player_match:
21
+ raise ValueError("bePlayer not found in the response.")
22
+
23
+ be_player_pass = be_player_match.group(1)
24
+ be_player_data = be_player_match.group(2)
25
+
26
+ try:
27
+ decrypted_data = AESManager.decrypt(be_player_data, be_player_pass).replace("\\", "")
28
+ decrypted_json = json.loads(decrypted_data)
29
+ except Exception as e:
30
+ raise RuntimeError(f"Decryption failed: {e}")
31
+
32
+ video_url_match = re.search(r'"video_location":"([^"]+)"', decrypted_json.get("schedule", {}).get("client", ""))
33
+ if not video_url_match:
34
+ raise ValueError("M3U8 video URL not found in the decrypted data.")
35
+
36
+ video_url = video_url_match.group(1)
37
+
38
+ return ExtractResult(
39
+ name = self.name,
40
+ url = video_url,
41
+ referer = self.main_url,
42
+ subtitles = []
43
+ )
@@ -0,0 +1,7 @@
1
+ # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
+
3
+ from KekikStream.Extractors.Odnoklassniki import Odnoklassniki
4
+
5
+ class OkRuHTTP(Odnoklassniki):
6
+ name = "OkRuHTTP"
7
+ main_url = "http://ok.ru"
@@ -0,0 +1,7 @@
1
+ # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
+
3
+ from KekikStream.Extractors.Odnoklassniki import Odnoklassniki
4
+
5
+ class OkRuSSL(Odnoklassniki):
6
+ name = "OkRuSSL"
7
+ main_url = "https://ok.ru"
@@ -0,0 +1,59 @@
1
+ # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
+
3
+ from KekikStream.Core import ExtractorBase, ExtractResult
4
+ import re
5
+ import json
6
+
7
+ class PeaceMakerst(ExtractorBase):
8
+ name = "PeaceMakerst"
9
+ main_url = "https://peacemakerst.com"
10
+
11
+ async def extract(self, url, referer=None) -> ExtractResult:
12
+ if referer:
13
+ self.oturum.headers.update({"Referer": referer})
14
+
15
+ self.oturum.headers.update({
16
+ "Content-Type" : "application/x-www-form-urlencoded; charset=UTF-8",
17
+ "X-Requested-With" : "XMLHttpRequest"
18
+ })
19
+
20
+ response = await self.oturum.post(
21
+ url = f"{url}?do=getVideo",
22
+ data = {
23
+ "hash" : url.split("video/")[-1],
24
+ "r" : referer or "",
25
+ "s" : ""
26
+ }
27
+ )
28
+ response.raise_for_status()
29
+
30
+ response_text = response.text
31
+ m3u_link = None
32
+
33
+ if "teve2.com.tr\\/embed\\/" in response_text:
34
+ teve2_id = re.search(r"teve2\.com\.tr\\\/embed\\\/(\d+)", response_text).group(1)
35
+ teve2_url = f"https://www.teve2.com.tr/action/media/{teve2_id}"
36
+
37
+ teve2_response = await self.oturum.get(teve2_url, headers={"Referer": f"https://www.teve2.com.tr/embed/{teve2_id}"})
38
+ teve2_response.raise_for_status()
39
+ teve2_json = teve2_response.json()
40
+
41
+ m3u_link = f"{teve2_json['Media']['Link']['ServiceUrl']}//{teve2_json['Media']['Link']['SecurePath']}"
42
+ else:
43
+ try:
44
+ video_response = response.json()
45
+ video_sources = video_response.get("videoSources", [])
46
+ if video_sources:
47
+ m3u_link = video_sources[-1]["file"]
48
+ except (json.JSONDecodeError, KeyError):
49
+ raise ValueError("Peace response is invalid or null.")
50
+
51
+ if not m3u_link:
52
+ raise ValueError("m3u link not found.")
53
+
54
+ return ExtractResult(
55
+ name = self.name,
56
+ url = m3u_link,
57
+ referer = url,
58
+ subtitles = []
59
+ )
@@ -0,0 +1,7 @@
1
+ # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
+
3
+ from KekikStream.Extractors.ContentX import ContentX
4
+
5
+ class Pichive(ContentX):
6
+ name = "Pichive"
7
+ main_url = "https://pichive.online"
@@ -0,0 +1,7 @@
1
+ # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
+
3
+ from KekikStream.Extractors.ContentX import ContentX
4
+
5
+ class PlayRu(ContentX):
6
+ name = "PlayRu"
7
+ main_url = "https://playru.net"
@@ -0,0 +1,53 @@
1
+ # ! Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
+
3
+ from KekikStream.Core import ExtractorBase, ExtractResult, Subtitle
4
+ import json
5
+
6
+ class VideoSeyred(ExtractorBase):
7
+ name = "VideoSeyred"
8
+ main_url = "https://videoseyred.in"
9
+
10
+ async def extract(self, url, referer=None) -> ExtractResult:
11
+ if referer:
12
+ self.oturum.headers.update({"Referer": referer})
13
+
14
+ video_id = url.split("embed/")[1].split("?")[0]
15
+ video_url = f"{self.main_url}/playlist/{video_id}.json"
16
+
17
+ response = await self.oturum.get(video_url)
18
+ response.raise_for_status()
19
+
20
+ try:
21
+ response_list = json.loads(response.text)
22
+ if not response_list:
23
+ raise ValueError("Empty response from VideoSeyred.")
24
+ response_data = response_list[0]
25
+ except (json.JSONDecodeError, IndexError) as e:
26
+ raise RuntimeError(f"Failed to parse response: {e}")
27
+
28
+ subtitles = []
29
+ for track in response_data.get("tracks", []):
30
+ if track.get("kind") == "captions" and track.get("label"):
31
+ subtitles.append(
32
+ Subtitle(
33
+ name = track["label"],
34
+ url = self.fix_url(track["file"])
35
+ )
36
+ )
37
+
38
+ video_links = []
39
+ for source in response_data.get("sources", []):
40
+ video_links.append(
41
+ ExtractResult(
42
+ name = self.name,
43
+ url = self.fix_url(source["file"]),
44
+ referer = self.main_url,
45
+ subtitles = subtitles
46
+ )
47
+ )
48
+
49
+ if not video_links:
50
+ raise ValueError("No video links found in the response.")
51
+
52
+ # En yüksek kaliteli videoyu döndür (varsayılan olarak ilk video)
53
+ return video_links[0] if len(video_links) == 1 else video_links
@@ -13,7 +13,7 @@ class UIManager:
13
13
 
14
14
  @staticmethod
15
15
  async def select_from_list(message, choices):
16
- return await inquirer.select(message=message, choices=choices, max_height="60%").execute_async()
16
+ return await inquirer.select(message=message, choices=choices, max_height="75%").execute_async()
17
17
 
18
18
  @staticmethod
19
19
  async def select_from_fuzzy(message, choices):
@@ -22,7 +22,7 @@ class UIManager:
22
22
  choices = choices,
23
23
  validate = lambda result: result in [choice if isinstance(choice, str) else choice["value"] for choice in choices],
24
24
  filter = lambda result: result,
25
- max_height = "60%"
25
+ max_height = "75%"
26
26
  ).execute_async()
27
27
 
28
28
  @staticmethod
KekikStream/__init__.py CHANGED
@@ -171,6 +171,7 @@ class KekikStream:
171
171
 
172
172
  async def play_media(self, selected_link):
173
173
  if hasattr(self.current_plugin, "play") and callable(self.current_plugin.play):
174
+ konsol.log(f"[yellow][»] Oynatılıyor : {selected_link}")
174
175
  await self.current_plugin.play(
175
176
  name = self.current_plugin._data[selected_link]["name"],
176
177
  url = selected_link,
@@ -199,6 +200,7 @@ class KekikStream:
199
200
 
200
201
  self.media_manager.set_title(f"{self.media_manager.get_title()} | {selected_data.name}")
201
202
  self.media_manager.set_headers({"Referer": selected_data.referer})
203
+ konsol.log(f"[yellow][»] Oynatılıyor : {selected_data.url}")
202
204
  self.media_manager.play_media(selected_data)
203
205
 
204
206
  async def search_all_plugins(self, query: str):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: KekikStream
3
- Version: 0.2.5
3
+ Version: 0.2.7
4
4
  Summary: terminal üzerinden medya içeriği aramanızı ve VLC/MPV gibi popüler medya oynatıcılar aracılığıyla doğrudan izlemenizi sağlayan modüler ve genişletilebilir bir bıdı bıdı
5
5
  Home-page: https://github.com/keyiflerolsun/KekikStream
6
6
  Author: keyiflerolsun
@@ -1,4 +1,4 @@
1
- KekikStream/__init__.py,sha256=9oTVlq0MbL5E5w_mSPjuC3Fi4dYn_Mgzww3fld3zjiQ,9993
1
+ KekikStream/__init__.py,sha256=LILP4dz-FpG8-GyUIsaZKX2t3uhh662U0AttlmgLviI,10137
2
2
  KekikStream/__main__.py,sha256=4U-NO1f0Mts5Mf_QnWhWqRbTsRBy2y2VPlpHyaqG9_I,137
3
3
  KekikStream/requirements.txt,sha256=Kh3E0NzIkAmhVODtIwRVffVOHLiElO6Ua9kIgjbocPE,57
4
4
  KekikStream/CLI/__init__.py,sha256=9YlF135BVff85y492hX4sq2WY2CNqa4BuVzF9hIIaKE,233
@@ -6,15 +6,27 @@ KekikStream/CLI/check_update.py,sha256=rOa16bO9sGN-p78yaTRaccFoNfhHWEfDgGZNavpcw
6
6
  KekikStream/Core/ExtractorBase.py,sha256=SPXKZPfpzvgkJeMds-USzgpm8-qb0vgZjjLDs58NfGU,1069
7
7
  KekikStream/Core/ExtractorLoader.py,sha256=JovJJr6Clk3xpbRLlh7v_XOl3FGwVXCjTZivec1FktI,2533
8
8
  KekikStream/Core/ExtractorModels.py,sha256=vJeh4qd05K7nbqdCCGU29UkGQpce6jXfsCm7LuDL1G8,454
9
- KekikStream/Core/MediaHandler.py,sha256=Q_9LMc4Wnmv8PhMfoo2IgxpHLeikUgrqp_B_Rfs217U,3005
9
+ KekikStream/Core/MediaHandler.py,sha256=TFFngsvWGV-zllYlrb2HTvFSluGYZ8t83vH_8AXAoO4,3247
10
10
  KekikStream/Core/PluginBase.py,sha256=MmhGy0XtbkWxE5SNvsag0M_jNehMxPGtVyZFOKlJPM8,2304
11
11
  KekikStream/Core/PluginLoader.py,sha256=og5EPfnVqrb2kUkeGU65AY0fU43IbiUo_h3ix6ZiINY,2596
12
12
  KekikStream/Core/PluginModels.py,sha256=WWPEz8PpZZ4bLMDJzTE19BsQEJObkyhaYjDkyLaF2Ck,2365
13
13
  KekikStream/Core/__init__.py,sha256=HZpXs3MKy4joO0sDpIGcZ2DrUKwK49IKG-GQgKbO2jk,416
14
14
  KekikStream/Extractors/CloseLoad.py,sha256=YmDB3YvuDaCUbQ0T_tmhnkEsC5mSdEN6GNoAR662fl8,990
15
+ KekikStream/Extractors/ContentX.py,sha256=t6E36ZB2qXUKqY5VSceTrUdw2s-Uv9LF3yjGt48Xfmc,2982
16
+ KekikStream/Extractors/FourCX.py,sha256=4FrMj1IZBBpN_g1P6S3A-8eUu7QFwlt4fJXzJ7vfe0Q,221
17
+ KekikStream/Extractors/FourPichive.py,sha256=iq3BCUbih1UVF4y4BIWO--0hX5jP2nxqesNx3MGP3kQ,234
18
+ KekikStream/Extractors/FourPlayRu.py,sha256=wq1ylxKpsO_IBoYr_ALzB2dVrQpJ-jY9lf2zPhcAZX8,228
19
+ KekikStream/Extractors/HDStreamAble.py,sha256=66n5EvIdX_or5cdnlJ_Uqmzi50n4rl9c5VCw8kBqhQk,245
20
+ KekikStream/Extractors/Hotlinger.py,sha256=NFMRgUmb6BCrJfa7Hi0VarDNYvCeVknBWEk24FKBBa0,224
15
21
  KekikStream/Extractors/MailRu.py,sha256=lB3Xy912EaSEUw7Im65L5TwtIeM7OLFV1_9lan39g40,1308
22
+ KekikStream/Extractors/MixPlayHD.py,sha256=4sSHingB3gquakFesnbC0LmkJZWW2Jvv5F4kOdo58tA,1528
16
23
  KekikStream/Extractors/Odnoklassniki.py,sha256=rP9jzJ42PGyguoEckpm-9nMtfqyXTN2lVzWgG-WYVaI,3296
24
+ KekikStream/Extractors/OkRuHTTP.py,sha256=L-B0i_i_Vnm61GvUfd6cGIW-o_H4M-C7DO_cdw2rQPU,228
25
+ KekikStream/Extractors/OkRuSSL.py,sha256=FHJ5XZ1dO5ED3mIku3e3vnq8K0slrcr0jqhaUnHmfVk,227
26
+ KekikStream/Extractors/PeaceMakerst.py,sha256=1l5Y5AQB_P53upVqgBuJTnjNV7nHVMr56tp673Q8omU,2123
27
+ KekikStream/Extractors/Pichive.py,sha256=BSVYFwL3Ax6yGoS1WkpOWtngxNyuZLoKzpPwjibpu2s,221
17
28
  KekikStream/Extractors/PixelDrain.py,sha256=JLNaTdFJfXj5ExB_OjjyjwBZBD_gCOmL3fO_TWbHe90,998
29
+ KekikStream/Extractors/PlayRu.py,sha256=DQMZyCSJwLkrh-gfDD8T1DvUFNBAKUXpByeCAWuK6YY,215
18
30
  KekikStream/Extractors/RapidVid.py,sha256=HmSXDWhE1EXZRhNCxrqqEBbyJKbqFtTFRtq-zYg3G2c,2430
19
31
  KekikStream/Extractors/SibNet.py,sha256=w0Rv1cYB_Ho6M9Aho9n38Thp6mAfKPNe-eKFC_DbGuE,884
20
32
  KekikStream/Extractors/Sobreatsesuyp.py,sha256=7JUbqHLMWFkHuzH3NG2ogaV53e9fUmGvAr7h83yRtxs,1953
@@ -23,10 +35,11 @@ KekikStream/Extractors/TauVideo.py,sha256=bBjrZFSi4QqSJhRB0sDWMA0Saio-zpoAb6Ss4Q
23
35
  KekikStream/Extractors/TurboImgz.py,sha256=0d9t6bj4prVt1_LIbzwcfuqrSRB7SMvc4RKvE25BtW4,851
24
36
  KekikStream/Extractors/VidMoly.py,sha256=uzYArLNLTI8mZpMsOABWUOhJtT3FaY6GBrDnQ3Oyl90,3424
25
37
  KekikStream/Extractors/VidMoxy.py,sha256=UnVrCEI4XNiONE2aLV9dGUhRqQ9ELJTnYVXyG81N11A,1800
38
+ KekikStream/Extractors/VideoSeyred.py,sha256=Sx1qHNBMboGgU_bXHVgx3MlxtyKpR_LBJIQWX3nKxb4,1937
26
39
  KekikStream/Managers/ExtractorManager.py,sha256=9rGlUsnedJ7fwIeObN5Vsm8H5VLal0ODO7F93dDRx8w,976
27
40
  KekikStream/Managers/MediaManager.py,sha256=F7mkSvAttAaMHRvnDcxnV2K1D_sK644BCSrEaAmMl_U,522
28
41
  KekikStream/Managers/PluginManager.py,sha256=YDBLHB_Fh79A3Pei0ny2KLVY4VSihdNiKBh_w5tBl-0,637
29
- KekikStream/Managers/UIManager.py,sha256=RNsvfwker2Pwel9Ur14Bo0oY7Xg5XmlpvFAWdHQJJMc,1590
42
+ KekikStream/Managers/UIManager.py,sha256=PmGabWjHACnaOZLyIfOd0j4cfqpuV34RO58QeeIbF6E,1590
30
43
  KekikStream/Managers/__init__.py,sha256=3085I_9Sa2L_Vq6Z-QvYUYn1BapkN4sQqBo8ITZoD_4,251
31
44
  KekikStream/Plugins/FilmMakinesi.py,sha256=g4LRDP5Atn97PqbgnEdm0-wjVdXaJIVk1Ru0F8B66Ws,2902
32
45
  KekikStream/Plugins/FullHDFilmizlesene.py,sha256=HJzHDXHhhMpvXxiD2SjpoZEYs7dmnPymE8EXCSvLKVo,3106
@@ -34,9 +47,9 @@ KekikStream/Plugins/JetFilmizle.py,sha256=DPdvTEns8r2MI9pHY8d9EEsUZmlQU7N2C9yr8o
34
47
  KekikStream/Plugins/SezonlukDizi.py,sha256=5BZVzQ2eQtymHxO0bzjA2ho4FFNahPFQly4hoHuH8lo,4441
35
48
  KekikStream/Plugins/SineWix.py,sha256=ZtcIwPW0ONGkSjT7Ye8b71RWdHZMUZefX-JTWu6uGSs,4854
36
49
  KekikStream/Plugins/UgurFilm.py,sha256=U7ryNWpjSZJWuYlMGX1Be9uuyiM3SfuI9VJcEiXedNs,2960
37
- KekikStream-0.2.5.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
38
- KekikStream-0.2.5.dist-info/METADATA,sha256=Fb_lAoiyd9AXVnT6eYWPR26_CbkAwHGCJQpSjD7AOXw,3959
39
- KekikStream-0.2.5.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
40
- KekikStream-0.2.5.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
41
- KekikStream-0.2.5.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
42
- KekikStream-0.2.5.dist-info/RECORD,,
50
+ KekikStream-0.2.7.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
51
+ KekikStream-0.2.7.dist-info/METADATA,sha256=ZT9huME1aHbhfr_MShWmLS9fEtGdeQBCofWXjwk2pPw,3959
52
+ KekikStream-0.2.7.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
53
+ KekikStream-0.2.7.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
54
+ KekikStream-0.2.7.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
55
+ KekikStream-0.2.7.dist-info/RECORD,,