adds support for custom noHL tag #210

This commit is contained in:
bobokun 2023-04-01 11:25:01 -04:00
parent 61c42e7f5b
commit d1c26fffa6
No known key found for this signature in database
GPG key ID: B73932169607D927
4 changed files with 37 additions and 24 deletions

View file

@ -25,6 +25,7 @@ qbt:
settings:
force_auto_tmm: False # Will force qBittorrent to enable Automatic Torrent Management for each torrent.
tracker_error_tag: issue # Will set the tag of any torrents that do not have a working tracker.
nohardlinks_tag: noHL # Will set the tag of any torrents with no hardlinks.
ignoreTags_OnUpdate: # When running tag-update function, it will update torrent tags for a given torrent even if the torrent has at least one or more of the tags defined here. Otherwise torrents will not be tagged if tags exist.
- noHL
- issue

View file

@ -146,8 +146,13 @@ class Config:
"tracker_error_tag": self.util.check_for_attribute(
self.data, "tracker_error_tag", parent="settings", default="issue"
),
"nohardlinks_tag": self.util.check_for_attribute(self.data, "nohardlinks_tag", parent="settings", default="noHL"),
}
default_ignore_tags = ["noHL", self.settings["tracker_error_tag"], "cross-seed"]
self.tracker_error_tag = self.settings["tracker_error_tag"]
self.nohardlinks_tag = self.settings["nohardlinks_tag"]
default_ignore_tags = [self.nohardlinks_tag, self.tracker_error_tag, "cross-seed"]
self.settings["ignoreTags_OnUpdate"] = self.util.check_for_attribute(
self.data, "ignoreTags_OnUpdate", parent="settings", default=default_ignore_tags, var_type="list"
)

View file

