package org.fox.ttcomics2.archive; import android.os.Parcel; import android.os.Parcelable; import org.fox.ttcomics2.utils.NaturalOrderComparator; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; public class CbzComicArchive extends ComicArchive { private final String TAG = this.getClass().getSimpleName(); private String m_fileName; private ZipFile m_zipFile; private ArrayList m_entries = new ArrayList(); @Override public int getCount() { return m_entries.size(); } @Override public InputStream getItem(int index) throws IOException { return m_zipFile.getInputStream(m_entries.get(index)); } private void initialize() throws IOException { m_zipFile = new ZipFile(m_fileName); Enumeration e = m_zipFile.entries(); while (e.hasMoreElements()) { ZipEntry ze = e.nextElement(); if (!ze.isDirectory() && isValidComic(ze.getName())) { m_entries.add(ze); } } Collections.sort(m_entries, new NaturalOrderComparator()); } public CbzComicArchive(String fileName) throws IOException { m_fileName = fileName; initialize(); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel out, int flags) { out.writeString(m_fileName); } public void readFromParcel(Parcel in) { m_fileName = in.readString(); } public CbzComicArchive(Parcel in) throws IOException { readFromParcel(in); initialize(); } @SuppressWarnings("rawtypes") public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public CbzComicArchive createFromParcel(Parcel in) { try { return new CbzComicArchive(in); } catch (IOException e) { e.printStackTrace(); return null; } } public CbzComicArchive[] newArray(int size) { return new CbzComicArchive[size]; } }; }