mirror of
https://github.com/ppy/osu.git
synced 2024-11-11 09:27:29 +08:00
Ensure stream disposal & move entire operation inside task
This commit is contained in:
parent
f9d7945a6f
commit
d0668192aa
@ -1,7 +1,6 @@
|
||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||
// See the LICENCE file in the repository root for full licence text.
|
||||
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using Android.App;
|
||||
@ -62,7 +61,7 @@ namespace osu.Android
|
||||
}
|
||||
}
|
||||
|
||||
private void handleImportFromUri(Uri uri)
|
||||
private void handleImportFromUri(Uri uri) => Task.Factory.StartNew(async () =>
|
||||
{
|
||||
// there are more performant overloads of this method, but this one is the most backwards-compatible
|
||||
// (dates back to API 1).
|
||||
@ -74,23 +73,16 @@ namespace osu.Android
|
||||
cursor.MoveToFirst();
|
||||
|
||||
var filenameColumn = cursor.GetColumnIndex(OpenableColumns.DisplayName);
|
||||
|
||||
var stream = ContentResolver.OpenInputStream(uri);
|
||||
string filename = cursor.GetString(filenameColumn);
|
||||
|
||||
if (stream != null)
|
||||
Task.Factory.StartNew(() => runImport(stream, filename), TaskCreationOptions.LongRunning);
|
||||
}
|
||||
|
||||
private Task runImport(Stream stream, string filename)
|
||||
{
|
||||
// SharpCompress requires archive streams to be seekable, which the stream opened by
|
||||
// OpenInputStream() seems to not necessarily be.
|
||||
// copy to an arbitrary-access memory stream to be able to proceed with the import.
|
||||
var copy = new MemoryStream();
|
||||
stream.CopyTo(copy);
|
||||
using (var stream = ContentResolver.OpenInputStream(uri))
|
||||
await stream.CopyToAsync(copy);
|
||||
|
||||
return game.Import(copy, filename);
|
||||
}
|
||||
await game.Import(copy, filename);
|
||||
}, TaskCreationOptions.LongRunning);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user