PodFetch
> Adding podfetch auto monitoring.
This commit is contained in:
162
podfetch/README.md
Normal file
162
podfetch/README.md
Normal 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.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 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.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
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
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
BIN
podfetch/img/testing_podcast.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 112 KiB |
40
podfetch/podcast_folder_monitor.py
Executable file
40
podfetch/podcast_folder_monitor.py
Executable 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()
|
Reference in New Issue
Block a user