MyanmarSwe commited on
Commit
3ed6923
·
verified ·
1 Parent(s): 4eded1a

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +19 -40
main.py CHANGED
@@ -3,6 +3,7 @@ from datetime import datetime
3
  from fastapi import FastAPI, Request
4
  from fastapi.middleware.cors import CORSMiddleware
5
  from pymongo import MongoClient, DESCENDING
 
6
 
7
  app = FastAPI()
8
  app.add_middleware(CORSMiddleware, allow_origins=["*"])
@@ -13,15 +14,20 @@ metas_col, streams_col, users_col = db['metas'], db['streams'], db['users']
13
 
14
  def is_user_valid(key):
15
  user = users_col.find_one({"key": key})
16
- if not user or user.get("status") != "active": return False
17
- return True
 
 
 
 
 
18
 
19
  @app.get("/{user_key}/manifest.json")
20
  def manifest(user_key: str):
21
  valid = is_user_valid(user_key)
22
  return {
23
  "id": "com.myanmarswe.pro",
24
- "version": "2.6.5",
25
  "name": f"MSwe Cinema {'💎' if valid else '⚠️'}",
26
  "resources": ["catalog", "meta", "stream"],
27
  "types": ["movie", "series"],
@@ -33,18 +39,14 @@ def manifest(user_key: str):
33
  ]
34
  }
35
 
36
- # Catalog Route ကို တစ်ခုတည်းနဲ့ အကုန်မိအောင် ပြင်လိုက်ပါတယ်
37
  @app.get("/{user_key}/catalog/{m_type}/{cat_id}.json")
38
  @app.get("/{user_key}/catalog/{m_type}/{cat_id}/{extra}.json")
39
  def catalog(user_key: str, m_type: str, cat_id: str, extra: str = None):
40
  if not is_user_valid(user_key): return {"metas": []}
41
-
42
  query = {}
43
- # Search Logic: Stremio က search=query ဆိုပြီး ပို့လာရင် ဖတ်ဖို့
44
  if extra and "search=" in extra:
45
- search_query = extra.replace("search=", "")
46
- query["name"] = {"$regex": search_query, "$options": "i"}
47
-
48
  if cat_id == "mswe_col":
49
  query["id"] = {"$regex": "^tmdb_col:"}
50
  else:
@@ -52,56 +54,33 @@ def catalog(user_key: str, m_type: str, cat_id: str, extra: str = None):
52
  if "id" not in query: query["id"] = {"$regex": "^tmdb:"}
53
 
54
  cursor = metas_col.find(query).sort("updated_at", DESCENDING).limit(100)
55
- metas = []
56
- for m in cursor:
57
- metas.append({
58
- "id": m["id"],
59
- "type": m.get("type", m_type),
60
- "name": m.get("name"),
61
- "poster": m.get("poster")
62
- })
63
- return {"metas": metas}
64
 
65
  @app.get("/{user_key}/meta/{m_type}/{meta_id}.json")
66
  def meta(user_key: str, m_type: str, meta_id: str):
67
  if not is_user_valid(user_key): return {"meta": {}}
68
  m = metas_col.find_one({"id": meta_id})
69
  if not m: return {"meta": {}}
70
-
71
  m.pop("_id", None)
72
- # Cast အားလုံးကို String ဖြစ်အောင် သေချာပြောင်းပေးခြင်း (Detail Screen မှာ Cast ပေါ်စေရန်)
73
- if "cast" in m and isinstance(m["cast"], list):
74
- m["cast"] = [str(person) for person in m["cast"] if person]
75
-
76
- # TV Show ဖြစ်ရင် Episode တစ်ခုချင်းစီရဲ့ Thumbnail (Poster) ပါဝင်မှု စစ်ဆေးခြင်း
77
- if "videos" in m:
78
- for v in m["videos"]:
79
- # အကယ်၍ Episode မှာ Thumbnail မပါရင် Series Poster ကိုပဲ သုံးဖို့
80
- if not v.get("thumbnail"):
81
- v["thumbnail"] = m.get("poster")
82
-
83
  return {"meta": m}
84
 
85
  @app.get("/{user_key}/stream/{m_type}/{id}.json")
86
  def stream(user_key: str, m_type: str, id: str):
87
  if not is_user_valid(user_key): return {"streams": []}
88
 
89
- # Collection IDs: tmdb_col:123:1:1
90
  if id.startswith("tmdb_col:"):
91
  parts = id.split(":")
92
- col_id, s_num, e_num = parts[1], int(parts[2]), int(parts[3])
93
- col_meta = metas_col.find_one({"id": f"tmdb_col:{col_id}"})
94
  if col_meta and "videos" in col_meta:
95
- target = next((v for v in col_meta["videos"] if v["season"] == s_num and v["episode"] == e_num), None)
96
  if target:
