Rewrote IOHandler to Kotlin

This commit is contained in:
NoodleMage 2016-02-25 21:08:42 +01:00
parent 4397a44b80
commit fa5b64ce2e
3 changed files with 67 additions and 49 deletions

View File

@ -1,45 +0,0 @@
package eu.kanade.tachiyomi.data.io;
import android.content.Context;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class IOHandler {
private static String getTempFilename(Context context) throws IOException {
File outputDir = context.getCacheDir();
File outputFile = File.createTempFile("temp_cover", "0", outputDir);
return outputFile.getAbsolutePath();
}
public static String downloadMediaAndReturnPath(FileInputStream input, Context context) {
FileOutputStream output = null;
try {
String tempFilename = getTempFilename(context);
output = new FileOutputStream(tempFilename);
int read;
byte[] bytes = new byte[4096];
while ((read = input.read(bytes)) != -1) {
output.write(bytes, 0, read);
}
return tempFilename;
} catch (IOException ignored) {
} finally {
if (input != null) try {
input.close();
} catch (Exception ignored) {
}
if (output != null) try {
output.close();
} catch (Exception ignored) {
}
}
return null;
}
}

View File

@ -0,0 +1,62 @@
@file:JvmName("IOHandler")
package eu.kanade.tachiyomi.data.io
import android.content.Context
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.util.ToastUtil
import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
import java.io.IOException
/**
* Returns temp file location
*
* @param context context of application
* @throws IOException IO exception
* @return location of temp file
*/
@Throws(IOException::class)
private fun getTempFilename(context: Context): String {
// Get output directory.
val outputDir = context.cacheDir
// Create temporary file
val outputFile = File.createTempFile("temp_cover", "0", outputDir)
// Return path of temporary file
return outputFile.absolutePath
}
/**
* Download media to temp location and returns file path
*
* @param input input stream containing input file
* @param context context of application
* @throws IOException IO exception
* @return location of temp file
*/
@Throws(IOException::class)
fun downloadMediaAndReturnPath(input: FileInputStream, context: Context): String {
var tempFilename = ""
var output: FileOutputStream? = null
try {
// Get temp file name.
tempFilename = getTempFilename(context)
output = FileOutputStream(tempFilename)
// Copy input stream to temp location.
input.copyTo(output)
} catch (e: IOException) {
// Show user something went wrong and print stackTrace.
ToastUtil.showShort(context, R.string.notification_manga_update_failed)
e.printStackTrace()
} finally {
// Close streams.
input.close()
output?.close()
}
// Return temp name.
return tempFilename
}

View File

@ -14,7 +14,6 @@ import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.models.Category import eu.kanade.tachiyomi.data.database.models.Category
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.io.IOHandler
import eu.kanade.tachiyomi.data.library.LibraryUpdateService import eu.kanade.tachiyomi.data.library.LibraryUpdateService
import eu.kanade.tachiyomi.event.LibraryMangasEvent import eu.kanade.tachiyomi.event.LibraryMangasEvent
import eu.kanade.tachiyomi.ui.base.fragment.BaseRxFragment import eu.kanade.tachiyomi.ui.base.fragment.BaseRxFragment
@ -311,17 +310,18 @@ class LibraryFragment : BaseRxFragment<LibraryPresenter>(), ActionMode.Callback
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_IMAGE_OPEN) { if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_IMAGE_OPEN) {
selectedCoverManga?.let { manga -> selectedCoverManga?.let { manga ->
try {
// Get the file's input stream from the incoming Intent // Get the file's input stream from the incoming Intent
val inputStream = context.contentResolver.openInputStream(data.data) val inputStream = context.contentResolver.openInputStream(data.data)
// Convert to absolute path to prevent FileNotFoundException // Convert to absolute path to prevent FileNotFoundException
val result = IOHandler.downloadMediaAndReturnPath(inputStream as FileInputStream, val result = eu.kanade.tachiyomi.data.io.downloadMediaAndReturnPath(inputStream as FileInputStream,
context) context)
// Get file from filepath // Get file from filepath
val picture = File(result ?: "") val picture = File(result)
try {
// Update cover to selected file, show error if something went wrong // Update cover to selected file, show error if something went wrong
if (presenter.editCoverWithLocalFile(picture, manga)) { if (presenter.editCoverWithLocalFile(picture, manga)) {
adapter.refreshRegisteredAdapters() adapter.refreshRegisteredAdapters()
@ -330,6 +330,7 @@ class LibraryFragment : BaseRxFragment<LibraryPresenter>(), ActionMode.Callback
} }
} catch (e: IOException) { } catch (e: IOException) {
ToastUtil.showShort(context, R.string.notification_manga_update_failed)
e.printStackTrace() e.printStackTrace()
} }
} }