含羞草 v2.1.6版本的 MD5 值为:6eb49dcd42f2b660ff6f51c70f543d8b

以下内容为反编译后的 SVGAParser.java 源代码,内容仅作参考


package com.opensource.svgaplayer;

import android.content.Context;
import android.content.res.AssetManager;
import android.net.http.HttpResponseCache;
import android.os.Handler;
import android.os.Looper;
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
import com.huawei.hms.scankit.C0072e;
import com.opensource.svgaplayer.SVGAParser;
import com.opensource.svgaplayer.proto.MovieEntity;
import com.opensource.svgaplayer.utils.log.LogUtils;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.zip.Inflater;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import kotlin.Deprecated;
import kotlin.Metadata;
import kotlin.ReplaceWith;
import kotlin.Unit;
import kotlin.io.CloseableKt;
import kotlin.jvm.functions.Function0;
import kotlin.jvm.functions.Function1;
import kotlin.jvm.internal.DefaultConstructorMarker;
import kotlin.jvm.internal.Intrinsics;
import kotlin.jvm.internal.Ref;
import kotlin.text.StringsKt;
import org.json.JSONObject;
import tv.danmaku.ijk.media.player.IjkMediaPlayer;

@Metadata(bv = {1, 0, 3}, d1 = {"\u0000|\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0006\n\u0002\u0010\b\n\u0002\b\u0002\n\u0002\u0010\u0002\n\u0000\n\u0002\u0010\u000e\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0005\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u000b\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\u0012\n\u0002\b\u0004\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u000e\u0018\u0000 <2\u00020\u0001:\u0004<=>?B\u000f\u0012\b\u0010\u0002\u001a\u0004\u0018\u00010\u0003¢\u0006\u0002\u0010\u0004J$\u0010\u000f\u001a\u00020\u00102\u0006\u0010\u0011\u001a\u00020\u00122\b\u0010\u0013\u001a\u0004\u0018\u00010\u00142\n\b\u0002\u0010\u0015\u001a\u0004\u0018\u00010\u0016J$\u0010\u0017\u001a\u00020\u00102\u0006\u0010\u0018\u001a\u00020\u00122\b\u0010\u0013\u001a\u0004\u0018\u00010\u00142\b\u0010\u0019\u001a\u0004\u0018\u00010\u0012H\u0002JB\u0010\u001a\u001a\u00020\u00102\u0006\u0010\u001b\u001a\u00020\u001c2\u0006\u0010\u0018\u001a\u00020\u00122\b\u0010\u0013\u001a\u0004\u0018\u00010\u00142\b\b\u0002\u0010\u001d\u001a\u00020\u001e2\n\b\u0002\u0010\u0015\u001a\u0004\u0018\u00010\u00162\n\b\u0002\u0010\u0019\u001a\u0004\u0018\u00010\u0012J.\u0010\u001f\u001a\u00020\u00102\u0006\u0010\u0018\u001a\u00020\u00122\b\u0010\u0013\u001a\u0004\u0018\u00010\u00142\b\u0010\u0015\u001a\u0004\u0018\u00010\u00162\n\b\u0002\u0010\u0019\u001a\u0004\u0018\u00010\u0012J,\u0010 \u001a\n\u0012\u0004\u0012\u00020\u0010\u0018\u00010!2\u0006\u0010\"\u001a\u00020#2\b\u0010\u0013\u001a\u0004\u0018\u00010\u00142\n\b\u0002\u0010\u0015\u001a\u0004\u0018\u00010\u0016J\u0018\u0010$\u001a\u00020\u00102\u0006\u0010%\u001a\u00020&2\u0006\u0010'\u001a\u00020\u0012H\u0002J\u0012\u0010(\u001a\u0004\u0018\u00010)2\u0006\u0010*\u001a\u00020)H\u0002J\u000e\u0010+\u001a\u00020\u00102\u0006\u0010\u0002\u001a\u00020\u0003J$\u0010,\u001a\u00020\u00102\u0006\u0010-\u001a\u00020.2\b\u0010\u0013\u001a\u0004\u0018\u00010\u00142\b\u0010\u0019\u001a\u0004\u0018\u00010\u0012H\u0002J(\u0010/\u001a\u00020\u00102\n\u00100\u001a\u000601j\u0002`22\b\u0010\u0013\u001a\u0004\u0018\u00010\u00142\b\u0010\u0019\u001a\u0004\u0018\u00010\u0012H\u0002J\u0010\u00103\u001a\u00020\u001e2\u0006\u00104\u001a\u00020)H\u0002J,\u00105\u001a\u00020\u00102\u0006\u0010\u001b\u001a\u00020\u001c2\u0006\u0010\u0018\u001a\u00020\u00122\b\u0010\u0013\u001a\u0004\u0018\u00010\u00142\b\b\u0002\u0010\u001d\u001a\u00020\u001eH\u0007J\u001a\u00105\u001a\u00020\u00102\u0006\u0010\"\u001a\u00020#2\b\u0010\u0013\u001a\u0004\u0018\u00010\u0014H\u0007J\u001a\u00105\u001a\u00020\u00102\u0006\u00106\u001a\u00020\u00122\b\u0010\u0013\u001a\u0004\u0018\u00010\u0014H\u0007J\u0012\u00107\u001a\u0004\u0018\u00010)2\u0006\u0010\u001b\u001a\u00020\u001cH\u0002J\u0016\u00108\u001a\u00020\u00102\u0006\u00109\u001a\u00020\r2\u0006\u0010:\u001a\u00020\rJ\u0018\u0010;\u001a\u00020\u00102\u0006\u0010\u001b\u001a\u00020\u001c2\u0006\u0010\u0018\u001a\u00020\u0012H\u0002R\u001a\u0010\u0005\u001a\u00020\u0006X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\u0007\u0010\b\"\u0004\b\t\u0010\nR\u0010\u0010\u000b\u001a\u0004\u0018\u00010\u0003X\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\f\u001a\u00020\rX\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\u000e\u001a\u00020\rX\u0082\u000e¢\u0006\u0002\n\u0000¨\u0006@"}, d2 = {"Lcom/opensource/svgaplayer/SVGAParser;", "", "context", "Landroid/content/Context;", "(Landroid/content/Context;)V", "fileDownloader", "Lcom/opensource/svgaplayer/SVGAParser$FileDownloader;", "getFileDownloader", "()Lcom/opensource/svgaplayer/SVGAParser$FileDownloader;", "setFileDownloader", "(Lcom/opensource/svgaplayer/SVGAParser$FileDownloader;)V", "mContext", "mFrameHeight", "", "mFrameWidth", "decodeFromAssets", "", "name", "", "callback", "Lcom/opensource/svgaplayer/SVGAParser$ParseCompletion;", "playCallback", "Lcom/opensource/svgaplayer/SVGAParser$PlayCallback;", "decodeFromCacheKey", "cacheKey", "alias", "decodeFromInputStream", "inputStream", "Ljava/io/InputStream;", "closeInputStream", "", "decodeFromSVGAFileCacheKey", "decodeFromURL", "Lkotlin/Function0;", "url", "Ljava/net/URL;", "ensureUnzipSafety", "outputFile", "Ljava/io/File;", "dstDirPath", "inflate", "", "byteArray", "init", "invokeCompleteCallback", "videoItem", "Lcom/opensource/svgaplayer/SVGAVideoEntity;", "invokeErrorCallback", C0072e.a, "Ljava/lang/Exception;", "Lkotlin/Exception;", "isZipFile", "bytes", "parse", "assetsName", "readAsBytes", "setFrameSize", "frameWidth", "frameHeight", "unzip", "Companion", "FileDownloader", "ParseCompletion", "PlayCallback", BuildConfig.LIBRARY_PACKAGE_NAME}, k = 1, mv = {1, 1, 15})
public final class SVGAParser {
    private static final String TAG = "SVGAParser";
    private FileDownloader fileDownloader;
    private Context mContext;
    private volatile int mFrameHeight;
    private volatile int mFrameWidth;

    public static final Companion INSTANCE = new Companion(null);
    private static final AtomicInteger threadNum = new AtomicInteger(0);
    private static SVGAParser mShareParser = new SVGAParser(null);
    private static ExecutorService threadPoolExecutor = Executors.newCachedThreadPool(new ThreadFactory() {
        @Override
        public final Thread newThread(Runnable runnable) {
            AtomicInteger atomicInteger;
            StringBuilder sb = new StringBuilder();
            sb.append("SVGAParser-Thread-");
            atomicInteger = SVGAParser.threadNum;
            sb.append(atomicInteger.getAndIncrement());
            return new Thread(runnable, sb.toString());
        }
    });

    @Metadata(bv = {1, 0, 3}, d1 = {"\u0000\u0018\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0000\n\u0002\u0010\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\bf\u0018\u00002\u00020\u0001J\u0010\u0010\u0002\u001a\u00020\u00032\u0006\u0010\u0004\u001a\u00020\u0005H&J\b\u0010\u0006\u001a\u00020\u0003H&¨\u0006\u0007"}, d2 = {"Lcom/opensource/svgaplayer/SVGAParser$ParseCompletion;", "", "onComplete", "", "videoItem", "Lcom/opensource/svgaplayer/SVGAVideoEntity;", "onError", BuildConfig.LIBRARY_PACKAGE_NAME}, k = 1, mv = {1, 1, 15})
    public interface ParseCompletion {
        void onComplete(SVGAVideoEntity videoItem);

