diff --git a/.gitignore b/.gitignore index eba74f4..96bc3ad 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -venv/ \ No newline at end of file +venv/ +node_modules/ \ No newline at end of file diff --git a/main.py b/main.py index bb0dfec..74ddcc3 100644 --- a/main.py +++ b/main.py @@ -7,10 +7,12 @@ import time app = FastAPI() + # Define a data model for the queue item class VideoLink(BaseModel): url: str + # Queue to store video URLs video_queue = [] current_video = None @@ -18,7 +20,8 @@ current_video = None # VLC player instance vlc_instance = vlc.Instance() player = vlc_instance.media_player_new() -player.fullscreen = True +player.set_fullscreen(True) + # Add video URL to the queue @app.post("/add") @@ -26,11 +29,13 @@ def add_video(video_link: VideoLink): video_queue.append(video_link.url) return {"message": "Video added to the queue"} + # Get current queue @app.get("/queue") def get_queue(): return {"queue": video_queue} + # Control playback: play, pause, stop @app.post("/control/{action}") def control_playback(action: str): @@ -42,6 +47,11 @@ def control_playback(action: str): player.stop() elif action == "mute": player.audio_toggle_mute() + elif action == "fullscreen": + if player.get_fullscreen(): + player.set_fullscreen(False) + else: + player.set_fullscreen(True) else: raise HTTPException(status_code=400, detail="Invalid action") return {"message": f"Player action {action} executed"} @@ -52,6 +62,7 @@ def seek(seconds: int): player.set_time(seconds * 1000) return {"message": f"Seeked to {seconds} seconds"} + # Function to play videos from the queue def play_videos(): global current_video @@ -68,6 +79,7 @@ def play_videos(): time.sleep(1) # Give some time for the player to start time.sleep(1) + # Start the video playing thread video_thread = threading.Thread(target=play_videos, daemon=True) video_thread.start() @@ -75,4 +87,4 @@ video_thread.start() # Run FastAPI if __name__ == "__main__": import uvicorn - uvicorn.run(app, host="0.0.0.0", port=8000) + uvicorn.run(app, host="127.0.0.1", port=1337) diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..4475908 --- /dev/null +++ b/readme.md @@ -0,0 +1,129 @@ +Sure, here is a "leet" README for your project `SpaceInvaderz`: + +# 🌌 SpaceInvaderz API 🌌 + +Welcome to the **SpaceInvaderz** API! Control your video playback like a true interstellar commander using this FastAPI-powered interface. + +## 🚀 Getting Started + +### Prerequisites + +- **Python** installed +- Required Python packages: `yt-dlp`, `python-vlc`, `fastapi`, `uvicorn` + +### Installation + +1. **Clone the repository:** + ```sh + git clone gitea.telavivmakers.space/SpaceInvaderz/spaceinvaderz.git + cd spaceinvaderz + ``` + +2. **Install dependencies:** + ```sh + pip install yt-dlp python-vlc fastapi uvicorn + # or + pip install -r requirements.txt + ``` + +3. **Run the server:** + ```sh + python main.py + ``` + +Your SpaceInvaderz API should now be running on `http://0.0.0.0:1337`. + +## 🌌 API Endpoints + +### 1. Add Video to Queue + +**Description:** Adds a video to the playback queue. + +- **URL:** `/add` +- **Method:** `POST` +- **Body:** + ```json + { + "url": "VIDEO_URL" + } + ``` + +#### PowerShell: +```powershell +$videoUrl = "https://www.youtube.com/watch?v=u-Wi1_O3pKQ" +Invoke-RestMethod -Uri http://localhost:1337/add -Method Post -Body (@{url = $videoUrl} | ConvertTo-Json) -ContentType "application/json" +``` + +#### cURL: +```sh +curl -X POST "http://localhost:1337/add" -H "Content-Type: application/json" -d "{\"url\":\"YOUR_VIDEO_URL\"}" +``` + +### 2. Get Current Queue + +**Description:** Retrieves the current queue of videos. + +- **URL:** `/queue` +- **Method:** `GET` + +#### PowerShell: +```powershell +Invoke-RestMethod -Uri http://localhost:1337/queue -Method Get +``` + +#### cURL: +```sh +curl -X GET "http://localhost:1337/queue" +``` + +### 3. Control Playback + +**Description:** Control video playback with actions like play, pause, stop, and mute. + +- **URL:** `/control/{action}` +- **Method:** `POST` +- **Actions:** `play`, `pause`, `stop`, `mute` + +#### PowerShell: +```powershell +$action = "play" # Or "pause", "stop", "mute" +Invoke-RestMethod -Uri http://localhost:1337/control/$action -Method Post +``` + +#### cURL: +```sh +action="play" # Or "pause", "stop", "mute" +curl -X POST "http://localhost:1337/control/$action" +``` + +### 4. Seek Video + +**Description:** Seek to a specific time in the video. + +- **URL:** `/seek/{seconds}` +- **Method:** `POST` +- **Parameters:** `seconds` (Time in seconds to seek to) + +#### PowerShell: +```powershell +$seconds = 120 # Time in seconds +Invoke-RestMethod -Uri http://localhost:1337/seek/$seconds -Method Post +``` + +#### cURL: +```sh +seconds=120 # Time in seconds +curl -X POST "http://localhost:1337/seek/$seconds" +``` + +## 🌌 Contribute + +Feel free to submit issues, fork the repo and create pull requests. May the code be with you! 🚀 + +--- + +With **SpaceInvaderz**, you're not just watching videos, you're commanding an intergalactic fleet of multimedia! 🌠 + +--- + +Happy coding, space invaders! 👾 \ No newline at end of file