convert CopyTask to kotlin

This commit is contained in:
tibbi 2016-11-05 18:52:31 +01:00
parent ccbed84377
commit 68e5b4cf79
2 changed files with 83 additions and 89 deletions

View File

@ -1,89 +0,0 @@
package com.simplemobiletools.filemanager.asynctasks;
import android.os.AsyncTask;
import android.support.v4.util.Pair;
import android.util.Log;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.ref.WeakReference;
import java.util.List;
public class CopyTask extends AsyncTask<Pair<List<File>, File>, Void, Boolean> {
private static final String TAG = CopyTask.class.getSimpleName();
private static WeakReference<CopyListener> mListener;
private static File destinationDir;
public CopyTask(CopyListener listener) {
mListener = new WeakReference<>(listener);
}
@Override
protected Boolean doInBackground(Pair<List<File>, File>... params) {
final Pair<List<File>, File> pair = params[0];
final List<File> files = pair.first;
for (File file : files) {
try {
destinationDir = new File(pair.second, file.getName());
copy(file, destinationDir);
return true;
} catch (Exception e) {
Log.e(TAG, "copy " + e);
}
}
return false;
}
private void copy(File source, File destination) throws Exception {
if (source.isDirectory()) {
if (!destination.exists() && !destination.mkdirs()) {
throw new IOException("Could not create dir " + destination.getAbsolutePath());
}
final String[] children = source.list();
for (String child : children) {
copy(new File(source, child), new File(destination, child));
}
} else {
final File directory = destination.getParentFile();
if (directory != null && !directory.exists() && !directory.mkdirs()) {
throw new IOException("Could not create dir " + directory.getAbsolutePath());
}
final InputStream in = new FileInputStream(source);
final OutputStream out = new FileOutputStream(destination);
final byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
}
@Override
protected void onPostExecute(Boolean success) {
final CopyListener listener = mListener.get();
if (listener == null)
return;
if (success) {
listener.copySucceeded(destinationDir);
} else {
listener.copyFailed();
}
}
public interface CopyListener {
void copySucceeded(File destinationDir);
void copyFailed();
}
}

View File

@ -0,0 +1,83 @@
package com.simplemobiletools.filemanager.asynctasks
import android.os.AsyncTask
import android.support.v4.util.Pair
import android.util.Log
import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
import java.io.IOException
import java.lang.ref.WeakReference
class CopyTask(listener: CopyTask.CopyListener) : AsyncTask<Pair<List<File>, File>, Void, Boolean>() {
private val TAG = CopyTask::class.java.simpleName
private var mListener: WeakReference<CopyListener>? = null
private var destinationDir: File? = null
init {
mListener = WeakReference(listener)
}
override fun doInBackground(vararg params: Pair<List<File>, File>): Boolean? {
val pair = params[0]
val files = pair.first
for (file in files) {
try {
destinationDir = File(pair.second, file.name)
copy(file, destinationDir!!)
return true
} catch (e: Exception) {
Log.e(TAG, "copy " + e)
}
}
return false
}
@Throws(Exception::class)
private fun copy(source: File, destination: File) {
if (source.isDirectory) {
if (!destination.exists() && !destination.mkdirs()) {
throw IOException("Could not create dir " + destination.absolutePath)
}
val children = source.list()
for (child in children) {
copy(File(source, child), File(destination, child))
}
} else {
val directory = destination.parentFile
if (!directory.exists() && !directory.mkdirs()) {
throw IOException("Could not create dir " + directory.absolutePath)
}
val inputStream = FileInputStream(source)
val out = FileOutputStream(destination)
val buf = ByteArray(1024)
var len: Int
while (true) {
len = inputStream.read(buf)
if (len <= 0)
break
out.write(buf, 0, len)
}
}
}
override fun onPostExecute(success: Boolean) {
val listener = mListener?.get() ?: return
if (success) {
listener.copySucceeded(destinationDir!!)
} else {
listener.copyFailed()
}
}
interface CopyListener {
fun copySucceeded(destinationDir: File)
fun copyFailed()
}
}