@ -402,6 +402,8 @@ class Qbt:
def _has_reached_min_seeding_time_limit():
print_log = []
if torrent.seeding_time >= min_seeding_time * 60:
if "MinSeedTimeNotReached" in torrent.tags:
torrent.remove_tags(tags="MinSeedTimeNotReached")
return True
else:
print_log += logger.print_line(logger.insert_space(f"Torrent Name: {torrent.name}", 3), self.config.loglevel)
@ -468,12 +470,12 @@ class Qbt:
num_untag = 0 # counter for number of torrents that previously had no hardlinks but now have hardlinks
def add_tag_no_hl(add_tag=True):
"""Add tag noHL to torrents with no hardlinks"""
"""Add tag nohardlinks_tag to torrents with no hardlinks"""
nonlocal num_tags, torrent, tracker, nohardlinks, category, max_ratio, max_seeding_time
body = []
body.append(logger.insert_space(f"Torrent Name: {torrent.name}", 3))
if add_tag:
body.append(logger.insert_space("Added Tag: noHL", 6))
body.append(logger.insert_space(f"Added Tag: {self.config.nohardlinks_tag}", 6))
title = "Tagging Torrents with No Hardlinks"
else:
title = "Changing Share Ratio of Torrents with No Hardlinks"
@ -483,13 +485,13 @@ class Qbt:
max_ratio,
max_seeding_time,
nohardlinks[category]["limit_upload_speed"],
tags="noHL",
tags=self.config.nohardlinks_tag,
do_print=False,
)
if body_tags_and_limits or add_tag:
num_tags += 1
# Resume torrent if it was paused now that the share limit has changed
if torrent.state == "pausedUP" and nohardlinks[category]["resume_torrent_after_untagging_noHL"]:
if torrent.state_enum.is_complete and nohardlinks[category]["resume_torrent_after_untagging_noHL"]:
if not self.config.dry_run:
torrent.resume()
body.extend(body_tags_and_limits)
@ -501,7 +503,7 @@ class Qbt:
"body": "\n".join(body),
"torrent_name": torrent.name,
"torrent_category": torrent.category,
"torrent_tag": "noHL",
"torrent_tag": self.config.nohardlinks_tag,
"torrent_tracker": tracker["url"],
"notifiarr_indexer": tracker["notifiarr"],
"torrent_max_ratio": max_ratio,
@ -535,7 +537,7 @@ class Qbt:
continue
else:
# Checks for any hardlinks and not already tagged
# Cleans up previously tagged noHL torrents that no longer have hardlinks
# Cleans up previously tagged nohardlinks_tag torrents that no longer have hardlinks
if has_nohardlinks:
tracker = self.config.get_tags(torrent.trackers)
# Determine min_seeding_time.
@ -575,8 +577,8 @@ class Qbt:
elif nohardlinks[category]["max_seeding_time"]:
max_seeding_time = nohardlinks[category]["max_seeding_time"]
# Will only tag new torrents that don't have noHL tag
if "noHL" not in torrent.tags:
# Will only tag new torrents that don't have nohardlinks_tag tag
if self.config.nohardlinks_tag not in torrent.tags:
add_tag_no_hl(add_tag=True)
# Deletes torrent with data if cleanup is set to true and meets the ratio/seeding requirements
@ -599,16 +601,20 @@ class Qbt:
else:
# Updates torrent to see if "MinSeedTimeNotReached" tag has been added
torrent = self.get_torrents({"torrent_hashes": [torrent.hash]}).data[0]
# Checks to see if previously noHL share limits have changed.
# Checks to see if previously nohardlinks_tag share limits have changed.
add_tag_no_hl(add_tag=False)
# Checks to see if previous noHL tagged torrents now have hardlinks.
if not (has_nohardlinks) and ("noHL" in torrent.tags):
# Checks to see if previous nohardlinks_tag tagged torrents now have hardlinks.
if not (has_nohardlinks) and (self.config.nohardlinks_tag in torrent.tags):
num_untag += 1
body = []
body += logger.print_line(
f"Previous Tagged noHL Torrent Name: {torrent.name} has hardlinks found now.", self.config.loglevel
f"Previous Tagged {self.config.nohardlinks_tag} "
f"Torrent Name: {torrent.name} has hardlinks found now.",
self.config.loglevel,
)
body += logger.print_line(
logger.insert_space(f"Removed Tag: {self.config.nohardlinks_tag}", 6), self.config.loglevel
)
body += logger.print_line(logger.insert_space("Removed Tag: noHL", 6), self.config.loglevel)
body += logger.print_line(logger.insert_space(f'Tracker: {tracker["url"]}', 8), self.config.loglevel)
body += logger.print_line(
f"{'Not Reverting' if self.config.dry_run else 'Reverting'} to tracker or Global share limits.",
@ -624,13 +630,13 @@ class Qbt:
if restore_limit_upload_speed is None:
restore_limit_upload_speed = -1
if not self.config.dry_run:
torrent.remove_tags(tags="noHL")
torrent.remove_tags(tags=self.config.nohardlinks_tag)
body.extend(
self.set_tags_and_limits(
torrent, restore_max_ratio, restore_max_seeding_time, restore_limit_upload_speed, restore=True
)
)
if torrent.state == "pausedUP" and nohardlinks[category]["resume_torrent_after_untagging_noHL"]:
if torrent.state_enum.is_complete and nohardlinks[category]["resume_torrent_after_untagging_noHL"]:
torrent.resume()
attr = {
"function": "untag_nohardlinks",
@ -638,7 +644,7 @@ class Qbt:
"body": "\n".join(body),
"torrent_name": torrent.name,
"torrent_category": torrent.category,
"torrent_tag": "noHL",
"torrent_tag": self.config.nohardlinks_tag,
"torrent_tracker": tracker["url"],
"notifiarr_indexer": tracker["notifiarr"],
"torrent_max_ratio": restore_max_ratio,
@ -652,7 +658,7 @@ class Qbt:
for torrent in torrent_list:
t_name = torrent.name
t_hash = torrent.hash
if t_hash in tdel_dict and "noHL" in torrent.tags:
if t_hash in tdel_dict and self.config.nohardlinks_tag in torrent.tags:
t_count = self.torrentinfo[t_name]["count"]
t_msg = self.torrentinfo[t_name]["msg"]
t_status = self.torrentinfo[t_name]["status"]
@ -718,7 +724,8 @@ class Qbt:
logger.print_line("No torrents to tag with no hardlinks.", self.config.loglevel)
if num_untag >= 1:
logger.print_line(
f"{'Did not delete' if self.config.dry_run else 'Deleted'} noHL tags / share limits for {num_untag} "
f"{'Did not delete' if self.config.dry_run else 'Deleted'} "
f"{self.config.nohardlinks_tag} tags / share limits for {num_untag} "
f".torrent{'s.' if num_untag > 1 else '.'}",
self.config.loglevel,
)
@ -743,7 +750,7 @@ class Qbt:
num_tor_error = 0
num_untag = 0
tor_error_summary = ""
tag_error = self.config.settings["tracker_error_tag"]
tag_error = self.config.tracker_error_tag
cfg_rem_unregistered = self.config.commands["rem_unregistered"]
cfg_tag_error = self.config.commands["tag_tracker_error"]

View file

@ -434,9 +434,9 @@ def start():
if stats["rem_unreg"] > 0:
stats_summary.append(f"Total Unregistered Torrents Removed: {stats['rem_unreg']}")
if stats["tagged_tracker_error"] > 0:
stats_summary.append(f"Total {cfg.settings['tracker_error_tag']} Torrents Tagged: {stats['tagged_tracker_error']}")
stats_summary.append(f"Total {cfg.tracker_error_tag} Torrents Tagged: {stats['tagged_tracker_error']}")
if stats["untagged_tracker_error"] > 0:
stats_summary.append(f"Total {cfg.settings['tracker_error_tag']} Torrents untagged: {stats['untagged_tracker_error']}")
stats_summary.append(f"Total {cfg.tracker_error_tag} Torrents untagged: {stats['untagged_tracker_error']}")
if stats["added"] > 0:
stats_summary.append(f"Total Torrents Added: {stats['added']}")
if stats["resumed"] > 0:
@ -450,9 +450,9 @@ def start():
if stats["orphaned"] > 0:
stats_summary.append(f"Total Orphaned Files: {stats['orphaned']}")
if stats["tagged_noHL"] > 0:
stats_summary.append(f"Total noHL Torrents Tagged: {stats['tagged_noHL']}")
stats_summary.append(f"Total {cfg.nohardlinks_tag} Torrents Tagged: {stats['tagged_noHL']}")
if stats["untagged_noHL"] > 0:
stats_summary.append(f"Total noHL Torrents untagged: {stats['untagged_noHL']}")
stats_summary.append(f"Total {cfg.nohardlinks_tag} Torrents untagged: {stats['untagged_noHL']}")
if stats["recycle_emptied"] > 0:
stats_summary.append(f"Total Files Deleted from Recycle Bin: {stats['recycle_emptied']}")
if stats["orphaned_emptied"] > 0: