summaryrefslogtreecommitdiffstats
path: root/src/helpers.cr
diff options
context:
space:
mode:
Diffstat (limited to 'src/helpers.cr')
-rw-r--r--src/helpers.cr46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/helpers.cr b/src/helpers.cr
index 33035d60..2e2d9de4 100644
--- a/src/helpers.cr
+++ b/src/helpers.cr
@@ -79,6 +79,15 @@ class ChannelVideo
})
end
+class User
+ add_mapping({
+ id: String,
+ updated: Time,
+ notifications: Int32,
+ subscriptions: Array(String),
+ })
+end
+
class RedditSubmit
JSON.mapping({
data: RedditSubmitData,
@@ -545,3 +554,40 @@ def fetch_channel(id, client, db)
return channel
end
+
+def get_user(sid, client, headers, db)
+ if db.query_one?("SELECT EXISTS (SELECT true FROM users WHERE id = $1)", sid, as: Bool)
+ user = db.query_one("SELECT * FROM users WHERE id = $1", sid, as: User)
+
+ if Time.now - user.updated > 1.minutes
+ user = fetch_user(sid, client, headers)
+ user_array = user.to_a
+ args = arg_array(user_array)
+
+ db.exec("INSERT INTO users VALUES (#{args}) \
+ ON CONFLICT (id) DO UPDATE SET updated = $2, subscriptions = $4", user_array)
+ end
+ else
+ user = fetch_user(sid, client, headers)
+ args = arg_array(user.to_a)
+ db.exec("INSERT INTO users VALUES (#{args})", user.to_a)
+ end
+
+ return user
+end
+
+def fetch_user(sid, client, headers)
+ feed = client.get("/subscription_manager?action_takeout=1", headers).body
+
+ channels = [] of String
+ feed = XML.parse_html(feed)
+ feed.xpath_nodes("//opml/outline/outline").each do |channel|
+ id = channel["xmlurl"][-24..-1]
+ get_channel(id, client, PG_DB)
+
+ channels << id
+ end
+
+ user = User.new(sid, Time.now, 0, channels)
+ return user
+end