KekikStream 1.0.4__py3-none-any.whl → 1.0.6__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.
- KekikStream/Core/Plugin/PluginModels.py +10 -1
- KekikStream/Extractors/VidMoly.py +4 -0
- KekikStream/Extractors/VidMolyMe.py +7 -0
- KekikStream/Plugins/DiziBox.py +1 -1
- KekikStream/Plugins/Dizilla.py +1 -1
- KekikStream/Plugins/RecTV.py +8 -7
- KekikStream/Plugins/SineWix.py +3 -0
- KekikStream/Plugins/UgurFilm.py +2 -2
- KekikStream/__init__.py +61 -47
- {KekikStream-1.0.4.dist-info → KekikStream-1.0.6.dist-info}/METADATA +9 -1
- {KekikStream-1.0.4.dist-info → KekikStream-1.0.6.dist-info}/RECORD +15 -14
- {KekikStream-1.0.4.dist-info → KekikStream-1.0.6.dist-info}/LICENSE +0 -0
- {KekikStream-1.0.4.dist-info → KekikStream-1.0.6.dist-info}/WHEEL +0 -0
- {KekikStream-1.0.4.dist-info → KekikStream-1.0.6.dist-info}/entry_points.txt +0 -0
- {KekikStream-1.0.4.dist-info → KekikStream-1.0.6.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
# Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
|
2
2
|
|
3
|
-
from pydantic import BaseModel, field_validator
|
3
|
+
from pydantic import BaseModel, field_validator, model_validator
|
4
4
|
from typing import List, Optional
|
5
5
|
|
6
6
|
|
@@ -40,6 +40,15 @@ class Episode(BaseModel):
|
|
40
40
|
title : Optional[str] = None
|
41
41
|
url : Optional[str] = None
|
42
42
|
|
43
|
+
@model_validator(mode="after")
|
44
|
+
def check_title(self) -> "Episode":
|
45
|
+
if not self.title:
|
46
|
+
self.title = ""
|
47
|
+
|
48
|
+
if any(keyword in self.title.lower() for keyword in ["bölüm", "sezon", "episode"]):
|
49
|
+
self.title = ""
|
50
|
+
|
51
|
+
return self
|
43
52
|
|
44
53
|
class SeriesInfo(BaseModel):
|
45
54
|
url : Optional[str] = None
|
@@ -17,6 +17,10 @@ class VidMoly(ExtractorBase):
|
|
17
17
|
"Sec-Fetch-Dest" : "iframe",
|
18
18
|
})
|
19
19
|
|
20
|
+
if self.main_url.endswith(".me"):
|
21
|
+
self.main_url = self.main_url.replace(".me", ".to")
|
22
|
+
url = url.replace(".me", ".to")
|
23
|
+
|
20
24
|
# Embed URL oluştur
|
21
25
|
embed_url = url.replace("/w/", "/embed-") + "-920x360.html" if "/w/" in url else url
|
22
26
|
script_content = None
|
KekikStream/Plugins/DiziBox.py
CHANGED
KekikStream/Plugins/Dizilla.py
CHANGED
KekikStream/Plugins/RecTV.py
CHANGED
@@ -21,18 +21,19 @@ class RecTV(PluginBase):
|
|
21
21
|
istek = await self.http2.get(f"{self.main_url}/api/search/{query}/{self.sw_key}/")
|
22
22
|
|
23
23
|
kanallar = istek.json().get("channels")
|
24
|
-
kanallar = sorted(kanallar, key=lambda sozluk: sozluk["title"])
|
25
|
-
|
26
24
|
icerikler = istek.json().get("posters")
|
27
|
-
|
25
|
+
tum_veri = {item['title']: item for item in kanallar + icerikler}.values()
|
26
|
+
tum_veri = sorted(tum_veri, key=lambda sozluk: sozluk["title"])
|
27
|
+
|
28
|
+
tur_ver = lambda veri: " | Dizi" if veri.get("type") == "serie" else " | Film"
|
28
29
|
|
29
30
|
return [
|
30
31
|
SearchResult(
|
31
|
-
title = veri.get("title"),
|
32
|
+
title = veri.get("title") + tur_ver(veri),
|
32
33
|
url = dumps(veri),
|
33
34
|
poster = self.fix_url(veri.get("image")),
|
34
35
|
)
|
35
|
-
for veri in
|
36
|
+
for veri in tum_veri
|
36
37
|
]
|
37
38
|
|
38
39
|
async def load_item(self, url: str) -> MovieInfo:
|
@@ -49,7 +50,7 @@ class RecTV(PluginBase):
|
|
49
50
|
ep_model = Episode(
|
50
51
|
season = int(re.search(r"(\d+)\.S", season.get("title")).group(1)) if re.search(r"(\d+)\.S", season.get("title")) else 1,
|
51
52
|
episode = int(re.search(r"Bölüm (\d+)", episode.get("title")).group(1)) if re.search(r"Bölüm (\d+)", episode.get("title")) else 1,
|
52
|
-
title =
|
53
|
+
title = episode.get("title"),
|
53
54
|
url = self.fix_url(episode.get("sources")[0].get("url")),
|
54
55
|
)
|
55
56
|
|
@@ -57,7 +58,7 @@ class RecTV(PluginBase):
|
|
57
58
|
|
58
59
|
self._data[ep_model.url] = {
|
59
60
|
"ext_name" : self.name,
|
60
|
-
"name" : f"{veri.get('title')} | {ep_model.season}. Sezon {ep_model.episode}. Bölüm
|
61
|
+
"name" : f"{veri.get('title')} | {ep_model.season}. Sezon {ep_model.episode}. Bölüm",
|
61
62
|
"referer" : "https://twitter.com/",
|
62
63
|
"subtitles" : []
|
63
64
|
}
|
KekikStream/Plugins/SineWix.py
CHANGED
@@ -105,4 +105,7 @@ class SineWix(PluginBase):
|
|
105
105
|
async def play(self, name: str, url: str, referer: str, subtitles: list[Subtitle]):
|
106
106
|
extract_result = ExtractResult(name=name, url=url, referer=referer, subtitles=subtitles)
|
107
107
|
self.media_handler.title = name
|
108
|
+
if self.name not in self.media_handler.title:
|
109
|
+
self.media_handler.title = f"{self.name} | {self.media_handler.title}"
|
110
|
+
|
108
111
|
self.media_handler.play_media(extract_result)
|
KekikStream/Plugins/UgurFilm.py
CHANGED
@@ -62,8 +62,8 @@ class UgurFilm(PluginBase):
|
|
62
62
|
if iframe and self.main_url in iframe:
|
63
63
|
post_data = {
|
64
64
|
"vid" : iframe.split("vid=")[-1],
|
65
|
-
"alternative" : "
|
66
|
-
"ord" : "
|
65
|
+
"alternative" : "vidmoly",
|
66
|
+
"ord" : "0",
|
67
67
|
}
|
68
68
|
player_response = await self.oturum.post(
|
69
69
|
url = f"{self.main_url}/player/ajax_sources.php",
|
KekikStream/__init__.py
CHANGED
@@ -18,6 +18,13 @@ class KekikStream:
|
|
18
18
|
self.secilen_sonuc = None
|
19
19
|
self.dizi = False
|
20
20
|
|
21
|
+
def _temizle_ve_baslik_goster(self, baslik: str):
|
22
|
+
"""
|
23
|
+
Konsolu temizler ve verilen başlıkla bir kural (separator) gösterir.
|
24
|
+
"""
|
25
|
+
self.arayuz_yonetici.clear_console()
|
26
|
+
konsol.rule(baslik)
|
27
|
+
|
21
28
|
async def baslat(self):
|
22
29
|
"""
|
23
30
|
Uygulamayı başlatır: konsolu temizler, başlığı gösterir ve eklenti seçimiyle devam eder.
|
@@ -33,12 +40,12 @@ class KekikStream:
|
|
33
40
|
# Program kapanırken tüm eklentileri kapat
|
34
41
|
await self.eklentiler_yonetici.close_plugins()
|
35
42
|
|
36
|
-
def
|
37
|
-
""
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
43
|
+
async def bi_bolum_daha(self):
|
44
|
+
self._temizle_ve_baslik_goster(f"[bold cyan]{self.suanki_eklenti.name} » Bi Bölüm Daha?[/bold cyan]")
|
45
|
+
return await self.sonuc_detaylari_goster(self.secilen_sonuc)
|
46
|
+
|
47
|
+
async def icerik_bitti(self):
|
48
|
+
return await self.bi_bolum_daha() if self.dizi else await self.baslat()
|
42
49
|
|
43
50
|
async def sonuc_bulunamadi(self):
|
44
51
|
"""
|
@@ -168,7 +175,7 @@ class KekikStream:
|
|
168
175
|
choices = secenekler
|
169
176
|
)
|
170
177
|
|
171
|
-
async def
|
178
|
+
async def __medya_bilgisi_yukle(self, url: str, deneme: int = 3):
|
172
179
|
"""
|
173
180
|
Belirtilen URL için medya bilgilerini, belirlenen deneme sayısı kadar yüklemeye çalışır.
|
174
181
|
"""
|
@@ -194,7 +201,7 @@ class KekikStream:
|
|
194
201
|
else:
|
195
202
|
url = secilen_sonuc
|
196
203
|
|
197
|
-
medya_bilgi = await self.
|
204
|
+
medya_bilgi = await self.__medya_bilgisi_yukle(url)
|
198
205
|
if not medya_bilgi:
|
199
206
|
return await self.sonuc_bulunamadi()
|
200
207
|
|
@@ -238,22 +245,19 @@ class KekikStream:
|
|
238
245
|
konsol.print("[bold red]Hiçbir bağlantı bulunamadı![/bold red]")
|
239
246
|
return await self.sonuc_bulunamadi()
|
240
247
|
|
248
|
+
# Doğrudan oynatma seçeneği
|
249
|
+
if hasattr(self.suanki_eklenti, "play") and callable(getattr(self.suanki_eklenti, "play", None)):
|
250
|
+
return await self.direkt_oynat(baglantilar)
|
251
|
+
|
241
252
|
# Bağlantıları çıkarıcılarla eşleştir
|
242
253
|
haritalama = self.cikaricilar_yonetici.map_links_to_extractors(baglantilar)
|
243
|
-
play_fonksiyonu_var = hasattr(self.suanki_eklenti, "play") and callable(getattr(self.suanki_eklenti, "play", None))
|
244
|
-
# ! DEBUG
|
245
|
-
# konsol.print(baglantilar)
|
246
254
|
|
247
255
|
# Uygun çıkarıcı kontrolü
|
248
|
-
if not haritalama
|
256
|
+
if not haritalama:
|
249
257
|
konsol.print("[bold red]Hiçbir Extractor bulunamadı![/bold red]")
|
250
258
|
konsol.print(baglantilar)
|
251
259
|
return await self.sonuc_bulunamadi()
|
252
260
|
|
253
|
-
# Doğrudan oynatma seçeneği
|
254
|
-
if not haritalama:
|
255
|
-
return await self.direkt_oynat(baglantilar)
|
256
|
-
|
257
261
|
# Kullanıcı seçenekleri
|
258
262
|
secim = await self.arayuz_yonetici.select_from_list(
|
259
263
|
message = "Ne yapmak istersiniz?",
|
@@ -267,7 +271,7 @@ class KekikStream:
|
|
267
271
|
choices = [{"name": cikarici_adi, "value": link} for link, cikarici_adi in haritalama.items()]
|
268
272
|
)
|
269
273
|
if secilen_link:
|
270
|
-
await self.
|
274
|
+
await self.extractor_ile_oynat(secilen_link)
|
271
275
|
|
272
276
|
case "Tüm Eklentilerde Ara":
|
273
277
|
await self.tum_eklentilerde_arama()
|
@@ -286,28 +290,23 @@ class KekikStream:
|
|
286
290
|
for key, value in self.suanki_eklenti._data.items() if key in baglantilar
|
287
291
|
]
|
288
292
|
)
|
289
|
-
if secilen_link:
|
290
|
-
await self.
|
293
|
+
if not secilen_link:
|
294
|
+
return await self.icerik_bitti()
|
295
|
+
|
296
|
+
data = self.suanki_eklenti._data.get(secilen_link, {})
|
297
|
+
await self.suanki_eklenti.play(
|
298
|
+
name = data.get("name"),
|
299
|
+
url = secilen_link,
|
300
|
+
referer = data.get("referer"),
|
301
|
+
subtitles = data.get("subtitles")
|
302
|
+
)
|
291
303
|
|
292
|
-
|
293
|
-
self._temizle_ve_baslik_goster(f"[bold cyan]{self.suanki_eklenti.name} » Bi Bölüm Daha?[/bold cyan]")
|
294
|
-
return await self.sonuc_detaylari_goster(self.secilen_sonuc)
|
304
|
+
return await self.icerik_bitti()
|
295
305
|
|
296
|
-
async def
|
306
|
+
async def extractor_ile_oynat(self, secilen_link: str):
|
297
307
|
"""
|
298
308
|
Seçilen bağlantıya göre medya oynatma işlemini gerçekleştirir.
|
299
309
|
"""
|
300
|
-
if hasattr(self.suanki_eklenti, "play") and callable(self.suanki_eklenti.play):
|
301
|
-
data = self.suanki_eklenti._data.get(secilen_link, {})
|
302
|
-
|
303
|
-
await self.suanki_eklenti.play(
|
304
|
-
name = data.get("name"),
|
305
|
-
url = secilen_link,
|
306
|
-
referer = data.get("referer"),
|
307
|
-
subtitles = data.get("subtitles")
|
308
|
-
)
|
309
|
-
return await self.bi_bolum_daha() if self.dizi else await self.baslat()
|
310
|
-
|
311
310
|
# Uygun çıkarıcıyı bul
|
312
311
|
cikarici: ExtractorBase = self.cikaricilar_yonetici.find_extractor(secilen_link)
|
313
312
|
if not cikarici:
|
@@ -320,25 +319,40 @@ class KekikStream:
|
|
320
319
|
konsol.print(f"[bold red]{cikarici.name} » hata oluştu: {hata}[/bold red]")
|
321
320
|
return await self.sonuc_bulunamadi()
|
322
321
|
|
323
|
-
|
322
|
+
secilen_data = await self.__baglanti_secimi_yap(extract_data)
|
323
|
+
if not secilen_data:
|
324
|
+
return
|
325
|
+
|
326
|
+
self.__medya_ayarla(secilen_data)
|
327
|
+
self.medya_yonetici.play_media(secilen_data)
|
328
|
+
|
329
|
+
await self.icerik_bitti()
|
330
|
+
|
331
|
+
async def __baglanti_secimi_yap(self, extract_data):
|
332
|
+
"""
|
333
|
+
Birden fazla bağlantı varsa seçim yapar.
|
334
|
+
"""
|
324
335
|
if isinstance(extract_data, list):
|
325
|
-
|
336
|
+
return await self.arayuz_yonetici.select_from_list(
|
326
337
|
message = "Birden fazla bağlantı bulundu, lütfen birini seçin:",
|
327
338
|
choices = [{"name": data.name, "value": data} for data in extract_data]
|
328
339
|
)
|
329
|
-
|
330
|
-
secilen_data = extract_data
|
340
|
+
return extract_data
|
331
341
|
|
332
|
-
|
333
|
-
|
334
|
-
|
342
|
+
def __medya_ayarla(self, secilen_data):
|
343
|
+
"""
|
344
|
+
Medya bilgilerini ayarlar.
|
345
|
+
"""
|
346
|
+
self.medya_yonetici.set_headers(secilen_data.headers)
|
335
347
|
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
self.medya_yonetici.
|
340
|
-
|
341
|
-
|
348
|
+
if secilen_data.referer and not secilen_data.headers.get("Referer"):
|
349
|
+
self.medya_yonetici.set_headers({"Referer": secilen_data.referer})
|
350
|
+
|
351
|
+
if self.suanki_eklenti.name not in self.medya_yonetici.get_title():
|
352
|
+
self.medya_yonetici.set_title(f"{self.suanki_eklenti.name} | {self.medya_yonetici.get_title()}")
|
353
|
+
|
354
|
+
if secilen_data.name not in self.medya_yonetici.get_title():
|
355
|
+
self.medya_yonetici.set_title(f"{self.medya_yonetici.get_title()} | {secilen_data.name}")
|
342
356
|
|
343
357
|
def basla():
|
344
358
|
try:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: KekikStream
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.6
|
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
|
@@ -21,6 +21,7 @@ Requires-Dist: cloudscraper
|
|
21
21
|
Requires-Dist: parsel
|
22
22
|
Requires-Dist: pydantic
|
23
23
|
Requires-Dist: InquirerPy
|
24
|
+
Requires-Dist: yt-dlp
|
24
25
|
Dynamic: author
|
25
26
|
Dynamic: author-email
|
26
27
|
Dynamic: classifier
|
@@ -58,6 +59,8 @@ Dynamic: summary
|
|
58
59
|
|
59
60
|
## 🚀 Kurulum
|
60
61
|
|
62
|
+
> Sisteminizde VLC ve MPV yüklü olmalıdır..
|
63
|
+
|
61
64
|
```bash
|
62
65
|
# Yüklemek
|
63
66
|
pip install KekikStream
|
@@ -80,6 +83,11 @@ KekikStream
|
|
80
83
|
|
81
84
|
- [DeoDorqnt387/aniwatch-tr](https://github.com/DeoDorqnt387/aniwatch-tr)
|
82
85
|
|
86
|
+
### 💻 Genişletme Referansları
|
87
|
+
|
88
|
+
- [keyiflerolsun/Kekik-cloudstream](https://github.com/keyiflerolsun/Kekik-cloudstream)
|
89
|
+
- [keyiflerolsun/seyirTurk-Parser](https://github.com/keyiflerolsun/seyirTurk-Parser)
|
90
|
+
|
83
91
|
## 🌐 Telif Hakkı ve Lisans
|
84
92
|
|
85
93
|
* *Copyright (C) 2024 by* [keyiflerolsun](https://github.com/keyiflerolsun) ❤️️
|
@@ -1,4 +1,4 @@
|
|
1
|
-
KekikStream/__init__.py,sha256=
|
1
|
+
KekikStream/__init__.py,sha256=QDfo9WEynwnO-NJA_lNnEUJKHrlroz5xbYiVY2Vlwrg,14952
|
2
2
|
KekikStream/__main__.py,sha256=B81dQoeGEb-T5Sycs3eNAmW7unvx0Mef0syCjs4nPds,137
|
3
3
|
KekikStream/requirements.txt,sha256=QWCXrrmKodIm7mGtIz9cWr9sks-lmL_TilKMrruWJn0,77
|
4
4
|
KekikStream/CLI/__init__.py,sha256=U6oLq_O7u5y2eHhBnmfhZNns_EqHHJXJmzl8jvZFUNY,230
|
@@ -13,7 +13,7 @@ KekikStream/Core/Media/MediaManager.py,sha256=9ItiUguOkk3wg3YY5uf3mrjfwLPCvggnP8
|
|
13
13
|
KekikStream/Core/Plugin/PluginBase.py,sha256=KuR89bkrChPAct4-PMjxbK4i6busXMMFeZjv-x4F1CQ,2521
|
14
14
|
KekikStream/Core/Plugin/PluginLoader.py,sha256=2UM3gNcEgd7k-FxG-JB5nTIS0K_clzvFtzGjMA_Sx7Q,3379
|
15
15
|
KekikStream/Core/Plugin/PluginManager.py,sha256=CZVg1eegi8vfMfccx0DRV0Box8kXz-aoULTQLgbPbvM,893
|
16
|
-
KekikStream/Core/Plugin/PluginModels.py,sha256=
|
16
|
+
KekikStream/Core/Plugin/PluginModels.py,sha256=M4uZl0rG3tt8xnmDubgTYfxyzTIC5cwEA2Mv5i7Zsqk,2354
|
17
17
|
KekikStream/Core/UI/UIManager.py,sha256=T4V_kdTTWa-UDamgLSKa__dWJuzcvRK9NuwBlzU9Bzc,1693
|
18
18
|
KekikStream/Extractors/CloseLoad.py,sha256=YmDB3YvuDaCUbQ0T_tmhnkEsC5mSdEN6GNoAR662fl8,990
|
19
19
|
KekikStream/Extractors/ContentX.py,sha256=XPoAuA95LOTgCUGyioXxOFWR0nNKWWOHLkYMlzguIIE,2980
|
@@ -38,23 +38,24 @@ KekikStream/Extractors/Sobreatsesuyp.py,sha256=p5aHxIM9aNBfWEnqjTdI_kYpcFKvBHg1B
|
|
38
38
|
KekikStream/Extractors/TRsTX.py,sha256=Z-Xk6kSAFFbxnj2I7x0gAbBbaQyuj1mIqn2Sw0xFtP4,2156
|
39
39
|
KekikStream/Extractors/TauVideo.py,sha256=I6TYHqAYSb_fAIcb8PiIdkzlQ0ZX-9Bb5_KMG955sJ4,1114
|
40
40
|
KekikStream/Extractors/TurboImgz.py,sha256=VXx9vZZRTdQiVNER0LcXm2nsv2OaXnxuPpslG-sEKD0,826
|
41
|
-
KekikStream/Extractors/VidMoly.py,sha256=
|
41
|
+
KekikStream/Extractors/VidMoly.py,sha256=jYvFSzE46mStArVEQedkvqUUIPwi1LS47qRk0YntAQU,3529
|
42
|
+
KekikStream/Extractors/VidMolyMe.py,sha256=ogLiFUJVqFbhtzQrZ1gSB9me85DiHvntjWtSvidYVS8,218
|
42
43
|
KekikStream/Extractors/VidMoxy.py,sha256=_K6BA7Uo59DA3ty_tsayCUZjXmRoDBTghekVNXiuZ7g,1800
|
43
44
|
KekikStream/Extractors/VideoSeyred.py,sha256=otyGi1zdY_JPrXJjoZjesCQDiOkxFdaWiXQ9mOmrygA,1780
|
44
|
-
KekikStream/Plugins/DiziBox.py,sha256=
|
45
|
+
KekikStream/Plugins/DiziBox.py,sha256=hDkIbZ2aoG0WoQyYc_168WpB3CaTYs7ArGBfgvUY7s4,6095
|
45
46
|
KekikStream/Plugins/DiziYou.py,sha256=tqTZUGJhXg5FBmCBmjw4JqyyQ5irXs3WnfKFDTkiHoY,5457
|
46
|
-
KekikStream/Plugins/Dizilla.py,sha256=
|
47
|
+
KekikStream/Plugins/Dizilla.py,sha256=evWYvETw1c4RY0GB5P20cB_I_U7ZxzzvnG7RLNGJRPs,4258
|
47
48
|
KekikStream/Plugins/FilmMakinesi.py,sha256=rz8TQeL41PJbeEmksgPHIhp6J-4vbSCBTeEH0ukExz4,2822
|
48
49
|
KekikStream/Plugins/FullHDFilmizlesene.py,sha256=Fa0gRP_NoMfPC8HIKRxERjQVOv8Fyb-ayMJ2EooZ7BE,3080
|
49
50
|
KekikStream/Plugins/JetFilmizle.py,sha256=Gu4Ums-88x7jNKAtKkdSXyMaOyLv0_Kb6jnomhAWhM0,3916
|
50
|
-
KekikStream/Plugins/RecTV.py,sha256=
|
51
|
+
KekikStream/Plugins/RecTV.py,sha256=dSDv6IV5ZNrgP4XnwD_fD-Rx8qxmx2dqNy70BgE63jE,5106
|
51
52
|
KekikStream/Plugins/SezonlukDizi.py,sha256=VUyKAu2SlUCV4uTQfIr2BLLTus2-LOXPFF4rDHG1rs8,4444
|
52
53
|
KekikStream/Plugins/Shorten.py,sha256=kDQGmj7qvfdDyDkU__QGjx-FoGSgCOPxcA3veM2BGPk,8858
|
53
|
-
KekikStream/Plugins/SineWix.py,sha256=
|
54
|
-
KekikStream/Plugins/UgurFilm.py,sha256=
|
55
|
-
KekikStream-1.0.
|
56
|
-
KekikStream-1.0.
|
57
|
-
KekikStream-1.0.
|
58
|
-
KekikStream-1.0.
|
59
|
-
KekikStream-1.0.
|
60
|
-
KekikStream-1.0.
|
54
|
+
KekikStream/Plugins/SineWix.py,sha256=EqezB8Fism2dugptFgCEpeauqsbvSEDRNozHxDIZNrQ,4997
|
55
|
+
KekikStream/Plugins/UgurFilm.py,sha256=rp6M7yjVljVWbGEAC9BB96W1wBsM-PdFbh5tcZ2ZhzI,2930
|
56
|
+
KekikStream-1.0.6.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
57
|
+
KekikStream-1.0.6.dist-info/METADATA,sha256=92sWqR5Oj1PQiVyOQxnJ_cMDBT6DwhJmRdNAQMov4A8,4508
|
58
|
+
KekikStream-1.0.6.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
59
|
+
KekikStream-1.0.6.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
|
60
|
+
KekikStream-1.0.6.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
|
61
|
+
KekikStream-1.0.6.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|