97
  streams = list(streams_col.find({"tmdb_id": str(target["movie_id"])}))
98
- return {"streams": [{"name": "MyanmarSwe 💎", "title": "🚀 High Speed", "url": s["url"]} for s in streams]}
99
 
100
- # ပ���ံမှန် Movie/Series
101
  parts = id.split(":")
102
  query = {"tmdb_id": parts[1]}
103
- if len(parts) == 4:
104
- query["season"], query["episode"] = int(parts[2]), int(parts[3])
105
-
106
  streams = list(streams_col.find(query))
107
- return {"streams": [{"name": "MyanmarSwe 💎", "title": "🚀 High Speed", "url": s["url"]} for s in streams]}
 
3
  from fastapi import FastAPI, Request
4
  from fastapi.middleware.cors import CORSMiddleware
5
  from pymongo import MongoClient, DESCENDING
6
+ from sync import process_sync # sync.py ထဲက function ကို ခေါ်သုံးမယ်
7
 
8
  app = FastAPI()
9
  app.add_middleware(CORSMiddleware, allow_origins=["*"])
 
14
 
15
  def is_user_valid(key):
16
  user = users_col.find_one({"key": key})
17
+ return user and user.get("status") == "active"
18
+
19
+ # --- Google Sheet ကနေ Data လက်ခံမည့် Endpoint ---
20
+ @app.post("/sync-data")
21
+ async def sync_route(req: Request):
22
+ data = await req.json()
23
+ return process_sync(data)
24
 
25
  @app.get("/{user_key}/manifest.json")
26
  def manifest(user_key: str):
27
  valid = is_user_valid(user_key)
28
  return {
29
  "id": "com.myanmarswe.pro",
30
+ "version": "2.7.0",
31
  "name": f"MSwe Cinema {'💎' if valid else '⚠️'}",
32
  "resources": ["catalog", "meta", "stream"],
33
  "types": ["movie", "series"],
 
39
  ]
40
  }
41
 
 
42
  @app.get("/{user_key}/catalog/{m_type}/{cat_id}.json")
43
  @app.get("/{user_key}/catalog/{m_type}/{cat_id}/{extra}.json")
44
  def catalog(user_key: str, m_type: str, cat_id: str, extra: str = None):
45
  if not is_user_valid(user_key): return {"metas": []}
 
46
  query = {}
 
47
  if extra and "search=" in extra:
48
+ query["name"] = {"$regex": extra.replace("search=", ""), "$options": "i"}
49
+
 
50
  if cat_id == "mswe_col":
51
  query["id"] = {"$regex": "^tmdb_col:"}
52
  else:
 
54
  if "id" not in query: query["id"] = {"$regex": "^tmdb:"}
55
 
56
  cursor = metas_col.find(query).sort("updated_at", DESCENDING).limit(100)
57
+ return {"metas": [{"id": m["id"], "type": m.get("type", m_type), "name": m.get("name"), "poster": m.get("poster")} for m in cursor]}
 
 
 
 
 
 
 
 
58
 
59
  @app.get("/{user_key}/meta/{m_type}/{meta_id}.json")
60
  def meta(user_key: str, m_type: str, meta_id: str):
61
  if not is_user_valid(user_key): return {"meta": {}}
62
  m = metas_col.find_one({"id": meta_id})
63
  if not m: return {"meta": {}}
 
64
  m.pop("_id", None)
65
+ if "cast" in m: m["cast"] = [str(p) for p in m["cast"] if p]
 
 
 
 
 
 
 
 
 
 
66
  return {"meta": m}
67
 
68
  @app.get("/{user_key}/stream/{m_type}/{id}.json")
69
  def stream(user_key: str, m_type: str, id: str):
70
  if not is_user_valid(user_key): return {"streams": []}
71
 
72
+ # Collection Stream Link Logic
73
  if id.startswith("tmdb_col:"):
74
  parts = id.split(":")
75
+ col_meta = metas_col.find_one({"id": f"tmdb_col:{parts[1]}"})
 
76
  if col_meta and "videos" in col_meta:
77
+ target = next((v for v in col_meta["videos"] if v["season"] == int(parts[2]) and v["episode"] == int(parts[3])), None)
78
  if target:
79
  streams = list(streams_col.find({"tmdb_id": str(target["movie_id"])}))
80
+ return {"streams": [{"name": "MyanmarSwe 💎", "url": s["url"]} for s in streams]}
81
 
 
82
  parts = id.split(":")
83
  query = {"tmdb_id": parts[1]}
84
+ if len(parts) == 4: query["season"], query["episode"] = int(parts[2]), int(parts[3])
 
 
85
  streams = list(streams_col.find(query))
86
+ return {"streams": [{"name": "MyanmarSwe 💎", "url": s["url"]} for s in streams]}