> Adding podfetch auto monitoring.
This commit is contained in:
2023-07-30 15:32:48 -07:00
parent 1e34adac2d
commit cf39776bff
4 changed files with 202 additions and 0 deletions

162
podfetch/README.md Normal file
View File

@ -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 **<a href="https://pypi.org/project/watchdog/" target="_blank">watchdog</a>**
## 01. PIP
You will need pip installed on your linux mint system. **<a href="https://pypi.org/project/pip/" target="_blank">PIP</a>** 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.

BIN
podfetch/img/running_podcast.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
podfetch/img/testing_podcast.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

View File

@ -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()