        void onError();
    }

    @Metadata(bv = {1, 0, 3}, d1 = {"\u0000\u001a\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0000\n\u0002\u0010\u0002\n\u0000\n\u0002\u0010 \n\u0002\u0018\u0002\n\u0000\bf\u0018\u00002\u00020\u0001J\u0016\u0010\u0002\u001a\u00020\u00032\f\u0010\u0004\u001a\b\u0012\u0004\u0012\u00020\u00060\u0005H&¨\u0006\u0007"}, d2 = {"Lcom/opensource/svgaplayer/SVGAParser$PlayCallback;", "", "onPlay", "", "file", "", "Ljava/io/File;", BuildConfig.LIBRARY_PACKAGE_NAME}, k = 1, mv = {1, 1, 15})
    public interface PlayCallback {
        void onPlay(List<? extends File> file);
    }

    public SVGAParser(Context context) {
        this.mContext = context != null ? context.getApplicationContext() : null;
        SVGACache.INSTANCE.onCreate(context);
        this.fileDownloader = new FileDownloader();
    }

    @Metadata(bv = {1, 0, 3}, d1 = {"\u0000@\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\u000b\n\u0002\b\u0005\n\u0002\u0018\u0002\n\u0002\u0010\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\b\u0016\u0018\u00002\u00020\u0001B\u0005¢\u0006\u0002\u0010\u0002J`\u0010\t\u001a\b\u0012\u0004\u0012\u00020\u000b0\n2\u0006\u0010\f\u001a\u00020\r2!\u0010\u000e\u001a\u001d\u0012\u0013\u0012\u00110\u0010¢\u0006\f\b\u0011\u0012\b\b\u0012\u0012\u0004\b\b(\u0013\u0012\u0004\u0012\u00020\u000b0\u000f2%\u0010\u0014\u001a!\u0012\u0017\u0012\u00150\u0015j\u0002`\u0016¢\u0006\f\b\u0011\u0012\b\b\u0012\u0012\u0004\b\b(\u0017\u0012\u0004\u0012\u00020\u000b0\u000fH\u0016R\u001a\u0010\u0003\u001a\u00020\u0004X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\u0005\u0010\u0006\"\u0004\b\u0007\u0010\b¨\u0006\u0018"}, d2 = {"Lcom/opensource/svgaplayer/SVGAParser$FileDownloader;", "", "()V", "noCache", "", "getNoCache", "()Z", "setNoCache", "(Z)V", "resume", "Lkotlin/Function0;", "", "url", "Ljava/net/URL;", "complete", "Lkotlin/Function1;", "Ljava/io/InputStream;", "Lkotlin/ParameterName;", "name", "inputStream", "failure", "Ljava/lang/Exception;", "Lkotlin/Exception;", C0072e.a, BuildConfig.LIBRARY_PACKAGE_NAME}, k = 1, mv = {1, 1, 15})
    public static class FileDownloader {
        private boolean noCache;

        public final boolean getNoCache() {
            return this.noCache;
        }

        public final void setNoCache(boolean z) {
            this.noCache = z;
        }

