mirror of
https://gitea.invidious.io/iv-org/invidious-copy-2022-03-16.git
synced 2024-08-15 00:53:18 +00:00
Try to prevent timeout in /data_control
This commit is contained in:
parent
f6d8df1e83
commit
f15b7cebac
2 changed files with 31 additions and 0 deletions
|
@ -1792,6 +1792,36 @@ post "/data_control" do |env|
|
|||
if user
|
||||
user = user.as(User)
|
||||
|
||||
spawn do
|
||||
# Since import can take a while, if we're not done after 20 seconds
|
||||
# push out content to prevent timeout.
|
||||
|
||||
# Interesting to note is that Chrome will try to render before the content has finished loading,
|
||||
# which is why we include a loading icon. Firefox and its derivatives will not see this page,
|
||||
# instead redirecting immediately once the connection has closed.
|
||||
|
||||
# https://stackoverflow.com/q/2091239 is helpful but not directly applicable here.
|
||||
|
||||
sleep 20.seconds
|
||||
env.response.puts %(<meta http-equiv="refresh" content="0; url=#{referer}">)
|
||||
env.response.puts %(<link rel="stylesheet" href="/css/ionicons.min.css">)
|
||||
env.response.puts %(<link rel="stylesheet" href="/css/default.css">)
|
||||
if env.get("preferences").as(Preferences).dark_mode
|
||||
env.response.puts %(<link rel="stylesheet" href="/css/darktheme.css">)
|
||||
else
|
||||
env.response.puts %(<link rel="stylesheet" href="/css/lighttheme.css">)
|
||||
end
|
||||
env.response.puts %(<h3><div class="loading"><i class="icon ion-ios-refresh"></i></div></h3>)
|
||||
env.response.flush
|
||||
|
||||
loop do
|
||||
env.response.puts %(<!-- keepalive #{Time.now.to_unix} -->)
|
||||
env.response.flush
|
||||
|
||||
sleep (20 + rand(11)).seconds
|
||||
end
|
||||
end
|
||||
|
||||
HTTP::FormData.parse(env.request) do |part|
|
||||
body = part.body.gets_to_end
|
||||
if body.empty?
|
||||
|
|
|
@ -58,6 +58,7 @@ end
|
|||
|
||||
class FilteredCompressHandler < Kemal::Handler
|
||||
exclude ["/videoplayback", "/videoplayback/*", "/vi/*", "/ggpht/*", "/api/v1/auth/notifications"]
|
||||
exclude ["/data_control"], "POST"
|
||||
|
||||
def call(env)
|
||||
return call_next env if exclude_match? env
|
||||
|
|
Loading…
Reference in a new issue