summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config/config.example.yml8
-rw-r--r--docker-compose.yml2
-rw-r--r--src/invidious/config.cr12
-rw-r--r--src/invidious/helpers/utils.cr40
-rw-r--r--src/invidious/jobs/refresh_channels_job.cr5
5 files changed, 47 insertions, 20 deletions
diff --git a/config/config.example.yml b/config/config.example.yml
index 59cb486b..475f2703 100644
--- a/config/config.example.yml
+++ b/config/config.example.yml
@@ -315,6 +315,14 @@ https_only: false
channel_threads: 1
##
+## Time between channel_refresh
+##
+## Accepted values: a valid time interval (hours:min:seconds)
+## Default: 00:30:00
+##
+channel_refresh_time: 00:30:00
+
+##
## Forcefully dump and re-download the entire list of uploaded
## videos when crawling channel (during subscriptions update).
##
diff --git a/docker-compose.yml b/docker-compose.yml
index c76c314c..964bb702 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -23,7 +23,9 @@ services:
environment:
# Adapted from ./config/config.yml
INVIDIOUS_CONFIG: |
+ log_level: Info
channel_threads: 1
+ channel_refresh_time: 00:30:00
check_tables: true
feed_threads: 1
db:
diff --git a/src/invidious/config.cr b/src/invidious/config.cr
index 72e145da..150f8064 100644
--- a/src/invidious/config.cr
+++ b/src/invidious/config.cr
@@ -56,11 +56,13 @@ end
class Config
include YAML::Serializable
- property channel_threads : Int32 = 1 # Number of threads to use for crawling videos from channels (for updating subscriptions)
- property feed_threads : Int32 = 1 # Number of threads to use for updating feeds
- property output : String = "STDOUT" # Log file path or STDOUT
- property log_level : LogLevel = LogLevel::Info # Default log level, valid YAML values are ints and strings, see src/invidious/helpers/logger.cr
- property db : DBConfig? = nil # Database configuration with separate parameters (username, hostname, etc)
+ property channel_threads : Int32 = 1 # Number of threads to use for crawling videos from channels (for updating subscriptions)
+ @[YAML::Field(converter: TimeSpanConverter)]
+ property channel_refresh_time : Time::Span = 30.minutes # Time between channel_refresh
+ property feed_threads : Int32 = 1 # Number of threads to use for updating feeds
+ property output : String = "STDOUT" # Log file path or STDOUT
+ property log_level : LogLevel = LogLevel::Info # Default log level, valid YAML values are ints and strings, see src/invidious/helpers/logger.cr
+ property db : DBConfig? = nil # Database configuration with separate parameters (username, hostname, etc)
@[YAML::Field(converter: Preferences::URIConverter)]
property database_url : URI = URI.parse("") # Database configuration using 12-Factor "Database URL" syntax
diff --git a/src/invidious/helpers/utils.cr b/src/invidious/helpers/utils.cr
index a58a21b1..2702c5e9 100644
--- a/src/invidious/helpers/utils.cr
+++ b/src/invidious/helpers/utils.cr
@@ -18,23 +18,39 @@ def elapsed_text(elapsed)
"#{(millis * 1000).round(2)}µs"
end
-def decode_length_seconds(string)
- length_seconds = string.gsub(/[^0-9:]/, "")
- return 0_i32 if length_seconds.empty?
+module TimeSpanConverter
+ def self.to_yaml(value : Time::Span, yaml : YAML::Nodes::Builder)
+ return yaml.scalar recode_length_seconds(value.total_seconds.to_i32)
+ end
- length_seconds = length_seconds.split(":").map { |x| x.to_i? || 0 }
- length_seconds = [0] * (3 - length_seconds.size) + length_seconds
+ def self.from_yaml(ctx : YAML::ParseContext, node : YAML::Nodes::Node) : Time::Span
+ if node.is_a?(YAML::Nodes::Scalar)
+ return decode_time_span(node.value)
+ else
+ node.raise "Expected scalar, not #{node.class}"
+ end
+ end
+end
- length_seconds = Time::Span.new(
- hours: length_seconds[0],
- minutes: length_seconds[1],
- seconds: length_seconds[2]
- ).total_seconds.to_i32
+def decode_time_span(string : String) : Time::Span
+ time_span = string.gsub(/[^0-9:]/, "")
+ return Time::Span.new(seconds: 0) if time_span.empty?
+
+ time_span = time_span.split(":").map { |x| x.to_i? || 0 }
+ time_span = [0] * (3 - time_span.size) + time_span
+
+ return Time::Span.new(
+ hours: time_span[0],
+ minutes: time_span[1],
+ seconds: time_span[2]
+ )
+end
- return length_seconds
+def decode_length_seconds(string : String) : Int32
+ return decode_time_span(string).total_seconds.to_i32
end
-def recode_length_seconds(time)
+def recode_length_seconds(time : Int32) : String
if time <= 0
return ""
else
diff --git a/src/invidious/jobs/refresh_channels_job.cr b/src/invidious/jobs/refresh_channels_job.cr
index 55fb8154..3e04d1cd 100644
--- a/src/invidious/jobs/refresh_channels_job.cr
+++ b/src/invidious/jobs/refresh_channels_job.cr
@@ -58,9 +58,8 @@ class Invidious::Jobs::RefreshChannelsJob < Invidious::Jobs::BaseJob
end
end
- # TODO: make this configurable
- LOGGER.debug("RefreshChannelsJob: Done, sleeping for thirty minutes")
- sleep 30.minutes
+ LOGGER.debug("RefreshChannelsJob: Done, sleeping for #{CONFIG.channel_refresh_time}")
+ sleep CONFIG.channel_refresh_time
Fiber.yield
end
end