        public Function0<Unit> resume(final URL url, final Function1<? super InputStream, Unit> complete, final Function1<? super Exception, Unit> failure) {
            Intrinsics.checkParameterIsNotNull(url, "url");
            Intrinsics.checkParameterIsNotNull(complete, "complete");
            Intrinsics.checkParameterIsNotNull(failure, "failure");
            final Ref.BooleanRef booleanRef = new Ref.BooleanRef();
            booleanRef.element = false;
            Function0<Unit> function0 = new Function0<Unit>() {
                {
                    super(0);
                }

                @Override
                public Unit invoke() {
                    invoke2();
                    return Unit.INSTANCE;
                }

                public final void invoke2() {
                    Ref.BooleanRef.this.element = true;
                }
            };
            SVGAParser.INSTANCE.getThreadPoolExecutor$com_opensource_svgaplayer().execute(new Runnable() {
                @Override
                public final void run() {
                    try {
                        LogUtils.INSTANCE.info("SVGAParser", "================ svga file download start ================");
                        if (HttpResponseCache.getInstalled() == null && !SVGAParser.FileDownloader.this.getNoCache()) {
                            LogUtils.INSTANCE.error("SVGAParser", "SVGAParser can not handle cache before install HttpResponseCache. see https://github.com/yyued/SVGAPlayer-Android#cache");
                            LogUtils.INSTANCE.error("SVGAParser", "在配置 HttpResponseCache 前 SVGAParser 无法缓存. 查看 https://github.com/yyued/SVGAPlayer-Android#cache ");
                        }
                        URLConnection openConnection = url.openConnection();
                        if (!(openConnection instanceof HttpURLConnection)) {
                            openConnection = null;
                        }
                        HttpURLConnection httpURLConnection = (HttpURLConnection) openConnection;
                        if (httpURLConnection == null) {
                            return;
                        }
                        httpURLConnection.setConnectTimeout(AccessibilityNodeInfoCompat.EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_MAX_LENGTH);
                        httpURLConnection.setRequestMethod("GET");
                        httpURLConnection.setRequestProperty("Connection", "close");
                        httpURLConnection.connect();
                        ByteArrayInputStream inputStream = httpURLConnection.getInputStream();
                        try {
                            InputStream inputStream2 = inputStream;
                            inputStream = new ByteArrayOutputStream();
                            try {
                                ByteArrayOutputStream byteArrayOutputStream = inputStream;
                                byte[] bArr = new byte[4096];
                                while (true) {
                                    if (booleanRef.element) {
                                        LogUtils.INSTANCE.warn("SVGAParser", "================ svga file download canceled ================");
                                        break;
                                    }
                                    int read = inputStream2.read(bArr, 0, 4096);
                                    if (read == -1) {
                                        break;
                                    } else {
                                        byteArrayOutputStream.write(bArr, 0, read);
                                    }
                                }
                                if (booleanRef.element) {
                                    LogUtils.INSTANCE.warn("SVGAParser", "================ svga file download canceled ================");
                                    CloseableKt.closeFinally(inputStream, null);
                                    CloseableKt.closeFinally(inputStream, null);
                                    return;
                                }
                                inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
                                try {
                                    LogUtils.INSTANCE.info("SVGAParser", "================ svga file download complete ================");
                                    complete.invoke(inputStream);
                                    Unit unit = Unit.INSTANCE;
                                    CloseableKt.closeFinally(inputStream, null);
                                    Unit unit2 = Unit.INSTANCE;
                                    CloseableKt.closeFinally(inputStream, null);
                                    Unit unit3 = Unit.INSTANCE;
                                    CloseableKt.closeFinally(inputStream, null);
                                } finally {
                                }
                            } finally {
                            }
                        } finally {
                        }
                    } catch (Exception e) {
                        LogUtils.INSTANCE.error("SVGAParser", "================ svga file download fail ================");
                        LogUtils.INSTANCE.error("SVGAParser", "error: " + e.getMessage());
                        e.printStackTrace();
                        failure.invoke(e);
                    }
                }
            });
            return function0;
        }
    }

    public final FileDownloader getFileDownloader() {
        return this.fileDownloader;
    }

    public final void setFileDownloader(FileDownloader fileDownloader) {
        Intrinsics.checkParameterIsNotNull(fileDownloader, "<set-?>");
        this.fileDownloader = fileDownloader;
    }

    @Metadata(bv = {1, 0, 3}, d1 = {"\u00004\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\u000e\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0006\n\u0002\u0010\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\b\u0086\u0003\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002J\u000e\u0010\u0010\u001a\u00020\u00112\u0006\u0010\u0012\u001a\u00020\u0013J\u0006\u0010\u0014\u001a\u00020\u0006R\u000e\u0010\u0003\u001a\u00020\u0004X\u0082T¢\u0006\u0002\n\u0000R\u000e\u0010\u0005\u001a\u00020\u0006X\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\u0007\u001a\u00020\bX\u0082\u0004¢\u0006\u0002\n\u0000R\"\u0010\t\u001a\n \u000b*\u0004\u0018\u00010\n0\nX\u0080\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\f\u0010\r\"\u0004\b\u000e\u0010\u000f¨\u0006\u0015"}, d2 = {"Lcom/opensource/svgaplayer/SVGAParser$Companion;", "", "()V", "TAG", "", "mShareParser", "Lcom/opensource/svgaplayer/SVGAParser;", "threadNum", "Ljava/util/concurrent/atomic/AtomicInteger;", "threadPoolExecutor", "Ljava/util/concurrent/ExecutorService;", "kotlin.jvm.PlatformType", "getThreadPoolExecutor$com_opensource_svgaplayer", "()Ljava/util/concurrent/ExecutorService;", "setThreadPoolExecutor$com_opensource_svgaplayer", "(Ljava/util/concurrent/ExecutorService;)V", "setThreadPoolExecutor", "", "executor", "Ljava/util/concurrent/ThreadPoolExecutor;", "shareParser", BuildConfig.LIBRARY_PACKAGE_NAME}, k = 1, mv = {1, 1, 15})
    public static final class Companion {
        private Companion() {
        }

        public Companion(DefaultConstructorMarker defaultConstructorMarker) {
            this();
        }

        public final ExecutorService getThreadPoolExecutor$com_opensource_svgaplayer() {
            return SVGAParser.threadPoolExecutor;
        }

