Add enable and disable notifications (bell dinging feature)
This commit is contained in:
parent
0aa8ad9a7c
commit
2c5d75dcce
1 changed files with 85 additions and 0 deletions
|
@ -587,6 +587,91 @@ get "/feed/subscriptions" do |env|
|
|||
end
|
||||
end
|
||||
|
||||
# Two functions that are useful if you have multiple subscriptions that don't have
|
||||
# the "bell dinged". enable_notifications dings the bell for all subscriptions,
|
||||
# disable_notifications does the opposite. These don't fit conveniently anywhere,
|
||||
# so instead are here more as an undocumented utility.
|
||||
get "/enable_notifications" do |env|
|
||||
authorized = env.get? "authorized"
|
||||
|
||||
if authorized
|
||||
headers = HTTP::Headers.new
|
||||
headers["Cookie"] = env.request.headers["Cookie"]
|
||||
|
||||
client = get_client(youtube_pool)
|
||||
subs = client.get("/subscription_manager?disable_polymer=1", headers)
|
||||
headers["Cookie"] += "; " + subs.cookies.add_request_headers(headers)["Cookie"]
|
||||
match = subs.body.match(/'XSRF_TOKEN': "(?<session_token>[A-Za-z0-9\_\-\=]+)"/)
|
||||
if match
|
||||
session_token = match["session_token"]
|
||||
else
|
||||
next env.redirect "/"
|
||||
end
|
||||
|
||||
headers["content-type"] = "application/x-www-form-urlencoded"
|
||||
subs = XML.parse_html(subs.body)
|
||||
subs.xpath_nodes(%q(//a[@class="subscription-title yt-uix-sessionlink"]/@href)).each do |channel|
|
||||
channel_id = channel.content.lstrip("/channel/")
|
||||
|
||||
channel_req = {
|
||||
"channel_id" => channel_id.not_nil!,
|
||||
"receive_all_updates" => "true",
|
||||
"receive_post_updates" => "true",
|
||||
"session_token" => session_token.not_nil!,
|
||||
}
|
||||
|
||||
channel_req = HTTP::Params.encode(channel_req)
|
||||
|
||||
client.post("/subscription_ajax?action_update_subscription_preferences=1", headers, channel_req)
|
||||
end
|
||||
|
||||
youtube_pool << client
|
||||
end
|
||||
|
||||
env.redirect "/"
|
||||
end
|
||||
|
||||
get "/disable_notifications" do |env|
|
||||
authorized = env.get? "authorized"
|
||||
|
||||
if authorized
|
||||
headers = HTTP::Headers.new
|
||||
headers["Cookie"] = env.request.headers["Cookie"]
|
||||
|
||||
client = get_client(youtube_pool)
|
||||
subs = client.get("/subscription_manager?disable_polymer=1", headers)
|
||||
headers["Cookie"] += "; " + subs.cookies.add_request_headers(headers)["Cookie"]
|
||||
match = subs.body.match(/'XSRF_TOKEN': "(?<session_token>[A-Za-z0-9\_\-\=]+)"/)
|
||||
if match
|
||||
session_token = match["session_token"]
|
||||
else
|
||||
next env.redirect "/"
|
||||
end
|
||||
|
||||
headers["content-type"] = "application/x-www-form-urlencoded"
|
||||
subs = XML.parse_html(subs.body)
|
||||
subs.xpath_nodes(%q(//a[@class="subscription-title yt-uix-sessionlink"]/@href)).each do |channel|
|
||||
channel_id = channel.content.lstrip("/channel/")
|
||||
|
||||
channel_req = {
|
||||
"channel_id" => channel_id.not_nil!,
|
||||
"receive_all_updates" => "false",
|
||||
"receive_no_updates" => "false",
|
||||
"receive_post_updates" => "true",
|
||||
"session_token" => session_token.not_nil!,
|
||||
}
|
||||
|
||||
channel_req = HTTP::Params.encode(channel_req)
|
||||
|
||||
client.post("/subscription_ajax?action_update_subscription_preferences=1", headers, channel_req)
|
||||
end
|
||||
|
||||
youtube_pool << client
|
||||
end
|
||||
|
||||
env.redirect "/"
|
||||
end
|
||||
|
||||
error 404 do |env|
|
||||
error_message = "404 Page not found"
|
||||
templated "error"
|
||||
|
|
Loading…
Reference in a new issue