package com.amaze.filemanager.services;
import android.util.Log;
import com.amaze.filemanager.utils.NoMoreFilesException;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* Created by arpitkh996 on 17-08-2016.
*/
public class ReadThread extends Thread{
BufferHandler bufferHandler;
InputStream inputStream;
BufferedInputStream in;
ProgressHandler progressHandler;
String currentID;
boolean started=false;
/**
* Read input stream into memory and store into bufferhandler
* @param bufferHandler To store the read buffers into memory and provide them to write thread
* @param progressHandler Handle progress
*/
public ReadThread(BufferHandler bufferHandler,ProgressHandler progressHandler) {
this.bufferHandler = bufferHandler;
this.progressHandler=progressHandler;
}
@Override
public void run() {
super.run();
started=true;
try {
//get First inputstream
inputStream=bufferHandler.getNextInputStream(currentID);
//Stop if null
if(inputStream==null)
return;
in = new BufferedInputStream(inputStream);
currentID=bufferHandler.getCurrentReadId();
} catch (NoMoreFilesException e) {
//Stop if Nofiles
return;
}
int length;
byte[] buffer;
try {
while (true) {
//Check if buffer has space
if(bufferHandler.canAdd()){
if ((length = in.read(buffer = new byte[1024 * 60])) > 0) {
//read file
bufferHandler.add(currentID,buffer, length);
//update progress
progressHandler.addReadLength(length);
} else {
Log.e("Read","Read done now changing data");
//File has ended,proceed to next File
try {
//Close the old streams
in.close();
inputStream.close();
//Get new streams and id
inputStream=bufferHandler.getNextInputStream(currentID);
//if inputstream is null then stop
if(inputStream==null)
break;
in = new BufferedInputStream(inputStream);
currentID=bufferHandler.getCurrentReadId();
} catch (NoMoreFilesException e) {
//Stop if nofiles
break;
}
}
}
}
} catch (IOException e) {
bufferHandler.setReading(false);
e.printStackTrace();
}
bufferHandler.setReading(false);
}
}