Skip to content

Commit

Permalink
improving rarviewer
Browse files Browse the repository at this point in the history
  • Loading branch information
arpitkh96 committed Feb 1, 2015
1 parent fc91c66 commit 198c7e5
Show file tree
Hide file tree
Showing 3 changed files with 137 additions and 3 deletions.
17 changes: 16 additions & 1 deletion src/com/amaze/filemanager/adapters/RarAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,16 @@
import com.amaze.filemanager.R;
import com.amaze.filemanager.fragments.RarViewer;
import com.amaze.filemanager.fragments.ZipViewer;
import com.amaze.filemanager.services.asynctasks.RarExtractTask;
import com.amaze.filemanager.services.asynctasks.RarHelperTask;
import com.amaze.filemanager.services.asynctasks.ZipExtractTask;
import com.amaze.filemanager.services.asynctasks.ZipHelperTask;
import com.amaze.filemanager.utils.Futils;
import com.amaze.filemanager.utils.Icons;
import com.amaze.filemanager.utils.RoundedImageView;
import com.amaze.filemanager.utils.ZipObj;
import com.github.junrar.Archive;
import com.github.junrar.exception.RarException;
import com.github.junrar.rarfile.FileHeader;

import java.io.File;
Expand Down Expand Up @@ -213,8 +216,20 @@ public void onClick(View p1) {

new RarHelperTask(zipViewer, rowItem.getFileNameString()).execute(zipViewer.f);

}else {
String x=rowItem.getFileNameString().substring(rowItem.getFileNameString().lastIndexOf("/")+1);
File file = new File(getContext().getCacheDir().getAbsolutePath() + "/" + x);
zipViewer.files.clear();
zipViewer.files.add(0, file);
try {
new RarExtractTask(new Archive(zipViewer.f), getContext().getCacheDir().getAbsolutePath(), zipViewer, x, true).execute(rowItem);
} catch (RarException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}}
}}
});


Expand Down
120 changes: 120 additions & 0 deletions src/com/amaze/filemanager/services/asynctasks/RarExtractTask.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
package com.amaze.filemanager.services.asynctasks;

/**
* Created by Arpit on 01-02-2015.
*/

import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;

import com.amaze.filemanager.activities.MainActivity;
import com.amaze.filemanager.fragments.RarViewer;
import com.amaze.filemanager.utils.Futils;
import com.amaze.filemanager.utils.ZipObj;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import com.github.junrar.Archive;
import com.github.junrar.exception.RarException;
import com.github.junrar.rarfile.FileHeader;

public class RarExtractTask extends AsyncTask<FileHeader, Void, Void> {
private String outputDir;
private Archive zipFile;
private RarViewer zipViewer;
private String fileName;
boolean open;FileHeader entry;
public RarExtractTask(Archive zipFile, String outputDir, RarViewer zipViewer, String fileName,boolean open) {
this.open=open;
this.outputDir = outputDir;
this.zipFile = zipFile;
this.zipViewer = zipViewer;
this.fileName = fileName;
}

@Override
protected Void doInBackground(FileHeader... zipEntries) {
entry=zipEntries[0];
FileHeader zipEntry = zipEntries[0];
try {if(open)unzipEntry1(zipFile, zipEntry, outputDir);
else
unzipEntry(zipFile, zipEntry, outputDir);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if(open){
Futils futils = new Futils();
futils.openFile(new File(outputDir,fileName), (MainActivity) zipViewer.getActivity());
}else Toast.makeText(zipViewer.getActivity(), "Extracted to " + outputDir, Toast.LENGTH_LONG).show();}

private void createDir(File dir) {
if (dir.exists()) {
return;
}
Log.i("Amaze", "Creating dir " + dir.getName());
if (!dir.mkdirs()) {
throw new RuntimeException("Can not create dir " + dir);
}
}
private void unzipEntry(Archive zipfile, FileHeader entry, String outputDir)
throws IOException,RarException {
if (entry.isDirectory()) {
createDir(new File(outputDir, entry.getFileNameString()));
for (FileHeader entry1:zipViewer.wholelist ) {
if(entry1.getFileNameString().contains(entry.getFileNameString())){unzipEntry(zipfile,entry1,outputDir);}
}
return;
}
File outputFile = new File(outputDir, entry.getFileNameString());
if (!outputFile.getParentFile().exists()) {
createDir(outputFile.getParentFile());
}
BufferedInputStream inputStream = new BufferedInputStream(
zipfile.getInputStream(entry));
BufferedOutputStream outputStream = new BufferedOutputStream(
new FileOutputStream(outputFile));
try {
int len;
byte buf[] = new byte[1024];
while ((len = inputStream.read(buf)) > 0) {

outputStream.write(buf, 0, len);
}
} finally {
outputStream.close();
inputStream.close();
}
}private void unzipEntry1(Archive zipfile,FileHeader entry, String outputDir)
throws IOException,RarException {

File outputFile = new File(outputDir, fileName);
BufferedInputStream inputStream = new BufferedInputStream(
zipfile.getInputStream(entry));
BufferedOutputStream outputStream = new BufferedOutputStream(
new FileOutputStream(outputFile));
try {
int len;
byte buf[] = new byte[1024];
while ((len = inputStream.read(buf)) > 0) {

outputStream.write(buf, 0, len);
}
} finally {
outputStream.close();
inputStream.close();
}
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,11 @@ protected ArrayList<FileHeader> doInBackground(File... params) {
int i = 0;

if (zipViewer.wholelist.size() == 0) {
zipfile.nextFileHeader().getFullUnpackSize();

FileHeader fh = zipfile.nextFileHeader();
while (fh != null) {
fh = zipfile.nextFileHeader();
zipViewer.wholelist.add(fh);
fh = zipfile.nextFileHeader();
}
}
if(dir==null || dir.trim().length()==0 || dir.equals("")){
Expand Down

0 comments on commit 198c7e5

Please sign in to comment.