summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>2023-12-20 00:13:11 -0500
committerChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>2024-11-17 13:12:56 -0500
commit6abee5de994063b3e9f0e8d2c7ab86deeb4b9885 (patch)
tree85791faf56bff073623e7408a104df4f5b14e8d7 /src
parent98926047586154269bb269d01e3e52e60e044035 (diff)
downloadinvidious-6abee5de994063b3e9f0e8d2c7ab86deeb4b9885.tar.gz
invidious-6abee5de994063b3e9f0e8d2c7ab86deeb4b9885.tar.bz2
invidious-6abee5de994063b3e9f0e8d2c7ab86deeb4b9885.zip
Ensure IO is properly closed when importing NewPipe subscriptions
Diffstat (limited to 'src')
-rw-r--r--src/invidious/user/imports.cr48
1 files changed, 22 insertions, 26 deletions
diff --git a/src/invidious/user/imports.cr b/src/invidious/user/imports.cr
index 533c18d9..84794991 100644
--- a/src/invidious/user/imports.cr
+++ b/src/invidious/user/imports.cr
@@ -290,42 +290,38 @@ struct Invidious::User
end
def from_newpipe(user : User, body : String) : Bool
- io = IO::Memory.new(body)
-
- Compress::Zip::File.open(io) do |file|
+ Compress::Zip::File.open(IO::Memory.new(body), true) do |file|
file.entries.each do |entry|
entry.open do |file_io|
- # Ensure max size of 4MB
- io_sized = IO::Sized.new(file_io, 0x400000)
-
next if entry.filename != "newpipe.db"
- tempfile = File.tempfile(".db")
-
- begin
- File.write(tempfile.path, io_sized.gets_to_end)
- rescue
- return false
- end
-
- db = DB.open("sqlite3://" + tempfile.path)
+ # Ensure max size of 4MB
+ io_sized = IO::Sized.new(file_io, 0x400000)
- user.watched += db.query_all("SELECT url FROM streams", as: String)
- .map(&.lchop("https://www.youtube.com/watch?v="))
+ temp = File.tempfile(".db") do |tempfile|
+ begin
+ File.write(tempfile.path, io_sized.gets_to_end)
+ rescue
+ return false
+ end
- user.watched.uniq!
- Invidious::Database::Users.update_watch_history(user)
+ DB.open("sqlite3://" + tempfile.path) do |db|
+ user.watched += db.query_all("SELECT url FROM streams", as: String)
+ .map(&.lchop("https://www.youtube.com/watch?v="))
- user.subscriptions += db.query_all("SELECT url FROM subscriptions", as: String)
- .map(&.lchop("https://www.youtube.com/channel/"))
+ user.watched.uniq!
+ Invidious::Database::Users.update_watch_history(user)
- user.subscriptions.uniq!
- user.subscriptions = get_batch_channels(user.subscriptions)
+ user.subscriptions += db.query_all("SELECT url FROM subscriptions", as: String)
+ .map(&.lchop("https://www.youtube.com/channel/"))
- Invidious::Database::Users.update_subscriptions(user)
+ user.subscriptions.uniq!
+ user.subscriptions = get_batch_channels(user.subscriptions)
- db.close
- tempfile.delete
+ Invidious::Database::Users.update_subscriptions(user)
+ end
+ end
+ temp.delete
end
end
end