        public final void setThreadPoolExecutor$com_opensource_svgaplayer(ExecutorService executorService) {
            SVGAParser.threadPoolExecutor = executorService;
        }

        public final void setThreadPoolExecutor(ThreadPoolExecutor executor) {
            Intrinsics.checkParameterIsNotNull(executor, "executor");
            setThreadPoolExecutor$com_opensource_svgaplayer(executor);
        }

        public final SVGAParser shareParser() {
            return SVGAParser.mShareParser;
        }
    }

    public final void init(Context context) {
        Intrinsics.checkParameterIsNotNull(context, "context");
        this.mContext = context.getApplicationContext();
        SVGACache.INSTANCE.onCreate(this.mContext);
    }

    public final void setFrameSize(int frameWidth, int frameHeight) {
        this.mFrameWidth = frameWidth;
        this.mFrameHeight = frameHeight;
    }

    public static void decodeFromAssets$default(SVGAParser sVGAParser, String str, ParseCompletion parseCompletion, PlayCallback playCallback, int i, Object obj) {
        if ((i & 4) != 0) {
            playCallback = null;
        }
        sVGAParser.decodeFromAssets(str, parseCompletion, playCallback);
    }

    public final void decodeFromAssets(final String name, final ParseCompletion callback, final PlayCallback playCallback) {
        Intrinsics.checkParameterIsNotNull(name, "name");
        if (this.mContext == null) {
            LogUtils.INSTANCE.error(TAG, "在配置 SVGAParser context 前, 无法解析 SVGA 文件。");
            return;
        }
        LogUtils.INSTANCE.info(TAG, "================ decode " + name + " from assets ================");
        threadPoolExecutor.execute(new Runnable() {
            @Override
            public final void run() {
                Context context;
                AssetManager assets;
                InputStream open;
                try {
                    context = SVGAParser.this.mContext;
                    if (context == null || (assets = context.getAssets()) == null || (open = assets.open(name)) == null) {
                        return;
                    }
                    SVGAParser.this.decodeFromInputStream(open, SVGACache.INSTANCE.buildCacheKey("file:///assets/" + name), callback, true, playCallback, name);
                } catch (Exception e) {
                    SVGAParser.this.invokeErrorCallback(e, callback, name);
                }
            }
        });
    }

    public static Function0 decodeFromURL$default(SVGAParser sVGAParser, URL url, ParseCompletion parseCompletion, PlayCallback playCallback, int i, Object obj) {
        if ((i & 4) != 0) {
            playCallback = null;
        }
        return sVGAParser.decodeFromURL(url, parseCompletion, playCallback);
    }

    public final Function0<Unit> decodeFromURL(final URL url, final ParseCompletion callback, final PlayCallback playCallback) {
        Intrinsics.checkParameterIsNotNull(url, "url");
        if (this.mContext == null) {
            LogUtils.INSTANCE.error(TAG, "在配置 SVGAParser context 前, 无法解析 SVGA 文件。");
            return null;
        }
        final String url2 = url.toString();
        Intrinsics.checkExpressionValueIsNotNull(url2, "url.toString()");
        LogUtils.INSTANCE.info(TAG, "================ decode from url: " + url2 + " ================");
        final String buildCacheKey = SVGACache.INSTANCE.buildCacheKey(url);
        if (SVGACache.INSTANCE.isCached(buildCacheKey)) {
            LogUtils.INSTANCE.info(TAG, "this url cached");
            threadPoolExecutor.execute(new Runnable() {
                @Override
                public final void run() {
                    if (SVGACache.INSTANCE.isDefaultCache()) {
                        SVGAParser.this.decodeFromCacheKey(buildCacheKey, callback, url2);
                    } else {
                        SVGAParser.this.decodeFromSVGAFileCacheKey(buildCacheKey, callback, playCallback, url2);
                    }
                }
            });
            return null;
        }
        LogUtils.INSTANCE.info(TAG, "no cached, prepare to download");
        return this.fileDownloader.resume(url, new Function1<InputStream, Unit>() {
            {
                super(1);
            }

            @Override
            public Unit invoke(InputStream inputStream) {
                invoke2(inputStream);
                return Unit.INSTANCE;
            }

            public final void invoke2(InputStream it) {
                Intrinsics.checkParameterIsNotNull(it, "it");
                SVGAParser.this.decodeFromInputStream(it, buildCacheKey, callback, false, playCallback, url2);
            }
        }, new Function1<Exception, Unit>() {
            {
                super(1);
            }

            @Override
            public Unit invoke(Exception exc) {
                invoke2(exc);
                return Unit.INSTANCE;
            }

            public final void invoke2(Exception it) {
                Intrinsics.checkParameterIsNotNull(it, "it");
                LogUtils.INSTANCE.error("SVGAParser", "================ svga file: " + url + " download fail ================");
                SVGAParser.this.invokeErrorCallback(it, callback, url2);
            }
        });
    }

