mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Rewrote IOHandler to Kotlin
This commit is contained in:
		@@ -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;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										62
									
								
								app/src/main/java/eu/kanade/tachiyomi/data/io/IOHandler.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								app/src/main/java/eu/kanade/tachiyomi/data/io/IOHandler.kt
									
									
									
									
									
										Normal 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
 | 
			
		||||
    }
 | 
			
		||||
@@ -14,7 +14,6 @@ import eu.davidea.flexibleadapter.FlexibleAdapter
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.data.database.models.Category
 | 
			
		||||
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.event.LibraryMangasEvent
 | 
			
		||||
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) {
 | 
			
		||||
        if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_IMAGE_OPEN) {
 | 
			
		||||
            selectedCoverManga?.let { manga ->
 | 
			
		||||
 | 
			
		||||
                try {
 | 
			
		||||
                // Get the file's input stream from the incoming Intent
 | 
			
		||||
                val inputStream = context.contentResolver.openInputStream(data.data)
 | 
			
		||||
 | 
			
		||||
                // 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)
 | 
			
		||||
 | 
			
		||||
                // Get file from filepath
 | 
			
		||||
                val picture = File(result ?: "")
 | 
			
		||||
                val picture = File(result)
 | 
			
		||||
 | 
			
		||||
                try {
 | 
			
		||||
                    // Update cover to selected file, show error if something went wrong
 | 
			
		||||
                    if (presenter.editCoverWithLocalFile(picture, manga)) {
 | 
			
		||||
                        adapter.refreshRegisteredAdapters()
 | 
			
		||||
@@ -330,6 +330,7 @@ class LibraryFragment : BaseRxFragment<LibraryPresenter>(), ActionMode.Callback
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                } catch (e: IOException) {
 | 
			
		||||
                    ToastUtil.showShort(context, R.string.notification_manga_update_failed)
 | 
			
		||||
                    e.printStackTrace()
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user