Merge remote-tracking branch 'meisnate12/nightly' into nightly

pull/1582/head
bullmoose20 1 year ago
commit a4bdea3749

@ -1 +1 @@
1.19.0-develop101 1.19.0-develop103

@ -80,6 +80,7 @@ plex: # Can be individually specified per library as
url: http://192.168.1.12:32400 url: http://192.168.1.12:32400
token: #################### token: ####################
timeout: 60 timeout: 60
db_cache:
clean_bundles: false clean_bundles: false
empty_trash: false empty_trash: false
optimize: false optimize: false

@ -10,16 +10,18 @@ plex:
url: http://192.168.1.12:32400 url: http://192.168.1.12:32400
token: #################### token: ####################
timeout: 60 timeout: 60
db_cache: 4096
clean_bundles: true clean_bundles: true
empty_trash: true empty_trash: true
optimize: false optimize: false
``` ```
| Attribute | Allowed Values | Default | Required | | Attribute | Allowed Values | Default | Required |
|:----------------|:-------------------------------------------------------------------------------------------------------------------------------|:--------|:--------:| |:----------------|:-----------------------------------------------------------------------|:--------|:--------:|
| `url` | Plex Server URL<br><strong>Example:</strong> http://192.168.1.12:32400 | N/A | &#9989; | | `url` | Plex Server URL<br><strong>Example:</strong> http://192.168.1.12:32400 | N/A | &#9989; |
| `token` | Plex Server Authentication Token | N/A | &#9989; | | `token` | Plex Server Authentication Token | N/A | &#9989; |
| `timeout` | Plex Server Timeout | 60 | &#10060; | | `timeout` | Plex Server Timeout | 60 | &#10060; |
| `db_cache` | Plex Server Database Cache Size | None | &#10060; |
| `clean_bundles` | Runs Clean Bundles on the Server after all Metadata Files are run | false | &#10060; | | `clean_bundles` | Runs Clean Bundles on the Server after all Metadata Files are run | false | &#10060; |
| `empty_trash` | Runs Empty Trash on the Server after all Metadata Files are run | false | &#10060; | | `empty_trash` | Runs Empty Trash on the Server after all Metadata Files are run | false | &#10060; |
| `optimize` | Runs Optimize on the Server after all Metadata Files are run | false | &#10060; | | `optimize` | Runs Optimize on the Server after all Metadata Files are run | false | &#10060; |
@ -47,11 +49,13 @@ libraries:
url: http://plex.boing.bong url: http://plex.boing.bong
token: SOME_TOKEN token: SOME_TOKEN
timeout: 360 timeout: 360
db_cache: 8192
... ...
plex: plex:
url: http://plex.bing.bang url: http://plex.bing.bang
token: SOME_TOKEN token: SOME_TOKEN
timeout: 60 timeout: 60
db_cache: 4096
clean_bundles: false clean_bundles: false
empty_trash: false empty_trash: false
optimize: false optimize: false

@ -159,6 +159,7 @@ data:
url: http://PLEX_IP_HERE:32400 url: http://PLEX_IP_HERE:32400
token: YOUR_TOKEN_HERE token: YOUR_TOKEN_HERE
timeout: 60 timeout: 60
db_cache:
clean_bundles: false clean_bundles: false
empty_trash: false empty_trash: false
optimize: false optimize: false

@ -8,6 +8,7 @@ plex: # Can be individually specified
url: http://bing.bang.boing <<< ENTER YOUR PLEX URL HERE url: http://bing.bang.boing <<< ENTER YOUR PLEX URL HERE
token: XXXXXXXXXXXXXXXXXXXX <<< ENTER YOUR PLEX TOKEN HERE token: XXXXXXXXXXXXXXXXXXXX <<< ENTER YOUR PLEX TOKEN HERE
timeout: 60 timeout: 60
db_cache:
clean_bundles: false clean_bundles: false
empty_trash: false empty_trash: false
optimize: false optimize: false