    public static void decodeFromSVGAFileCacheKey$default(SVGAParser sVGAParser, String str, ParseCompletion parseCompletion, PlayCallback playCallback, String str2, int i, Object obj) {
        if ((i & 8) != 0) {
            str2 = null;
        }
        sVGAParser.decodeFromSVGAFileCacheKey(str, parseCompletion, playCallback, str2);
    }

    public final void decodeFromSVGAFileCacheKey(String cacheKey, ParseCompletion callback, PlayCallback playCallback, String alias) {
        Intrinsics.checkParameterIsNotNull(cacheKey, "cacheKey");
        threadPoolExecutor.execute(new SVGAParser$decodeFromSVGAFileCacheKey$1(this, alias, cacheKey, callback, playCallback));
    }

    public static void decodeFromInputStream$default(SVGAParser sVGAParser, InputStream inputStream, String str, ParseCompletion parseCompletion, boolean z, PlayCallback playCallback, String str2, int i, Object obj) {
        PlayCallback playCallback2;
        String str3;
        boolean z2 = (i & 8) != 0 ? false : z;
        if ((i & 16) != 0) {
            playCallback2 = null;
        } else {
            playCallback2 = playCallback;
        }
        if ((i & 32) != 0) {
            str3 = null;
        } else {
            str3 = str2;
        }
        sVGAParser.decodeFromInputStream(inputStream, str, parseCompletion, z2, playCallback2, str3);
    }

    public final void decodeFromInputStream(InputStream inputStream, String cacheKey, ParseCompletion callback, boolean closeInputStream, PlayCallback playCallback, String alias) {
        Intrinsics.checkParameterIsNotNull(inputStream, "inputStream");
        Intrinsics.checkParameterIsNotNull(cacheKey, "cacheKey");
        if (this.mContext == null) {
            LogUtils.INSTANCE.error(TAG, "在配置 SVGAParser context 前, 无法解析 SVGA 文件。");
            return;
        }
        LogUtils.INSTANCE.info(TAG, "================ decode " + alias + " from input stream ================");
        threadPoolExecutor.execute(new SVGAParser$decodeFromInputStream$1(this, inputStream, cacheKey, callback, alias, playCallback, closeInputStream));
    }

    @Deprecated(message = "This method has been deprecated from 2.4.0.", replaceWith = @ReplaceWith(expression = "this.decodeFromAssets(assetsName, callback)", imports = {}))
    public final void parse(String assetsName, ParseCompletion callback) {
        Intrinsics.checkParameterIsNotNull(assetsName, "assetsName");
        decodeFromAssets(assetsName, callback, null);
    }

    @Deprecated(message = "This method has been deprecated from 2.4.0.", replaceWith = @ReplaceWith(expression = "this.decodeFromURL(url, callback)", imports = {}))
    public final void parse(URL url, ParseCompletion callback) {
        Intrinsics.checkParameterIsNotNull(url, "url");
        decodeFromURL(url, callback, null);
    }

    public static void parse$default(SVGAParser sVGAParser, InputStream inputStream, String str, ParseCompletion parseCompletion, boolean z, int i, Object obj) {
        if ((i & 8) != 0) {
            z = false;
        }
        sVGAParser.parse(inputStream, str, parseCompletion, z);
    }

    @Deprecated(message = "This method has been deprecated from 2.4.0.", replaceWith = @ReplaceWith(expression = "this.decodeFromInputStream(inputStream, cacheKey, callback, closeInputStream)", imports = {}))
    public final void parse(InputStream inputStream, String cacheKey, ParseCompletion callback, boolean closeInputStream) {
        Intrinsics.checkParameterIsNotNull(inputStream, "inputStream");
        Intrinsics.checkParameterIsNotNull(cacheKey, "cacheKey");
        decodeFromInputStream$default(this, inputStream, cacheKey, callback, closeInputStream, null, null, 32, null);
    }

    public final void invokeCompleteCallback(final SVGAVideoEntity videoItem, final ParseCompletion callback, final String alias) {
        new Handler(Looper.getMainLooper()).post(new Runnable() {
            @Override
            public final void run() {
                LogUtils.INSTANCE.info("SVGAParser", "================ " + alias + " parser complete ================");
                SVGAParser.ParseCompletion parseCompletion = callback;
                if (parseCompletion != null) {
                    parseCompletion.onComplete(videoItem);
                }
            }
        });
    }

