MyanmarSwe commited on
Commit
89b31eb
·
verified ·
1 Parent(s): 8695695

Update sync.py

Browse files
Files changed (1) hide show
  1. sync.py +20 -25
sync.py CHANGED
@@ -14,7 +14,7 @@ def get_tmdb_meta(tmdb_id, m_type):
14
  try:
15
  res = requests.get(url).json()
16
 
17
- # Logo
18
  logo = None
19
  logos = res.get("images", {}).get("logos", [])
20
  if logos:
@@ -22,21 +22,21 @@ def get_tmdb_meta(tmdb_id, m_type):
22
  target_logo = en_logos[0] if en_logos else logos[0]
23
  logo = f"https://image.tmdb.org/t/p/w500{target_logo['file_path']}"
24
 
25
- # Cast & Director (Array of Strings)
26
  credits = res.get("credits", {})
27
- cast = [str(c["name"]) for c in credits.get("cast", [])[:10]] # Top 10 cast
28
 
29
- directors = []
30
  if m_type == "movie":
31
- directors = [str(c["name"]) for c in credits.get("crew", []) if c.get("job") == "Director"]
32
  else:
33
- directors = [str(c["name"]) for c in res.get("created_by", [])]
34
- if not directors:
35
- directors = [str(c["name"]) for c in credits.get("crew", []) if c.get("job") in ["Executive Producer", "Director"]][:2]
36
 
37
  # Year (releaseInfo)
38
- raw_date = res.get("release_date") or res.get("first_air_date") or ""
39
- year = str(raw_date)[:4] if raw_date else ""
40
 
41
  meta = {
42
  "id": f"tmdb:{tmdb_id}",
@@ -45,11 +45,11 @@ def get_tmdb_meta(tmdb_id, m_type):
45
  "poster": f"https://image.tmdb.org/t/p/w500{res.get('poster_path')}",
46
  "background": f"https://image.tmdb.org/t/p/original{res.get('backdrop_path')}",
47
  "logo": logo,
48
- "description": res.get("overview"),
49
- "cast": cast,
50
- "director": directors,
51
  "genres": [g["name"] for g in res.get("genres", [])],
52
- "releaseInfo": year, # Stremio အတွက် Year field
53
  "imdbRating": str(round(res.get("vote_average", 0), 1)) if res.get("vote_average") else None,
54
  "updated_at": datetime.utcnow()
55
  }
@@ -64,16 +64,13 @@ def get_tmdb_meta(tmdb_id, m_type):
64
  for ep in s_res.get("episodes", []):
65
  videos.append({
66
  "id": f"tmdb:{tmdb_id}:{s_num}:{ep['episode_number']}",
67
- "title": ep.get("name") or f"S{s_num} E{ep['episode_number']}",
68
  "season": s_num, "episode": ep['episode_number'],
69
- "thumbnail": f"https://image.tmdb.org/t/p/w500{ep['still_path']}" if ep.get('still_path') else meta["poster"],
70
- "overview": ep.get("overview", "")
71
  })
72
  meta["videos"] = videos
73
  return meta
74
- except Exception as e:
75
- print(f"Error fetching TMDB {tmdb_id}: {e}")
76
- return None
77
 
78
  def process_sync(data):
79
  if "users" in data:
@@ -84,20 +81,18 @@ def process_sync(data):
84
  t_id, m_type = str(item['tmdb_id']), item['type']
85
  meta_id = f"tmdb:{t_id}"
86
 
87
- # Meta ကို အမြဲ Update လုပ်ရန် (Cast/Director အသစ်ဝင်စေရန်)
88
  new_meta = get_tmdb_meta(t_id, m_type)
89
  if new_meta:
90
- # Custom Overview ရှိမရှိ စစ်ဆေးခြင်း
91
- if item.get('custom_overview'):
92
  new_meta['description'] = str(item['custom_overview'])
93
 
94
  metas_col.update_one({"id": meta_id}, {"$set": new_meta}, upsert=True)
