[1] mdblist fix

pull/1813/head
meisnate12 12 months ago
parent 56961ccca1
commit e93860e15d

@ -1 +1 @@
1.20.0 1.20.0-develop1

@ -714,6 +714,27 @@ The available setting attributes which can be set at each level are outlined bel
save_report: false save_report: false
``` ```
??? blank "`report_path` - Used to specify the location of `save_report`.<a class="headerlink" href="#report-path" title="Permanent link"></a>"
<div id="report-path" />Specify the location where `save_report` is saved.
<hr style="margin: 0px;">
**Attribute:** `report_path`
**Levels with this Attribute:** Library
**Accepted Values:** YAML file path location
**Default Value:** `[Directory containing YAML config]/[Library Mapping Name]_report.yml`
???+ example "Example"
```yaml
settings:
report_path: config/TV_missing_report.yml
```
??? blank "`tvdb_language` - Specify the language to query TVDb in.<a class="headerlink" href="#tvdb-language" title="Permanent link"></a>" ??? blank "`tvdb_language` - Specify the language to query TVDb in.<a class="headerlink" href="#tvdb-language" title="Permanent link"></a>"
<div id="tvdb-language" />Specify the language to query TVDb in. <div id="tvdb-language" />Specify the language to query TVDb in.

@ -173,23 +173,23 @@ Number filters can **NOT** take multiple values.
### Attribute ### Attribute
| Number Filters | Description | Movies | Shows | Seasons | Episodes | Artists | Albums | Track | | Number Filters | Description | Movies | Shows | Seasons | Episodes | Artists | Albums | Track |
|:----------------------------------------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:------------------------------------------:|:--------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------:|:------------------------------------------:|:--------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------:|:------------------------------------------:| |:----------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:------------------------------------------:|:--------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------:|:------------------------------------------:|:--------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------:|:------------------------------------------:|
| `year`<sup>**[3](#table-annotations)**</sup> | Uses the year attribute to match<br>minimum: `1` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | | `year`<sup>**[3](#table-annotations)**</sup> | Uses the year attribute to match<br>minimum: `1` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } |
| `tmdb_year`<sup>**[2](#table-annotations)**</sup><sup>**[3](#table-annotations)**</sup> | Uses the year on TMDb to match<br>minimum: `1` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | | `tmdb_year`<sup>**[2](#table-annotations)**</sup><sup>**[3](#table-annotations)**</sup> | Uses the year on TMDb to match<br>minimum: `1` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } |
| `critic_rating` | Uses the critic rating attribute to match<br>`0.0` - `10.0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | | `critic_rating` | Uses the critic rating attribute to match<br>`0.0` - `10.0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } |
| `audience_rating` | Uses the audience rating attribute to match<br> `0.0` - `10.0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | | `audience_rating` | Uses the audience rating attribute to match<br> `0.0` - `10.0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } |
| `user_rating` | Uses the user rating attribute to match<br>`0.0` - `10.0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | | `user_rating` | Uses the user rating attribute to match<br>`0.0` - `10.0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } |
| `tmdb_vote_count`<sup>**[2](#table-annotations)**</sup> | Uses the tmdb vote count to match<br>minimum: `1` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | | `tmdb_vote_count`<sup>**[2](#table-annotations)**</sup> | Uses the tmdb vote count to match<br>minimum: `1` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } |
| `tmdb_vote_average`<sup>**[2](#table-annotations)**</sup> | Uses the tmdb vote average rating to match<br>minimum: `0.0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | | `tmdb_vote_average`<sup>**[2](#table-annotations)**</sup> | Uses the tmdb vote average rating to match<br>minimum: `0.0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } |
| `plays` | Uses the plays attribute to match<br>minimum: `1` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | | `plays` | Uses the plays attribute to match<br>minimum: `1` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } |
| `duration` | Uses the duration attribute to match using minutes<br>minimum: `0.0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-check:{ .green } | | `duration` | Uses the duration attribute to match using minutes<br>minimum: `0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-check:{ .green } |
| `channels` | Uses the audio channels attribute to match<br>minimum: `0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | | `channels` | Uses the audio channels attribute to match<br>minimum: `0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } |
| `height` | Uses the height attribute to match<br>minimum: `0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | | `height` | Uses the height attribute to match<br>minimum: `0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } |
| `width` | Uses the width attribute to match<br>minimum: `0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | | `width` | Uses the width attribute to match<br>minimum: `0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } |
| `aspect` | Uses the aspect attribute to match<br>minimum: `0.0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | | `aspect` | Uses the aspect attribute to match<br>minimum: `0.0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } |
| `versions` | Uses the number of versions found to match<br>minimum: `0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green } | | `versions` | Uses the number of versions found to match<br>minimum: `0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green }<sup>**[1](#table-annotations)**</sup> | :fontawesome-solid-circle-check:{ .green } |
| `stinger_rating`<sup>**[4](#table-annotations)**</sup> | Uses the [media stinger](http://www.mediastinger.com/) rating to match. The media stinger rating is if the after/during credits scene is worth staying for.<br>minimum: `0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | | `stinger_rating`<sup>**[4](#table-annotations)**</sup> | Uses the [media stinger](http://www.mediastinger.com/) rating to match. The media stinger rating is if the after/during credits scene is worth staying for.<br>minimum: `0` | :fontawesome-solid-circle-check:{ .green } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } | :fontawesome-solid-circle-xmark:{ .red } |
## Special Filters ## Special Filters

@ -15,6 +15,10 @@ strong {
color: #00bc8c; color: #00bc8c;
} }
table tr td code {
white-space: nowrap;
}
.md-banner { .md-banner {
background-color: #252525; background-color: #252525;
color: var(--md-footer-fg-color); color: var(--md-footer-fg-color);

@ -114,8 +114,8 @@ class Mdblist:
response = self.config.get_json(api_url, params=params) response = self.config.get_json(api_url, params=params)
except JSONDecodeError: except JSONDecodeError:
raise Failed("Mdblist Error: JSON Decoding Failed") raise Failed("Mdblist Error: JSON Decoding Failed")
if "response" in response and response["response"] is False: if "response" in response and response["response"] is False or response["response"] == "False":
if response["error"] == "API Limit Reached!": if response["error"] in ["API Limit Reached!", "API Rate Limit Reached!"]:
self.limit = True self.limit = True
raise LimitReached(f"MdbList Error: {response['error']}") raise LimitReached(f"MdbList Error: {response['error']}")
raise Failed(f"MdbList Error: {response['error']}") raise Failed(f"MdbList Error: {response['error']}")

@ -906,6 +906,7 @@ class Operations:
all_collections = self.library.get_all_collections() all_collections = self.library.get_all_collections()
for i, col in enumerate(all_collections, 1): for i, col in enumerate(all_collections, 1):
logger.ghost(f"Reading Collection: {i}/{len(all_collections)} {col.title}") logger.ghost(f"Reading Collection: {i}/{len(all_collections)} {col.title}")
col = self.library.reload(col, force=True)
labels = [la.tag for la in self.library.item_labels(col)] labels = [la.tag for la in self.library.item_labels(col)]
if (less is not None or managed is not None or configured is not None) \ if (less is not None or managed is not None or configured is not None) \
and (less is None or col.childCount < less) \ and (less is None or col.childCount < less) \

@ -534,7 +534,7 @@ def is_date_filter(value, modifier, data, final, current_time):
if (modifier == ".before" and value >= filter_date) or (modifier == ".after" and value <= filter_date): if (modifier == ".before" and value >= filter_date) or (modifier == ".after" and value <= filter_date):
return True return True
elif modifier == ".regex": elif modifier == ".regex":
jailbreak = True jailbreak = False
for check_data in data: for check_data in data:
if re.compile(check_data).match(value.strftime("%m/%d/%Y")): if re.compile(check_data).match(value.strftime("%m/%d/%Y")):
jailbreak = True jailbreak = True

@ -556,8 +556,15 @@ def run_libraries(config):
for ad in library.asset_directory: for ad in library.asset_directory:
logger.debug(f"Asset Directory: {ad}") logger.debug(f"Asset Directory: {ad}")
logger.debug(f"Asset Folders: {library.asset_folders}") logger.debug(f"Asset Folders: {library.asset_folders}")
logger.debug(f"Asset Depth: {library.asset_depth}")
logger.debug(f"Create Asset Folders: {library.create_asset_folders}") logger.debug(f"Create Asset Folders: {library.create_asset_folders}")
logger.debug(f"Prioritize Assets: {library.prioritize_assets}")
logger.debug(f"Dimensional Asset Rename: {library.dimensional_asset_rename}")
logger.debug(f"Download URL Assets: {library.download_url_assets}") logger.debug(f"Download URL Assets: {library.download_url_assets}")
logger.debug(f"Show Missing Assets: {library.show_missing_assets}")
logger.debug(f"Show Missing Season Assets: {library.show_missing_season_assets}")
logger.debug(f"Show Missing Episode Assets: {library.show_missing_episode_assets}")
logger.debug(f"Show Assets Not Needed: {library.show_asset_not_needed}")
logger.debug(f"Sync Mode: {library.sync_mode}") logger.debug(f"Sync Mode: {library.sync_mode}")
logger.debug(f"Minimum Items: {library.minimum_items}") logger.debug(f"Minimum Items: {library.minimum_items}")
logger.debug(f"Delete Below Minimum: {library.delete_below_minimum}") logger.debug(f"Delete Below Minimum: {library.delete_below_minimum}")
@ -566,11 +573,15 @@ def run_libraries(config):
logger.debug(f"Missing Only Released: {library.missing_only_released}") logger.debug(f"Missing Only Released: {library.missing_only_released}")
logger.debug(f"Only Filter Missing: {library.only_filter_missing}") logger.debug(f"Only Filter Missing: {library.only_filter_missing}")
logger.debug(f"Show Unmanaged: {library.show_unmanaged}") logger.debug(f"Show Unmanaged: {library.show_unmanaged}")
logger.debug(f"Show Unconfigured: {library.show_unconfigured}")
logger.debug(f"Show Filtered: {library.show_filtered}") logger.debug(f"Show Filtered: {library.show_filtered}")
logger.debug(f"Show Options: {library.show_options}")
logger.debug(f"Show Missing: {library.show_missing}") logger.debug(f"Show Missing: {library.show_missing}")
logger.debug(f"Show Missing Assets: {library.show_missing_assets}")
logger.debug(f"Save Report: {library.save_report}") logger.debug(f"Save Report: {library.save_report}")
logger.debug(f"Report Path: {library.report_path}") logger.debug(f"Report Path: {library.report_path}")
logger.debug(f"Ignore IDs: {library.ignore_ids}")
logger.debug(f"Ignore IMDb IDs: {library.ignore_imdb_ids}")
logger.debug(f"Item Refresh Delay: {library.item_refresh_delay}")
logger.debug(f"Clean Bundles: {library.clean_bundles}") logger.debug(f"Clean Bundles: {library.clean_bundles}")
logger.debug(f"Empty Trash: {library.empty_trash}") logger.debug(f"Empty Trash: {library.empty_trash}")
logger.debug(f"Optimize: {library.optimize}") logger.debug(f"Optimize: {library.optimize}")

@ -1,6 +1,6 @@
arrapi==1.4.7 arrapi==1.4.7
GitPython==3.1.40 GitPython==3.1.40
lxml==5.0.0 lxml==5.1.0
num2words==0.5.13 num2words==0.5.13
pathvalidate==3.2.0 pathvalidate==3.2.0
pillow==10.2.0 pillow==10.2.0

Loading…
Cancel
Save