    public final void invokeErrorCallback(Exception e, final ParseCompletion callback, String alias) {
        e.printStackTrace();
        LogUtils.INSTANCE.error(TAG, "================ " + alias + " parser error ================");
        LogUtils.INSTANCE.error(TAG, alias + " parse error", e);
        new Handler(Looper.getMainLooper()).post(new Runnable() {
            @Override
            public final void run() {
                SVGAParser.ParseCompletion parseCompletion = SVGAParser.ParseCompletion.this;
                if (parseCompletion != null) {
                    parseCompletion.onError();
                }
            }
        });
    }

    public final void decodeFromCacheKey(String cacheKey, ParseCompletion callback, String alias) {
        FileInputStream fileInputStream;
        LogUtils.INSTANCE.info(TAG, "================ decode " + alias + " from cache ================");
        LogUtils.INSTANCE.debug(TAG, "decodeFromCacheKey called with cacheKey : " + cacheKey);
        if (this.mContext == null) {
            LogUtils.INSTANCE.error(TAG, "在配置 SVGAParser context 前, 无法解析 SVGA 文件。");
            return;
        }
        try {
            File buildCacheDir = SVGACache.INSTANCE.buildCacheDir(cacheKey);
            File file = new File(buildCacheDir, "movie.binary");
            if (!file.isFile()) {
                file = null;
            }
            if (file != null) {
                try {
                    LogUtils.INSTANCE.info(TAG, "binary change to entity");
                    fileInputStream = new FileInputStream(file);
                    try {
                        LogUtils.INSTANCE.info(TAG, "binary change to entity success");
                        MovieEntity decode = MovieEntity.ADAPTER.decode(fileInputStream);
                        Intrinsics.checkExpressionValueIsNotNull(decode, "MovieEntity.ADAPTER.decode(it)");
                        invokeCompleteCallback(new SVGAVideoEntity(decode, buildCacheDir, this.mFrameWidth, this.mFrameHeight), callback, alias);
                        Unit unit = Unit.INSTANCE;
                        CloseableKt.closeFinally(fileInputStream, null);
                    } finally {
                        try {
                            throw th;
                        } finally {
                        }
                    }
                } catch (Exception e) {
                    LogUtils.INSTANCE.error(TAG, "binary change to entity fail", e);
                    buildCacheDir.delete();
                    file.delete();
                    throw e;
                }
            }
            File file2 = new File(buildCacheDir, "movie.spec");
            if (!file2.isFile()) {
                file2 = null;
            }
            if (file2 == null) {
                return;
            }
            try {
                LogUtils.INSTANCE.info(TAG, "spec change to entity");
                fileInputStream = new FileInputStream(file2);
                try {
                    FileInputStream fileInputStream2 = fileInputStream;
                    fileInputStream = new ByteArrayOutputStream();
                    try {
                        ByteArrayOutputStream byteArrayOutputStream = fileInputStream;
                        byte[] bArr = new byte[2048];
                        while (true) {
                            int read = fileInputStream2.read(bArr, 0, 2048);
                            if (read != -1) {
                                byteArrayOutputStream.write(bArr, 0, read);
                            } else {
                                JSONObject jSONObject = new JSONObject(byteArrayOutputStream.toString());
                                LogUtils.INSTANCE.info(TAG, "spec change to entity success");
                                invokeCompleteCallback(new SVGAVideoEntity(jSONObject, buildCacheDir, this.mFrameWidth, this.mFrameHeight), callback, alias);
                                Unit unit2 = Unit.INSTANCE;
                                CloseableKt.closeFinally(fileInputStream, null);
                                Unit unit3 = Unit.INSTANCE;
                                CloseableKt.closeFinally(fileInputStream, null);
                                return;
                            }
                        }
                    } finally {
                    }
                } finally {
                }
            } catch (Exception e2) {
                LogUtils.INSTANCE.error(TAG, alias + " movie.spec change to entity fail", e2);
                buildCacheDir.delete();
                file2.delete();
                throw e2;
            }
        } catch (Exception e3) {
            invokeErrorCallback(e3, callback, alias);
        }
    }

    public final byte[] readAsBytes(InputStream inputStream) {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        try {
            ByteArrayOutputStream byteArrayOutputStream2 = byteArrayOutputStream;
            byte[] bArr = new byte[2048];
            while (true) {
                int read = inputStream.read(bArr, 0, 2048);
                if (read > 0) {
                    byteArrayOutputStream2.write(bArr, 0, read);
                } else {
                    byte[] byteArray = byteArrayOutputStream2.toByteArray();
                    CloseableKt.closeFinally(byteArrayOutputStream, null);
                    return byteArray;
                }
            }
        } finally {
        }
    }

