summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamantaz Fox <coding@samantaz.fr>2021-11-26 19:36:31 +0100
committerSamantaz Fox <coding@samantaz.fr>2022-01-04 17:13:51 +0100
commit998edba6f064eb4e09ca286ad33bfd967ef03e66 (patch)
tree205e58f9cd4580d79b8567c36d3b91017cf2f789
parent4f219362fe96573f8ce3dc2e0ee86070046071dd (diff)
downloadinvidious-998edba6f064eb4e09ca286ad33bfd967ef03e66.tar.gz
invidious-998edba6f064eb4e09ca286ad33bfd967ef03e66.tar.bz2
invidious-998edba6f064eb4e09ca286ad33bfd967ef03e66.zip
Move DB queries related to 'videos' in a separate module
-rw-r--r--src/invidious.cr3
-rw-r--r--src/invidious/database/base.cr4
-rw-r--r--src/invidious/database/videos.cr43
-rw-r--r--src/invidious/videos.cr10
4 files changed, 53 insertions, 7 deletions
diff --git a/src/invidious.cr b/src/invidious.cr
index ade13608..405fcadf 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -20,12 +20,13 @@ require "kemal"
require "athena-negotiation"
require "openssl/hmac"
require "option_parser"
-require "pg"
require "sqlite3"
require "xml"
require "yaml"
require "compress/zip"
require "protodec/utils"
+
+require "./invidious/database/*"
require "./invidious/helpers/*"
require "./invidious/yt_backend/*"
require "./invidious/*"
diff --git a/src/invidious/database/base.cr b/src/invidious/database/base.cr
new file mode 100644
index 00000000..055a6284
--- /dev/null
+++ b/src/invidious/database/base.cr
@@ -0,0 +1,4 @@
+require "pg"
+
+module Invidious::Database
+end
diff --git a/src/invidious/database/videos.cr b/src/invidious/database/videos.cr
new file mode 100644
index 00000000..e1fa01c3
--- /dev/null
+++ b/src/invidious/database/videos.cr
@@ -0,0 +1,43 @@
+require "./base.cr"
+
+module Invidious::Database::Videos
+ extend self
+
+ def insert(video : Video)
+ request = <<-SQL
+ INSERT INTO videos
+ VALUES ($1, $2, $3)
+ ON CONFLICT (id) DO NOTHING
+ SQL
+
+ PG_DB.exec(request, video.id, video.info.to_json, video.updated)
+ end
+
+ def delete(id)
+ request = <<-SQL
+ DELETE FROM videos *
+ WHERE id = $1
+ SQL
+
+ PG_DB.exec(request, id)
+ end
+
+ def update(video : Video)
+ request = <<-SQL
+ UPDATE videos
+ SET (id, info, updated) = ($1, $2, $3)
+ WHERE id = $1
+ SQL
+
+ PG_DB.exec(request, video.id, video.info.to_json, video.updated)
+ end
+
+ def select(id : String) : Video?
+ request = <<-SQL
+ SELECT * FROM videos
+ WHERE id = $1
+ SQL
+
+ return PG_DB.query_one?(request, id, as: Video)
+ end
+end
diff --git a/src/invidious/videos.cr b/src/invidious/videos.cr
index d4ef0900..645d3678 100644
--- a/src/invidious/videos.cr
+++ b/src/invidious/videos.cr
@@ -994,7 +994,7 @@ def extract_video_info(video_id : String, proxy_region : String? = nil, context_
end
def get_video(id, db, refresh = true, region = nil, force_refresh = false)
- if (video = db.query_one?("SELECT * FROM videos WHERE id = $1", id, as: Video)) && !region
+ if (video = Invidious::Database::Videos.select(id)) && !region
# If record was last updated over 10 minutes ago, or video has since premiered,
# refresh (expire param in response lasts for 6 hours)
if (refresh &&
@@ -1003,17 +1003,15 @@ def get_video(id, db, refresh = true, region = nil, force_refresh = false)
force_refresh
begin
video = fetch_video(id, region)
- db.exec("UPDATE videos SET (id, info, updated) = ($1, $2, $3) WHERE id = $1", video.id, video.info.to_json, video.updated)
+ Invidious::Database::Videos.update(video)
rescue ex
- db.exec("DELETE FROM videos * WHERE id = $1", id)
+ Invidious::Database::Videos.delete(id)
raise ex
end
end
else
video = fetch_video(id, region)
- if !region
- db.exec("INSERT INTO videos VALUES ($1, $2, $3) ON CONFLICT (id) DO NOTHING", video.id, video.info.to_json, video.updated)
- end
+ Invidious::Database::Videos.insert(video) if !region
end
return video