diff --git a/podfetch/README.md b/podfetch/README.md new file mode 100644 index 0000000..66d8b53 --- /dev/null +++ b/podfetch/README.md @@ -0,0 +1,162 @@ +# PodFetch Folder Monitor + +--- + +This will monitor a folder and when a new file is created. It will change the .mp3 name to the name of the parent folder. + +This script uses Python and a library in Python called **watchdog** + +## 01. PIP + +You will need pip installed on your linux mint system. **PIP** is the package manager for Python. + +* See if PIP is already installed. Open a terminal and type: + `pip -V` + +* If not, install it. + `python get-pip.py` + +* Once installed, install watchdog + `pip install watchdog` + +> **Note:** You may need to use `pip3` + +## 02. Folder Structure + +Create a new folder called **scripts** in your home folder. This is where all your scripts will go. You can do this is two ways. + +1. In your file manager go to `~/scripts` then right click on an open space and select `Open in terminal` +2. In your terminal type: `cd ~/scripts` + +When done it should look like this: `/home/[username]/scripts` + +## 03. podcast_folder_monitor + +```python +#!/usr/bin/python3 + +import os +import time +import shutil + +from watchdog.observers import Observer +from watchdog.events import FileSystemEventHandler + +# Replace this with the folder path you want to monitor +folder_to_monitor = "/some/folder/to/monitor" + +class MyHandler(FileSystemEventHandler): + def on_created(self, event): + if event.is_directory: + folder_path = event.src_path + self.rename_mp3_files(folder_path) + + def rename_mp3_files(self, folder_path): + folder_name = os.path.basename(folder_path) + for filename in os.listdir(folder_path): + if filename.lower().endswith(".mp3"): + mp3_path = os.path.join(folder_path, filename) + new_mp3_path = os.path.join(folder_path, folder_name + ".mp3") + os.rename(mp3_path, new_mp3_path) + print(f"Renamed {filename} to {folder_name}.mp3") + +if __name__ == "__main__": + event_handler = MyHandler() + observer = Observer() + observer.schedule(event_handler, folder_to_monitor, recursive=True) + observer.start() + + try: + while True: + time.sleep(1) + except KeyboardInterrupt: + observer.stop() + + observer.join() +``` + +Make sure to replace `/some/folder/to/monitor` with the actual path of the folder you want to monitor. + +> **Note:** leave the quotation marks + +Save this script as `podcast_folder_monitor.py` in the scripts folder. Next we need to change the permissions of this file so that the system can read it. + +* Right click on `podcast_folder_monitor.py` then `Properties`. +* Click on `Permissions` tab at top. +* Make sure Owner & Group reflect your `username` with `Read and Write` access to all. +* Check the `Execute` box to allow executing the file as a program. +* Close out the window. + +## 04. Run + +Now we need to test and run the script. + +Make sure you terminal is open to the location of the `podcast_folder_monitor.py` file. Should be `~/scripts` + +Normally to run a Python script will would use +`python3 podcast_folder_monitor.py` + +> **Note:** Will still work. + +But because we have [shebang](https://linuxhandbook.com/shebang/) set in the script we can just use +`./podcast_folder_monitor.py` + +You should now see the blinking curser in the terminal indicating that the script is running and monitoring the folder for a new file. + +![testing](img/running_podcast.png) + +## 05. Testing + +To test the script copy and paste one of your podcast folder that includes the podcast.mp3 file back into the folder. The script should notice the change and rename the **.mp3** to the name of the parent folder. + +![testing](img/testing_podcast.png) + +If everything worked out okay we can move to the next step. + +## 06. Automation + +We can make the script auto run in the background. Just like Sonarr, Radarr, etc... + +To get started we need to crate a new file in the systemd location. + +* Go to `/etc/systemd/system` +* Right click in a empty space and select `Open as Root`. Root access is needed to create or edit in this directory. +* Create a new file called `podfetch.service` +* Use this code inside the `podfetch.service` file. + +```ini +[Unit] +Description=Podcast Folder Monitor Service +Wants=network-online.target +After=network-online.target + +# Change [username] with your own. +[Service] +ExecStart=/usr/bin/python3 /home/[username]/scripts/podcast_folder_monitor.py +WorkingDirectory=/home/[username]/scripts +Restart=always +User=[username] + +[Install] +WantedBy=multi-user.target +``` + +> **Note:** Make sure you change `[username]` with your own.. + +Now we need to enable the service file. + +```bash +# Reload the systemctl daemon +sudo systemctl daemon-reload + +# Enable the podfetch service +sudo systemctl enable podfetch.service + +# Starting the podfetch service +sudo systemctl start podfetch + +# Checking status +sudo systemctl status podfetch +``` + +### Congratulation your service is auto-running and listing for new podcast folders. \ No newline at end of file diff --git a/podfetch/img/running_podcast.png b/podfetch/img/running_podcast.png new file mode 100755 index 0000000..5d7bef0 Binary files /dev/null and b/podfetch/img/running_podcast.png differ diff --git a/podfetch/img/testing_podcast.png b/podfetch/img/testing_podcast.png new file mode 100755 index 0000000..dc42618 Binary files /dev/null and b/podfetch/img/testing_podcast.png differ diff --git a/podfetch/podcast_folder_monitor.py b/podfetch/podcast_folder_monitor.py new file mode 100755 index 0000000..5633763 --- /dev/null +++ b/podfetch/podcast_folder_monitor.py @@ -0,0 +1,40 @@ +#!/usr/bin/python3 + +import os +import time +import shutil + +from watchdog.observers import Observer +from watchdog.events import FileSystemEventHandler + +# Replace this with the folder path you want to monitor +folder_to_monitor = "/some/folder/to/monitor" + +class MyHandler(FileSystemEventHandler): + def on_created(self, event): + if event.is_directory: + folder_path = event.src_path + self.rename_mp3_files(folder_path) + + def rename_mp3_files(self, folder_path): + folder_name = os.path.basename(folder_path) + for filename in os.listdir(folder_path): + if filename.lower().endswith(".mp3"): + mp3_path = os.path.join(folder_path, filename) + new_mp3_path = os.path.join(folder_path, folder_name + ".mp3") + os.rename(mp3_path, new_mp3_path) + print(f"Renamed {filename} to {folder_name}.mp3") + +if __name__ == "__main__": + event_handler = MyHandler() + observer = Observer() + observer.schedule(event_handler, folder_to_monitor, recursive=True) + observer.start() + + try: + while True: + time.sleep(1) + except KeyboardInterrupt: + observer.stop() + + observer.join()