    public final byte[] inflate(byte[] byteArray) {
        Inflater inflater = new Inflater();
        inflater.setInput(byteArray, 0, byteArray.length);
        byte[] bArr = new byte[2048];
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        try {
            ByteArrayOutputStream byteArrayOutputStream2 = byteArrayOutputStream;
            while (true) {
                int inflate = inflater.inflate(bArr, 0, 2048);
                if (inflate > 0) {
                    byteArrayOutputStream2.write(bArr, 0, inflate);
                } else {
                    inflater.end();
                    byte[] byteArray2 = byteArrayOutputStream2.toByteArray();
                    CloseableKt.closeFinally(byteArrayOutputStream, null);
                    return byteArray2;
                }
            }
        } finally {
        }
    }

    public final boolean isZipFile(byte[] bytes) {
        return bytes.length > 4 && bytes[0] == 80 && bytes[1] == 75 && bytes[2] == 3 && bytes[3] == 4;
    }

    public final void unzip(InputStream inputStream, String cacheKey) {
        LogUtils.INSTANCE.info(TAG, "================ unzip prepare ================");
        File buildCacheDir = SVGACache.INSTANCE.buildCacheDir(cacheKey);
        buildCacheDir.mkdirs();
        try {
            FileOutputStream bufferedInputStream = new BufferedInputStream(inputStream);
            try {
                bufferedInputStream = new ZipInputStream(bufferedInputStream);
                try {
                    ZipInputStream zipInputStream = bufferedInputStream;
                    while (true) {
                        ZipEntry nextEntry = zipInputStream.getNextEntry();
                        if (nextEntry != null) {
                            String name = nextEntry.getName();
                            Intrinsics.checkExpressionValueIsNotNull(name, "zipItem.name");
                            if (!StringsKt.contains$default((CharSequence) name, (CharSequence) "../", false, 2, (Object) null)) {
                                String name2 = nextEntry.getName();
                                Intrinsics.checkExpressionValueIsNotNull(name2, "zipItem.name");
                                if (!StringsKt.contains$default((CharSequence) name2, (CharSequence) "/", false, 2, (Object) null)) {
                                    File file = new File(buildCacheDir, nextEntry.getName());
                                    String absolutePath = buildCacheDir.getAbsolutePath();
                                    Intrinsics.checkExpressionValueIsNotNull(absolutePath, "cacheDir.absolutePath");
                                    ensureUnzipSafety(file, absolutePath);
                                    bufferedInputStream = new FileOutputStream(file);
                                    try {
                                        FileOutputStream fileOutputStream = bufferedInputStream;
                                        byte[] bArr = new byte[2048];
                                        while (true) {
                                            int read = zipInputStream.read(bArr);
                                            if (read <= 0) {
                                                break;
                                            } else {
                                                fileOutputStream.write(bArr, 0, read);
                                            }
                                        }
                                        Unit unit = Unit.INSTANCE;
                                        CloseableKt.closeFinally(bufferedInputStream, null);
                                        LogUtils.INSTANCE.error(TAG, "================ unzip complete ================");
                                        zipInputStream.closeEntry();
                                    } finally {
                                    }
                                }
                            }
                        } else {
                            Unit unit2 = Unit.INSTANCE;
                            CloseableKt.closeFinally(bufferedInputStream, null);
                            Unit unit3 = Unit.INSTANCE;
                            CloseableKt.closeFinally(bufferedInputStream, null);
                            return;
                        }
                    }
                } finally {
                }
            } finally {
            }
        } catch (Exception e) {
            LogUtils.INSTANCE.error(TAG, "================ unzip error ================");
            Exception exc = e;
            LogUtils.INSTANCE.error(TAG, IjkMediaPlayer.OnNativeInvokeListener.ARG_ERROR, exc);
            SVGACache sVGACache = SVGACache.INSTANCE;
            String absolutePath2 = buildCacheDir.getAbsolutePath();
            Intrinsics.checkExpressionValueIsNotNull(absolutePath2, "cacheDir.absolutePath");
            sVGACache.clearDir$com_opensource_svgaplayer(absolutePath2);
            buildCacheDir.delete();
            throw exc;
        }
    }

    private final void ensureUnzipSafety(File outputFile, String dstDirPath) {
        String dstDirCanonicalPath = new File(dstDirPath).getCanonicalPath();
        String outputFileCanonicalPath = outputFile.getCanonicalPath();
        Intrinsics.checkExpressionValueIsNotNull(outputFileCanonicalPath, "outputFileCanonicalPath");
        Intrinsics.checkExpressionValueIsNotNull(dstDirCanonicalPath, "dstDirCanonicalPath");
        if (StringsKt.startsWith$default(outputFileCanonicalPath, dstDirCanonicalPath, false, 2, (Object) null)) {
            return;
        }
        throw new IOException("Found Zip Path Traversal Vulnerability with " + dstDirCanonicalPath);
    }
}