95
 
96
- # Stream update
97
  s_query = {"tmdb_id": t_id}
98
  if m_type == "series":
99
  s_query.update({"season": int(item.get('season', 1)), "episode": int(item.get('episode', 1))})
100
-
101
  streams_col.update_one(s_query, {"$set": {**s_query, "url": item['stream_url'], "updated_at": datetime.utcnow()}}, upsert=True)
102
 
103
  return {"status": "success"}
 
14
  try:
15
  res = requests.get(url).json()
16
 
17
+ # Logo Logic
18
  logo = None
19
  logos = res.get("images", {}).get("logos", [])
20
  if logos:
 
22
  target_logo = en_logos[0] if en_logos else logos[0]
23
  logo = f"https://image.tmdb.org/t/p/w500{target_logo['file_path']}"
24
 
25
+ # Cast & Director (Strictly String Arrays)
26
  credits = res.get("credits", {})
27
+ cast_list = [str(c["name"]) for c in credits.get("cast", [])[:15]]
28
 
29
+ dir_list = []
30
  if m_type == "movie":
31
+ dir_list = [str(c["name"]) for c in credits.get("crew", []) if c.get("job") == "Director"]
32
  else:
33
+ dir_list = [str(c["name"]) for c in res.get("created_by", [])]
34
+ if not dir_list:
35
+ dir_list = [str(c["name"]) for c in credits.get("crew", []) if c.get("job") in ["Director", "Executive Producer"]][:2]
36
 
37
  # Year (releaseInfo)
38
+ date_str = res.get("release_date") or res.get("first_air_date") or ""
39
+ year = date_str[:4] if date_str else "N/A"
40
 
41
  meta = {
42
  "id": f"tmdb:{tmdb_id}",
 
45
  "poster": f"https://image.tmdb.org/t/p/w500{res.get('poster_path')}",
46
  "background": f"https://image.tmdb.org/t/p/original{res.get('backdrop_path')}",
47
  "logo": logo,
48
+ "description": res.get("overview", ""),
49
+ "cast": cast_list,
50
+ "director": dir_list,
51
  "genres": [g["name"] for g in res.get("genres", [])],
52
+ "releaseInfo": year,
53
  "imdbRating": str(round(res.get("vote_average", 0), 1)) if res.get("vote_average") else None,
54
  "updated_at": datetime.utcnow()
55
  }
 
64
  for ep in s_res.get("episodes", []):
65
  videos.append({
66
  "id": f"tmdb:{tmdb_id}:{s_num}:{ep['episode_number']}",
67
+ "title": ep.get("name") or f"Episode {ep['episode_number']}",
68
  "season": s_num, "episode": ep['episode_number'],
69
+ "thumbnail": f"https://image.tmdb.org/t/p/w500{ep['still_path']}" if ep.get('still_path') else meta["poster"]
 
70
  })
71
  meta["videos"] = videos
72
  return meta
73
+ except: return None
 
 
74
 
75
  def process_sync(data):
76
  if "users" in data:
 
81
  t_id, m_type = str(item['tmdb_id']), item['type']
82
  meta_id = f"tmdb:{t_id}"
83
 
 
84
  new_meta = get_tmdb_meta(t_id, m_type)
85
  if new_meta:
86
+ # Custom Overview Logic
87
+ if item.get('custom_overview') and str(item['custom_overview']).strip():
88
  new_meta['description'] = str(item['custom_overview'])
89
 
90
  metas_col.update_one({"id": meta_id}, {"$set": new_meta}, upsert=True)
91
 
92
+ # Stream sync
93
  s_query = {"tmdb_id": t_id}
94
  if m_type == "series":
95
  s_query.update({"season": int(item.get('season', 1)), "episode": int(item.get('episode', 1))})
 
96
  streams_col.update_one(s_query, {"$set": {**s_query, "url": item['stream_url'], "updated_at": datetime.utcnow()}}, upsert=True)
97
 
98
  return {"status": "success"}