import gradio as gr import os import shutil import json from pathlib import Path from datetime import datetime # ================================================ # 🔥 PUNGAGO CLOUD DRIVE - ADVANCED PRO EDITION 🔥 # Refined by Nexi for Pabasara SN # ================================================ STORAGE_DIR = "vault_storage" METADATA_FILE = "vault_metadata.json" for d in [STORAGE_DIR]: if not os.path.exists(d): os.makedirs(d) # Initialize or Load Social Data (Likes/Comments) def load_metadata(): if os.path.exists(METADATA_FILE): with open(METADATA_FILE, "r") as f: return json.load(f) return {} def save_metadata(data): with open(METADATA_FILE, "w") as f: json.dump(data, f) def get_current_theme(): """Dynamic Dark Mode for 2026""" return gr.themes.Soft( primary_hue="rose", secondary_hue="violet", neutral_hue="slate", font=["Inter", "sans-serif"] ) def get_file_list(): metadata = load_metadata() files = [] for f in os.listdir(STORAGE_DIR): f_path = os.path.join(STORAGE_DIR, f) stats = os.stat(f_path) size = f"{round(stats.st_size / (1024 * 1024), 2)} MB" # Get likes from metadata or default to 0 likes = metadata.get(f, {}).get("likes", 0) files.append([f, size, f"❤️ {likes}"]) return files def upload_files(files): if not files: return get_file_list(), "❌ Selection empty." for file in files: dest_path = os.path.join(STORAGE_DIR, os.path.basename(file.name)) shutil.copy(file.name, dest_path) return get_file_list(), f"✅ {len(files)} files added to the vault! 🔥" def handle_social_action(filename, action_type, comment_text=None): metadata = load_metadata() if filename not in metadata: metadata[filename] = {"likes": 0, "comments": []} if action_type == "like": metadata[filename]["likes"] += 1 elif action_type == "comment" and comment_text: timestamp = datetime.now().strftime("%H:%M") metadata[filename]["comments"].append(f"[{timestamp}] {comment_text}") save_metadata(metadata) # Format comments for display comment_feed = "\n".join(metadata[filename]["comments"][-10:]) # Show last 10 return f"❤️ {metadata[filename]['likes']}", comment_feed, get_file_list() def preview_file(evt: gr.SelectData): filename = evt.value[0] if isinstance(evt.value, list) else evt.value file_path = os.path.join(STORAGE_DIR, filename) ext = Path(file_path).suffix.lower() metadata = load_metadata() file_data = metadata.get(filename, {"likes": 0, "comments": []}) video, image, comments = None, None, "\n".join(file_data["comments"]) likes = f"❤️ {file_data['likes']}" if ext in ['.mp4', '.webm', '.mov']: video = file_path elif ext in ['.jpg', '.jpeg', '.png', '.gif', '.webp']: image = file_path return video, image, filename, likes, comments # CSS for the "Twitter/YouTube" Vibe custom_css = """ .gradio-container { background: #0f0c29; background: linear-gradient(to bottom, #0f0c29, #302b63, #24243e); color: white; } .upload-area { border: 2px dashed #ff0066 !important; border-radius: 20px !important; } .stat-card { background: rgba(255, 255, 255, 0.1); border-radius: 15px; padding: 15px; border-left: 5px solid #ff0066; } .comment-box { background: rgba(0,0,0,0.3); border-radius: 10px; font-family: monospace; } button.primary { background: linear-gradient(90deg, #ff0066, #c026d3) !important; border: none !important; } """ with gr.Blocks(theme=get_current_theme(), css=custom_css, title="Pungago Pro Vault") as demo: gr.Markdown("# 🍑 PUNGAGO NSFW CLOUD DRIVE `v2.0` ") with gr.Tabs(): with gr.Tab("📱 Social Feed & Player"): with gr.Row(): with gr.Column(scale=2): v_player = gr.Video(label="Now Playing", interactive=False, height=500) i_player = gr.Image(label="HD Preview", interactive=False, height=500, visible=False) with gr.Row(elem_classes="stat-card"): current_file = gr.Textbox(label="Active File", interactive=False) like_count = gr.Label(value="❤️ 0", label="Engagement", show_label=False) like_btn = gr.Button("🔥 Drop a Like", variant="primary") comment_display = gr.Textbox(label="Recent Comments", lines=5, elem_classes="comment-box", interactive=False) with gr.Row(): comment_input = gr.Textbox(show_label=False, placeholder="Add a comment...") post_btn = gr.Button("💬 Post", scale=0) with gr.Column(scale=1): gr.Markdown("### 🗄️ Your Library") vault_table = gr.DataFrame( headers=["Filename", "Size", "Popularity"], value=get_file_list(), interactive=False, label="Click to play" ) refresh_btn = gr.Button("🔄 Sync Vault") with gr.Tab("📤 Rapid Upload"): uploader = gr.File(label="Upload Multi-Media", file_count="multiple", elem_classes="upload-area") status = gr.Markdown("Ready for new content...") up_btn = gr.Button("🚀 Start Permanent Sync", variant="primary") # LOGIC vault_table.select(preview_file, None, [v_player, i_player, current_file, like_count, comment_display]) like_btn.click( handle_social_action, inputs=[current_file, gr.State("like")], outputs=[like_count, comment_display, vault_table] ) post_btn.click( handle_social_action, inputs=[current_file, gr.State("comment"), comment_input], outputs=[like_count, comment_display, vault_table] ).then(lambda: "", None, comment_input) # Clear input after post up_btn.click(upload_files, uploader, [vault_table, status]) refresh_btn.click(get_file_list, None, vault_table) if __name__ == "__main__": demo.launch(server_name="0.0.0.0", server_port=7860)