#!/usr/bin/env python3
"""
Moviesda CLI - Command Line Interface
Use the moviesda database directly from your terminal
"""
import asyncio
import sys
from server import init_database, search_movies, add_movie, scrape_movies_page
def print_banner():
"""Print welcome banner"""
print("=" * 60)
print("π¬ MOVIESDA MOVIE SEARCH CLI")
print("=" * 60)
print()
def print_menu():
"""Print main menu"""
print("\nπ MENU:")
print(" 1. Search for a movie")
print(" 2. Update database from website")
print(" 3. Add movie manually")
print(" 4. View all movies")
print(" 5. Exit")
print()
async def update_database():
"""Update database from moviesda website"""
print("\nπ Scraping movies from moviesda16.com...")
print("Please wait...\n")
movies = await scrape_movies_page()
if not movies:
print("β Failed to scrape movies. Check your internet connection.")
return
print(f"Found {len(movies)} movies on the website")
print("Adding to database...\n")
added_count = 0
duplicate_count = 0
for movie in movies:
try:
if add_movie(movie['title'], movie['year'], movie['url'], movie['category']):
added_count += 1
print(f"β
Added: {movie['title']} ({movie['year']})")
else:
duplicate_count += 1
except Exception as e:
print(f"β οΈ Error adding {movie['title']}: {e}")
print(f"\nπ Summary:")
print(f" β
New movies added: {added_count}")
print(f" βΉοΈ Already in database: {duplicate_count}")
print(f" π Total processed: {len(movies)}")
def search_for_movie():
"""Search for movies"""
query = input("\nπ Enter movie name to search: ").strip()
if not query:
print("β Please enter a search term")
return
limit_input = input("π Max results to show (default 10): ").strip()
try:
limit = int(limit_input) if limit_input else 10
except ValueError:
limit = 10
print(f"\nπ Searching for '{query}'...\n")
results = search_movies(query, limit)
if not results:
print(f"β No movies found matching '{query}'")
print("\nπ‘ Tips:")
print(" - Try searching with partial name")
print(" - Check spelling")
print(" - Update database with option 2")
return
print(f"β
Found {len(results)} movie(s):\n")
print("-" * 60)
for i, movie in enumerate(results, 1):
print(f"\n{i}. π¬ {movie['title']}", end="")
if movie['year']:
print(f" ({movie['year']})", end="")
print(f"\n π Category: {movie['category']}")
print(f" π Link: {movie['url']}")
print("-" * 60)
def add_movie_manually():
"""Add a movie manually"""
print("\nβ Add New Movie")
print("-" * 60)
title = input("Movie Title: ").strip()
if not title:
print("β Title is required")
return
year_input = input("Year (press Enter to skip): ").strip()
year = None
if year_input:
try:
year = int(year_input)
except ValueError:
print("β οΈ Invalid year, skipping...")
url = input("URL path (e.g., /movie-name-2026/): ").strip()
if not url:
print("β URL is required")
return
category = input("Category (default: Tamil): ").strip() or "Tamil"
print("\nπ Adding movie...")
try:
if add_movie(title, year, url, category):
print(f"β
Successfully added '{title}' to database!")
else:
print(f"β οΈ Movie already exists in database")
except Exception as e:
print(f"β Error: {e}")
def view_all_movies():
"""View all movies in database"""
print("\nπ All Movies in Database")
print("-" * 60)
# Search with empty string returns all movies
results = search_movies("", limit=100)
if not results:
print("β No movies in database")
print("\nπ‘ Use option 2 to update database from website")
return
print(f"\nShowing {len(results)} movies:\n")
for i, movie in enumerate(results, 1):
print(f"{i}. {movie['title']}", end="")
if movie['year']:
print(f" ({movie['year']})", end="")
print()
print(f"\nπ Total: {len(results)} movies")
async def main():
"""Main CLI loop"""
# Initialize database
init_database()
print_banner()
print("Database initialized β
\n")
while True:
print_menu()
choice = input("Select option (1-5): ").strip()
if choice == "1":
search_for_movie()
elif choice == "2":
await update_database()
elif choice == "3":
add_movie_manually()
elif choice == "4":
view_all_movies()
elif choice == "5":
print("\nπ Goodbye!")
print("=" * 60)
break
else:
print("\nβ Invalid option. Please choose 1-5")
# Pause before showing menu again
input("\nPress Enter to continue...")
if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
print("\n\nπ Exiting... Goodbye!")
sys.exit(0)