mirror of
https://github.com/hkalexling/Mango.git
synced 2025-08-04 03:45:32 -04:00
75 lines
2.3 KiB
Crystal
75 lines
2.3 KiB
Crystal
class Plugin
|
|
class Updater
|
|
use_default
|
|
|
|
def initialize
|
|
interval = Config.current.plugin_update_interval_hours
|
|
return if interval <= 0
|
|
spawn do
|
|
loop do
|
|
Plugin.list.map(&.["id"]).each do |pid|
|
|
check_updates pid
|
|
end
|
|
sleep interval.hours
|
|
end
|
|
end
|
|
end
|
|
|
|
def check_updates(plugin_id : String)
|
|
Logger.debug "Checking plugin #{plugin_id} for updates"
|
|
|
|
plugin = Plugin.new plugin_id
|
|
if plugin.info.version == 1
|
|
Logger.debug "Plugin #{plugin_id} is targeting API version 1. " \
|
|
"Skipping update check"
|
|
return
|
|
end
|
|
|
|
subscriptions = plugin.list_subscriptions_raw
|
|
subscriptions.each do |sub|
|
|
check_subscription plugin, sub
|
|
end
|
|
subscriptions.save
|
|
rescue e
|
|
Logger.error "Error checking plugin #{plugin_id} for updates: " \
|
|
"#{e.message}"
|
|
end
|
|
|
|
def check_subscription(plugin : Plugin, sub : Subscription)
|
|
Logger.debug "Checking subscription #{sub.name} for updates"
|
|
matches = plugin.new_chapters(sub.manga_id, sub.last_checked)
|
|
.as_a.select do |chapter|
|
|
sub.match_chapter chapter
|
|
end
|
|
if matches.empty?
|
|
Logger.debug "No new chapters found."
|
|
return
|
|
end
|
|
Logger.debug "Found #{matches.size} new chapters. " \
|
|
"Pushing to download queue"
|
|
jobs = matches.map { |ch|
|
|
Queue::Job.new(
|
|
"#{plugin.info.id}-#{Base64.encode ch["id"].as_s}",
|
|
"", # manga_id
|
|
ch["title"].as_s,
|
|
sub.manga_title,
|
|
Queue::JobStatus::Pending,
|
|
Time.utc
|
|
)
|
|
}
|
|
inserted_count = Queue.default.push jobs
|
|
Logger.info "#{inserted_count}/#{matches.size} new chapters added " \
|
|
"to the download queue. Plugin ID #{plugin.info.id}, " \
|
|
"subscription name #{sub.name}"
|
|
if inserted_count != matches.size
|
|
Logger.error "Failed to add #{matches.size - inserted_count} " \
|
|
"chapters to download queue"
|
|
end
|
|
sub.last_checked = Time.utc.to_unix
|
|
rescue e
|
|
Logger.error "Error when checking updates for subscription " \
|
|
"#{sub.name}: #{e.message}"
|
|
end
|
|
end
|
|
end
|