summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOmar Roth <omarroth@hotmail.com>2018-03-25 22:18:29 -0500
committerOmar Roth <omarroth@hotmail.com>2018-03-25 22:18:29 -0500
commitedfe1eefe83d4c520d1b4aaffbc59627914fefc9 (patch)
treeac5a39b62f35a7a355b881c0c12fe6e03821d5a0
parent252f1c0af36748ac368ca791aad0d5a7f94b6d21 (diff)
downloadinvidious-edfe1eefe83d4c520d1b4aaffbc59627914fefc9.tar.gz
invidious-edfe1eefe83d4c520d1b4aaffbc59627914fefc9.tar.bz2
invidious-edfe1eefe83d4c520d1b4aaffbc59627914fefc9.zip
Add channel refresh
-rw-r--r--src/helpers.cr9
-rw-r--r--src/invidious.cr19
2 files changed, 24 insertions, 4 deletions
diff --git a/src/helpers.cr b/src/helpers.cr
index cd11baab..16e50ccd 100644
--- a/src/helpers.cr
+++ b/src/helpers.cr
@@ -489,11 +489,12 @@ def get_channel(id, client, db)
if db.query_one?("SELECT EXISTS (SELECT true FROM channels WHERE id = $1)", id, as: Bool)
channel = db.query_one("SELECT * FROM channels WHERE id = $1", id, as: InvidiousChannel)
- if Time.now - channel.updated > 1.hours
- db.exec("DELETE FROM channels * WHERE id = $1", id)
+ if Time.now - channel.updated > 1.minutes
channel = fetch_channel(id, client)
- args = arg_array(channel.to_a)
- db.exec("INSERT INTO channels VALUES (#{args})", channel.to_a)
+ channel_array = channel.to_a[1..-1]
+ args = arg_array(channel_array)
+
+ db.exec("UPDATE channels SET (rss,updated,author) = (#{args}) WHERE id = '#{channel.id}'", channel_array)
end
else
channel = fetch_channel(id, client)
diff --git a/src/invidious.cr b/src/invidious.cr
index d78f8129..c9018507 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -27,6 +27,7 @@ CONFIG = Config.from_yaml(File.read("config/config.yml"))
pool_size = CONFIG.pool_size
threads = CONFIG.threads
+channel_threads = 10
Kemal.config.extra_options do |parser|
parser.banner = "Usage: invidious [arguments]"
@@ -122,6 +123,24 @@ threads.times do
end
end
+channel_threads.times do |i|
+ spawn do
+ loop do
+ query = "SELECT id FROM channels ORDER BY updated \
+ LIMIT (SELECT count(*)/#{channel_threads} FROM channels) \
+ OFFSET (SELECT count(*)*#{i}/#{channel_threads} FROM channels)"
+ PG_DB.query(query) do |rs|
+ rs.each do
+ client = get_client(youtube_pool)
+ id = rs.read(String)
+ channel = get_channel(id, client, PG_DB)
+ youtube_pool << client
+ end
+ end
+ end
+ end
+end
+
top_videos = [] of Video
spawn do