@@ -31,24 +31,33 @@ require "yaml"
3131require " compress/zip"
3232require " protodec/utils"
3333
34- require " ./invidious/database/*"
35- require " ./invidious/database/migrations/*"
34+ # Database requires
35+ {% unless flag?(:api_only ) % }
36+ require " ./invidious/database/*"
37+ require " ./invidious/database/migrations/*"
38+ {% else % }
39+ require " ./invidious/database/api_only_stubs"
40+ {% end % }
41+
42+ # Core requires
3643require " ./invidious/http_server/*"
3744require " ./invidious/helpers/*"
3845require " ./invidious/yt_backend/*"
3946require " ./invidious/frontend/*"
4047require " ./invidious/videos/*"
41-
4248require " ./invidious/jsonify/**"
43-
44- require " ./invidious/*"
49+ require " ./invidious/requires"
4550require " ./invidious/comments/*"
4651require " ./invidious/channels/*"
4752require " ./invidious/user/*"
4853require " ./invidious/search/*"
4954require " ./invidious/routes/**"
50- require " ./invidious/jobs/base_job"
51- require " ./invidious/jobs/*"
55+
56+ # Jobs (not needed in API-only mode)
57+ {% unless flag?(:api_only ) % }
58+ require " ./invidious/jobs/base_job"
59+ require " ./invidious/jobs/*"
60+ {% end % }
5261
5362# Declare the base namespace for invidious
5463module Invidious
@@ -60,7 +69,13 @@ alias IV = Invidious
6069CONFIG = Config .load
6170HMAC_KEY = CONFIG .hmac_key
6271
63- PG_DB = DB .open CONFIG .database_url
72+ # Database connection
73+ {% unless flag?(:api_only ) % }
74+ PG_DB = DB .open CONFIG .database_url
75+ {% else % }
76+ require " ./invidious/api_only_types"
77+ PG_DB = DummyDB .new
78+ {% end % }
6479ARCHIVE_URL = URI .parse(" https://archive.org" )
6580PUBSUB_URL = URI .parse(" https://pubsubhubbub.appspot.com" )
6681REDDIT_URL = URI .parse(" https://www.reddit.com" )
@@ -133,7 +148,11 @@ Kemal.config.extra_options do |parser|
133148 exit
134149 end
135150 parser.on(" --migrate" , " Run any migrations (beta, use at your own risk!!" ) do
136- Invidious ::Database ::Migrator .new(PG_DB ).migrate
151+ {% unless flag?(:api_only ) % }
152+ Invidious ::Database ::Migrator .new(PG_DB ).migrate
153+ {% else % }
154+ puts " Database migrations are not available in API-only mode"
155+ {% end % }
137156 exit
138157 end
139158end
@@ -147,9 +166,11 @@ OUTPUT = CONFIG.output.upcase == "STDOUT" ? STDOUT : File.open(CONFIG.output, mo
147166LOGGER = Invidious ::LogHandler .new(OUTPUT , CONFIG .log_level, CONFIG .colorize_logs)
148167
149168# Check table integrity
150- Invidious ::Database .check_integrity(CONFIG )
169+ {% unless flag?(:api_only ) % }
170+ Invidious ::Database .check_integrity(CONFIG )
171+ {% end % }
151172
152- {% if ! flag?(:skip_videojs_download ) % }
173+ {% if ! flag?(:skip_videojs_download ) && ! flag?( :api_only ) % }
153174 # Resolve player dependencies. This is done at compile time.
154175 #
155176 # Running the script by itself would show some colorful feedback while this doesn't.
@@ -175,38 +196,48 @@ DECRYPT_FUNCTION =
175196
176197# Start jobs
177198
178- if CONFIG .channel_threads > 0
179- Invidious ::Jobs .register Invidious ::Jobs ::RefreshChannelsJob .new(PG_DB )
180- end
181-
182- if CONFIG .feed_threads > 0
183- Invidious ::Jobs .register Invidious ::Jobs ::RefreshFeedsJob .new(PG_DB )
184- end
185-
186- if CONFIG .statistics_enabled
187- Invidious ::Jobs .register Invidious ::Jobs ::StatisticsRefreshJob .new(PG_DB , SOFTWARE )
188- end
189-
190- if (CONFIG .use_pubsub_feeds.is_a?(Bool ) && CONFIG .use_pubsub_feeds.as(Bool )) || (CONFIG .use_pubsub_feeds.is_a?(Int32 ) && CONFIG .use_pubsub_feeds.as(Int32 ) > 0 )
191- Invidious ::Jobs .register Invidious ::Jobs ::SubscribeToFeedsJob .new(PG_DB , HMAC_KEY )
192- end
199+ {% unless flag?(:api_only ) % }
200+ if CONFIG .channel_threads > 0
201+ Invidious ::Jobs .register Invidious ::Jobs ::RefreshChannelsJob .new(PG_DB )
202+ end
193203
194- if CONFIG .popular_enabled
195- Invidious ::Jobs .register Invidious ::Jobs ::PullPopularVideosJob .new(PG_DB )
196- end
204+ if CONFIG .feed_threads > 0
205+ Invidious ::Jobs .register Invidious ::Jobs ::RefreshFeedsJob .new(PG_DB )
206+ end
197207
198- NOTIFICATION_CHANNEL = :: Channel ( VideoNotification ).new( 32 )
199- CONNECTION_CHANNEL = :: Channel ({ Bool , :: Channel ( PQ :: Notification )}) .new(32 )
200- Invidious :: Jobs .register Invidious :: Jobs :: NotificationJob .new( NOTIFICATION_CHANNEL , CONNECTION_CHANNEL , CONFIG .database_url)
208+ if CONFIG .statistics_enabled
209+ Invidious :: Jobs .register Invidious :: Jobs :: StatisticsRefreshJob .new(PG_DB , SOFTWARE )
210+ end
201211
202- Invidious ::Jobs .register Invidious ::Jobs ::ClearExpiredItemsJob .new
212+ if (CONFIG .use_pubsub_feeds.is_a?(Bool ) && CONFIG .use_pubsub_feeds.as(Bool )) || (CONFIG .use_pubsub_feeds.is_a?(Int32 ) && CONFIG .use_pubsub_feeds.as(Int32 ) > 0 )
213+ Invidious ::Jobs .register Invidious ::Jobs ::SubscribeToFeedsJob .new(PG_DB , HMAC_KEY )
214+ end
203215
204- Invidious ::Jobs .register Invidious ::Jobs ::InstanceListRefreshJob .new
216+ if CONFIG .popular_enabled
217+ Invidious ::Jobs .register Invidious ::Jobs ::PullPopularVideosJob .new(PG_DB )
218+ end
205219
206- Invidious ::Jobs .start_all
220+ NOTIFICATION_CHANNEL = ::Channel (VideoNotification ).new(32 )
221+ CONNECTION_CHANNEL = ::Channel ({Bool , ::Channel (PQ ::Notification )}).new(32 )
222+ Invidious ::Jobs .register Invidious ::Jobs ::NotificationJob .new(NOTIFICATION_CHANNEL , CONNECTION_CHANNEL , CONFIG .database_url)
223+
224+ Invidious ::Jobs .register Invidious ::Jobs ::ClearExpiredItemsJob .new
225+
226+ Invidious ::Jobs .register Invidious ::Jobs ::InstanceListRefreshJob .new
227+
228+ Invidious ::Jobs .start_all
229+ {% else % }
230+ # Define channels for API-only mode (even though they won't be used)
231+ NOTIFICATION_CHANNEL = ::Channel (VideoNotification ).new(1 )
232+ CONNECTION_CHANNEL = ::Channel ({Bool , ::Channel (PQ ::Notification )}).new(1 )
233+ {% end % }
207234
208235def popular_videos
209- Invidious ::Jobs ::PullPopularVideosJob ::POPULAR_VIDEOS .get
236+ {% if flag?(:api_only ) % }
237+ [] of ChannelVideo
238+ {% else % }
239+ Invidious ::Jobs ::PullPopularVideosJob ::POPULAR_VIDEOS .get
240+ {% end % }
210241end
211242
212243# Routing
0 commit comments