@ -11,10 +11,10 @@ These schedules do not trigger PMM to run; they control what PMM will do if it h
The scheduling options are: The scheduling options are:
| Name | Description | Format | Example | | Name | Description | Format | Example |
|:-------------|:-------------------------------------------------------------------------------------------------|:----------------------|:----------------------------------| |:-------------|:-----------------------------------------------------------------------------------------------------------|:---------------------------------------------------|:-------------------------------------------------------------|
| Hourly | Update only when the script is run in that hour | hourly(Hour of Day) | `hourly(17)` | | Hourly | Update only when the script is run in that hour or hour range | hourly(Hour of Day)<br>hourly(Start Hour-End Hour) | `hourly(17)`<br>`hourly(17-04)` |
| Daily | Update once a day | daily | `daily` | | Daily | Update once a day | daily | `daily` |
| Weekly | Update once a week on the specified day | weekly(Day of Week) | `weekly(sunday)` | | Weekly | Update once a week on the specified days (For multiple days use a bar-separated (<code>&#124;</code>) list | weekly(Days of Week) | `weekly(sunday)`<br><code>weekly(sunday&#124;tuesday)</code> |
| Monthly | Update once a month on the specified day | monthly(Day of Month) | `monthly(1)` | | Monthly | Update once a month on the specified day | monthly(Day of Month) | `monthly(1)` |
| Yearly | Update once a year on the specified day | yearly(MM/DD) | `yearly(01/30)` | | Yearly | Update once a year on the specified day | yearly(MM/DD) | `yearly(01/30)` |
| Range | Updates whenever the date is within the range | range(MM/DD-MM/DD) | `range(12/01-12/31)` | | Range | Updates whenever the date is within the range | range(MM/DD-MM/DD) | `range(12/01-12/31)` |

@ -662,6 +662,7 @@ class ConfigFile:
"url": check_for_attribute(self.data, "url", parent="plex", var_type="url", default_is_none=True), "url": check_for_attribute(self.data, "url", parent="plex", var_type="url", default_is_none=True),
"token": check_for_attribute(self.data, "token", parent="plex", default_is_none=True), "token": check_for_attribute(self.data, "token", parent="plex", default_is_none=True),
"timeout": check_for_attribute(self.data, "timeout", parent="plex", var_type="int", default=60), "timeout": check_for_attribute(self.data, "timeout", parent="plex", var_type="int", default=60),
"db_cache": check_for_attribute(self.data, "db_cache", parent="plex", var_type="int", default_is_none=True),
"clean_bundles": check_for_attribute(self.data, "clean_bundles", parent="plex", var_type="bool", default=False), "clean_bundles": check_for_attribute(self.data, "clean_bundles", parent="plex", var_type="bool", default=False),
"empty_trash": check_for_attribute(self.data, "empty_trash", parent="plex", var_type="bool", default=False), "empty_trash": check_for_attribute(self.data, "empty_trash", parent="plex", var_type="bool", default=False),
"optimize": check_for_attribute(self.data, "optimize", parent="plex", var_type="bool", default=False) "optimize": check_for_attribute(self.data, "optimize", parent="plex", var_type="bool", default=False)
@ -944,6 +945,7 @@ class ConfigFile:
"url": check_for_attribute(lib, "url", parent="plex", var_type="url", default=self.general["plex"]["url"], req_default=True, save=False), "url": check_for_attribute(lib, "url", parent="plex", var_type="url", default=self.general["plex"]["url"], req_default=True, save=False),
"token": check_for_attribute(lib, "token", parent="plex", default=self.general["plex"]["token"], req_default=True, save=False), "token": check_for_attribute(lib, "token", parent="plex", default=self.general["plex"]["token"], req_default=True, save=False),
"timeout": check_for_attribute(lib, "timeout", parent="plex", var_type="int", default=self.general["plex"]["timeout"], save=False), "timeout": check_for_attribute(lib, "timeout", parent="plex", var_type="int", default=self.general["plex"]["timeout"], save=False),
"db_cache": check_for_attribute(lib, "db_cache", parent="plex", var_type="int", default=self.general["plex"]["db_cache"], default_is_none=True, save=False),
"clean_bundles": check_for_attribute(lib, "clean_bundles", parent="plex", var_type="bool", default=self.general["plex"]["clean_bundles"], save=False), "clean_bundles": check_for_attribute(lib, "clean_bundles", parent="plex", var_type="bool", default=self.general["plex"]["clean_bundles"], save=False),
"empty_trash": check_for_attribute(lib, "empty_trash", parent="plex", var_type="bool", default=self.general["plex"]["empty_trash"], save=False), "empty_trash": check_for_attribute(lib, "empty_trash", parent="plex", var_type="bool", default=self.general["plex"]["empty_trash"], save=False),
"optimize": check_for_attribute(lib, "optimize", parent="plex", var_type="bool", default=self.general["plex"]["optimize"], save=False) "optimize": check_for_attribute(lib, "optimize", parent="plex", var_type="bool", default=self.general["plex"]["optimize"], save=False)

@ -432,9 +432,9 @@ class Plex(Library):
def __init__(self, config, params): def __init__(self, config, params):
super().__init__(config, params) super().__init__(config, params)
self.plex = params["plex"] self.plex = params["plex"]
self.url = params["plex"]["url"] self.url = self.plex["url"]
self.token = params["plex"]["token"] self.token = self.plex["token"]
self.timeout = params["plex"]["timeout"] self.timeout = self.plex["timeout"]
logger.secret(self.url) logger.secret(self.url)
logger.secret(self.token) logger.secret(self.token)
try: try:
@ -445,6 +445,15 @@ class Plex(Library):
logger.info(f"Running on {self.PlexServer.platform} version {self.PlexServer.platformVersion}") logger.info(f"Running on {self.PlexServer.platform} version {self.PlexServer.platformVersion}")
pp_str = f"PlexPass: {self.PlexServer.myPlexSubscription}" pp_str = f"PlexPass: {self.PlexServer.myPlexSubscription}"
srv_settings = self.PlexServer.settings srv_settings = self.PlexServer.settings
try:
db_cache = srv_settings.get("DatabaseCacheSize")
logger.info(f"Plex DB cache setting: {db_cache.value} MB")
if self.plex["db_cache"] and self.plex["db_cache"] != db_cache.value:
db_cache.set(self.plex["db_cache"])
self.PlexServer.settings.save()
logger.info(f"Plex DB Cache updated to {self.plex['db_cache']} MB")
except NotFound:
logger.info(f"Plex DB cache setting: Unknown")
uc_str = f"Unknown update channel." uc_str = f"Unknown update channel."
if srv_settings.get("butlerUpdateChannel").value == '16': if srv_settings.get("butlerUpdateChannel").value == '16':
uc_str = f"Public update channel." uc_str = f"Public update channel."

@ -603,6 +603,22 @@ def schedule_check(attribute, data, current_time, run_hour, is_all=False):
continue continue
param = match.group(1) param = match.group(1)
if run_time.startswith("hour"): if run_time.startswith("hour"):
if "-" in run_time:
start, end = run_time.split("-")
try:
start = int(start)
end = int(end)
if start != end and 0 <= start <= 23 and 0 <= end <= 23:
schedule_str += f"\nScheduled to run between the {num2words(start, to='ordinal_num')} hour and the {num2words(end, to='ordinal_num')} hour"
if end > start and start <= run_hour <= end:
all_check += 1
elif start > end and (start <= run_hour or run_hour <= end):
all_check += 1
else:
raise ValueError
except ValueError:
logger.error(f"Schedule Error: hourly {start}-{end} each must be a different integer between 0 and 23")
else:
try: try:
if 0 <= int(param) <= 23: if 0 <= int(param) <= 23:
schedule_str += f"\nScheduled to run on the {num2words(param, to='ordinal_num')} hour" schedule_str += f"\nScheduled to run on the {num2words(param, to='ordinal_num')} hour"
@ -613,12 +629,21 @@ def schedule_check(attribute, data, current_time, run_hour, is_all=False):
except ValueError: except ValueError:
logger.error(f"Schedule Error: hourly {display} must be an integer between 0 and 23") logger.error(f"Schedule Error: hourly {display} must be an integer between 0 and 23")
elif run_time.startswith("week"): elif run_time.startswith("week"):
if param.lower() not in days_alias: ok_days = param.lower().split("|")
logger.error(f"Schedule Error: weekly {display} must be a day of the week i.e. weekly(Monday)") err = None
for ok_day in ok_days:
if ok_day not in days_alias:
err = f"Schedule Error: weekly {display} must be a day of the week i.e. weekly(Monday)"
if err:
logger.error(err)
continue continue
weekday = days_alias[param.lower()] pass_day = False
for ok_day in ok_days:
weekday = days_alias[ok_day]
schedule_str += f"\nScheduled weekly on {pretty_days[weekday]}" schedule_str += f"\nScheduled weekly on {pretty_days[weekday]}"
if weekday == current_time.weekday(): if weekday == current_time.weekday():
pass_day = True
if pass_day:
all_check += 1 all_check += 1
elif run_time.startswith("month"): elif run_time.startswith("month"):
try: try:

Loading…
Cancel
Save