Search in sources :

Example 1 with Image

use of com.hippo.image.Image in project EhViewer by seven332.

the class DirGalleryProvider method run.

@Override
public void run() {
    // It may take a long time, so run it in new thread
    UniFile[] files = mDir.listFiles();
    if (files == null) {
        mSize = STATE_ERROR;
        mError = GetText.getString(R.string.error_not_folder_path);
        // Notify to to show error
        notifyDataChanged();
        Log.i(TAG, "ImageDecoder end with error");
        return;
    }
    // Sort it
    Arrays.sort(files);
    // Put file list
    mFileList.lazySet(files);
    // Set state normal and notify
    mSize = files.length;
    notifyDataChanged();
    while (!Thread.currentThread().isInterrupted()) {
        int index;
        synchronized (mRequests) {
            if (mRequests.isEmpty()) {
                try {
                    mRequests.wait();
                } catch (InterruptedException e) {
                    // Interrupted
                    break;
                }
                continue;
            }
            index = mRequests.pop();
            mDecodingIndex.lazySet(index);
        }
        // Check index valid
        if (index < 0 || index >= files.length) {
            mDecodingIndex.lazySet(GalleryPageView.INVALID_INDEX);
            notifyPageFailed(index, GetText.getString(R.string.error_out_of_range));
            continue;
        }
        InputStream is = null;
        try {
            is = files[index].openInputStream();
            Image image = Image.decode(is, true);
            mDecodingIndex.lazySet(GalleryPageView.INVALID_INDEX);
            if (image != null) {
                notifyPageSucceed(index, image);
            } else {
                notifyPageFailed(index, GetText.getString(R.string.error_decoding_failed));
            }
        } catch (IOException e) {
            mDecodingIndex.lazySet(GalleryPageView.INVALID_INDEX);
            notifyPageFailed(index, GetText.getString(R.string.error_reading_failed));
        } finally {
            IOUtils.closeQuietly(is);
        }
        mDecodingIndex.lazySet(GalleryPageView.INVALID_INDEX);
    }
    // Clear file list
    mFileList.lazySet(null);
    Log.i(TAG, "ImageDecoder end");
}
Also used : UniFile(com.hippo.unifile.UniFile) InputStream(java.io.InputStream) IOException(java.io.IOException) Image(com.hippo.image.Image)

Example 2 with Image

use of com.hippo.image.Image in project EhViewer by seven332.

the class ZipGalleryProvider method run.

@Override
public void run() {
    ZipFile zipFile = null;
    try {
        zipFile = new ZipFile(mFile);
    } catch (ZipException e) {
        mError = GetText.getString(R.string.error_invalid_zip_file);
    } catch (FileNotFoundException e) {
        mError = GetText.getString(R.string.error_not_found);
    } catch (IOException e) {
        mError = GetText.getString(R.string.error_reading_failed);
    }
    // Check zip file null
    if (zipFile == null) {
        mSize = STATE_ERROR;
        // Notify to to show error
        notifyDataChanged();
        Log.i(TAG, "ImageDecoder end with error");
        return;
    }
    // Get all image name
    List<String> filenames = new ArrayList<>(zipFile.size());
    Enumeration<? extends ZipEntry> enumeration = zipFile.entries();
    while (enumeration.hasMoreElements()) {
        ZipEntry zipEntry = enumeration.nextElement();
        String filename = zipEntry.getName();
        if (!zipEntry.isDirectory() && StringUtils.endsWith(filename, SUPPORT_IMAGE_EXTENSIONS)) {
            filenames.add(filename);
        }
    }
    Collections.sort(filenames);
    // Update size and notify changed
    mSize = filenames.size();
    notifyDataChanged();
    while (!Thread.currentThread().isInterrupted()) {
        int index;
        synchronized (mRequests) {
            if (mRequests.isEmpty()) {
                try {
                    mRequests.wait();
                } catch (InterruptedException e) {
                    // Interrupted
                    break;
                }
                continue;
            }
            index = mRequests.pop();
            mDecodingIndex.lazySet(index);
        }
        // Check index valid
        if (index < 0 || index >= filenames.size()) {
            mDecodingIndex.lazySet(GalleryPageView.INVALID_INDEX);
            notifyPageFailed(index, GetText.getString(R.string.error_out_of_range));
            continue;
        }
        try {
            ZipEntry zipEntry = zipFile.getEntry(filenames.get(index));
            if (zipEntry != null) {
                InputStream is = zipFile.getInputStream(zipEntry);
                Image image = Image.decode(is, true);
                mDecodingIndex.lazySet(GalleryPageView.INVALID_INDEX);
                if (image != null) {
                    notifyPageSucceed(index, image);
                } else {
                    notifyPageFailed(index, GetText.getString(R.string.error_decoding_failed));
                }
            } else {
                mDecodingIndex.lazySet(GalleryPageView.INVALID_INDEX);
                notifyPageFailed(index, GetText.getString(R.string.error_reading_failed));
            }
        } catch (IOException e) {
            mDecodingIndex.lazySet(GalleryPageView.INVALID_INDEX);
            notifyPageFailed(index, GetText.getString(R.string.error_reading_failed));
        }
    }
    // Clear
    try {
        zipFile.close();
    } catch (IOException e) {
    // Ignore
    }
    Log.i(TAG, "ImageDecoder end");
}
Also used : InputStream(java.io.InputStream) ZipEntry(java.util.zip.ZipEntry) FileNotFoundException(java.io.FileNotFoundException) ArrayList(java.util.ArrayList) ZipException(java.util.zip.ZipException) IOException(java.io.IOException) Image(com.hippo.image.Image) ZipFile(java.util.zip.ZipFile)

Aggregations

Image (com.hippo.image.Image)2 IOException (java.io.IOException)2 InputStream (java.io.InputStream)2 UniFile (com.hippo.unifile.UniFile)1 FileNotFoundException (java.io.FileNotFoundException)1 ArrayList (java.util.ArrayList)1 ZipEntry (java.util.zip.ZipEntry)1 ZipException (java.util.zip.ZipException)1 ZipFile (java.util.zip.ZipFile)1