Add ability to load extension shards for Invidious

This commit is contained in:
syeopite 2024-11-09 23:10:13 -08:00
parent b173d4acf2
commit 5bf4e20c5a
No known key found for this signature in database
GPG Key ID: A73C186DA3955A1A
3 changed files with 32 additions and 0 deletions

2
.gitignore vendored
View File

@ -7,3 +7,5 @@
/invidious
/sentry
/config/config.yml
/src/addons/enabled.txt

View File

@ -0,0 +1,19 @@
require "yaml"
shardyml = File.open("shard.yml") do |file|
YAML.parse(file).as_h
end
# Finds all dependencies prefixed with extendious
raw_addons = shardyml["dependencies"].as_h.keys.select(&.as_s.starts_with?("extendious"))
addons = [] of String
raw_addons.map do |addon_name|
addon_name = addon_name.as_s
addon_module = addon_name.lchop("extendious-")
addon_module = addon_module.split("-").map!(&.capitalize).join
addons << "#{addon_name},#{addon_module}"
end
File.write("src/addons/enabled.txt", addons.join("\n"))

View File

@ -243,6 +243,17 @@ Kemal.config.host_binding = Kemal.config.host_binding != "0.0.0.0" ? Kemal.confi
Kemal.config.port = Kemal.config.port != 3000 ? Kemal.config.port : CONFIG.port
Kemal.config.app_name = "Invidious"
# Loads optional extensions for Invidious
# Essentially just glorified shards with a set naming scheme
# and load method
{{run("./addons/extract-addons.cr", "--minified")}}
{% for addon in read_file("src/addons/enabled.txt").lines %}
{% shard_name, module_name = addon.split(",") %}
require {{shard_name.id.stringify}}
{{module_name.id}}Ext.invidious_load
{% end %}
# Use in kemal's production mode.
# Users can also set the KEMAL_ENV environmental variable for this to be set automatically.
{% if flag?(:release) || flag?(:production) %}