Downloader.smali

.class public Lcom/h/m/Downloader;
.super Ljava/lang/Object;


# instance fields
.field private mHttpConnection:Lcom/h/r/HttpConnection;


# direct methods
.method public constructor <init>(Lcom/h/r/NetworkExecutor;)V
    .registers 3

    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    new-instance v0, Lcom/h/r/HttpConnection;

    invoke-direct {v0, p1}, Lcom/h/r/HttpConnection;-><init>(Lcom/h/r/NetworkExecutor;)V

    iput-object v0, p0, Lcom/h/m/Downloader;->mHttpConnection:Lcom/h/r/HttpConnection;

    return-void
.end method

.method private getConnectionRetry(Lcom/h/m/DownloadRequest;)Lcom/h/r/Connection;
    .registers 5

    iget-object v0, p0, Lcom/h/m/Downloader;->mHttpConnection:Lcom/h/r/HttpConnection;

    invoke-virtual {v0, p1}, Lcom/h/r/HttpConnection;->getConnection(Lcom/h/r/BasicRequest;)Lcom/h/r/Connection;

    move-result-object v0

    invoke-virtual {v0}, Lcom/h/r/Connection;->exception()Ljava/lang/Exception;

    move-result-object v1

    if-eqz v1, :cond_d

    throw v1

    :cond_d
    invoke-virtual {v0}, Lcom/h/r/Connection;->responseHeaders()Lcom/h/r/Headers;

    move-result-object v1

    invoke-virtual {v1}, Lcom/h/r/Headers;->getResponseCode()I

    move-result v1

    const/16 v2, 0x1a0

    if-ne v1, v2, :cond_25

    const-string/jumbo v0, "Range"

    invoke-virtual {p1, v0}, Lcom/h/m/DownloadRequest;->removeHeader(Ljava/lang/String;)Lcom/h/r/BasicRequest;

    iget-object v0, p0, Lcom/h/m/Downloader;->mHttpConnection:Lcom/h/r/HttpConnection;

    invoke-virtual {v0, p1}, Lcom/h/r/HttpConnection;->getConnection(Lcom/h/r/BasicRequest;)Lcom/h/r/Connection;

    move-result-object v0

    :cond_25
    return-object v0
.end method

.method private getRealFileName(Lcom/h/m/DownloadRequest;Lcom/h/r/Headers;)Ljava/lang/String;
    .registers 6

    const/4 v0, 0x0

    invoke-virtual {p2}, Lcom/h/r/Headers;->getContentDisposition()Ljava/lang/String;

    move-result-object v1

    invoke-static {v1}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z

    move-result v2

    if-nez v2, :cond_3d

    const-string/jumbo v2, "filename"

    invoke-static {v1, v2, v0}, Lcom/h/q/HeaderUtils;->parseHeadValue(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;

    move-result-object v0

    invoke-static {v0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z

    move-result v1

    if-nez v1, :cond_3d

    :try_start_18
    invoke-virtual {p1}, Lcom/h/m/DownloadRequest;->getParamsEncoding()Ljava/lang/String;

    move-result-object v1

    invoke-static {v0, v1}, Ljava/net/URLDecoder;->decode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    :try_end_1f
    .catch Ljava/io/UnsupportedEncodingException; {:try_start_18 .. :try_end_1f} :catch_6b

    move-result-object v0

    :goto_20
    const-string/jumbo v1, "\""

    invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z

    move-result v1

    if-eqz v1, :cond_3d

    const-string/jumbo v1, "\""

    invoke-virtual {v0, v1}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z

    move-result v1

    if-eqz v1, :cond_3d

    const/4 v1, 0x1

    invoke-virtual {v0}, Ljava/lang/String;->length()I

    move-result v2

    add-int/lit8 v2, v2, -0x1

    invoke-virtual {v0, v1, v2}, Ljava/lang/String;->substring(II)Ljava/lang/String;

    move-result-object v0

    :cond_3d
    invoke-static {v0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z

    move-result v1

    if-eqz v1, :cond_5d

    invoke-virtual {p1}, Lcom/h/m/DownloadRequest;->url()Ljava/lang/String;

    move-result-object v0

    invoke-static {v0}, Ljava/net/URI;->create(Ljava/lang/String;)Ljava/net/URI;

    move-result-object v1

    invoke-virtual {v1}, Ljava/net/URI;->getPath()Ljava/lang/String;

    move-result-object v1

    invoke-static {v1}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z

    move-result v2

    if-eqz v2, :cond_5e

    invoke-virtual {v0}, Ljava/lang/String;->hashCode()I

    move-result v0

    invoke-static {v0}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;

    move-result-object v0

    :cond_5d
    :goto_5d
    return-object v0

    :cond_5e
    const-string/jumbo v0, "/"

    invoke-virtual {v1, v0}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;

    move-result-object v0

    array-length v1, v0

    add-int/lit8 v1, v1, -0x1

    aget-object v0, v0, v1

    goto :goto_5d

    :catch_6b
    move-exception v1

    goto :goto_20
.end method

.method private validateDevice(Ljava/lang/String;)V
    .registers 5

    invoke-static {}, Lcom/h/q/NetUtils;->isNetworkAvailable()Z

    move-result v0

    if-nez v0, :cond_f

    new-instance v0, Lcom/h/n/NetworkError;

    const-string/jumbo v1, "Network is not available, please check network and permission: INTERNET, ACCESS_WIFI_STATE, ACCESS_NETWORK_STATE."

    invoke-direct {v0, v1}, Lcom/h/n/NetworkError;-><init>(Ljava/lang/String;)V

    throw v0

    :cond_f
    invoke-static {p1}, Lcom/h/q/IOUtils;->createFolder(Ljava/lang/String;)Z

    move-result v0

    if-nez v0, :cond_2b

    new-instance v0, Lcom/h/n/StorageReadWriteError;

    new-instance v1, Ljava/lang/StringBuilder;

    const-string/jumbo v2, "SD card isn\'t available, please check SD card and permission: WRITE_EXTERNAL_STORAGE.\nYou must pay attention to Android6.0 RunTime Permissions: https://github.com/yanzhenjie/AndPermission.\nFailed to create folder: "

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v0, v1}, Lcom/h/n/StorageReadWriteError;-><init>(Ljava/lang/String;)V

    throw v0

    :cond_2b
    return-void
.end method

.method private validateParam(Lcom/h/m/DownloadRequest;Lcom/h/m/DownloadListener;)V
    .registers 5

    if-nez p1, :cond_b

    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string/jumbo v1, "DownloadRequest == null."

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    :cond_b
    if-nez p2, :cond_16

    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string/jumbo v1, "DownloadListener == null."

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    :cond_16
    return-void
.end method


# virtual methods
.method public download(ILcom/h/m/DownloadRequest;Lcom/h/m/DownloadListener;)V
    .registers 38

    move-object/from16 v0, p0

    move-object/from16 v1, p2

    move-object/from16 v2, p3

    invoke-direct {v0, v1, v2}, Lcom/h/m/Downloader;->validateParam(Lcom/h/m/DownloadRequest;Lcom/h/m/DownloadListener;)V

    const/4 v7, 0x0

    const/4 v12, 0x0

    invoke-virtual/range {p2 .. p2}, Lcom/h/m/DownloadRequest;->getFileDir()Ljava/lang/String;

    move-result-object v5

    invoke-virtual/range {p2 .. p2}, Lcom/h/m/DownloadRequest;->getFileName()Ljava/lang/String;

    move-result-object v8

    :try_start_13
    invoke-static {v5}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z

    move-result v4

    if-eqz v4, :cond_580

    invoke-static {}, Lcom/h/r/NoHttp;->getContext()Landroid/content/Context;

    move-result-object v4

    invoke-virtual {v4}, Landroid/content/Context;->getFilesDir()Ljava/io/File;

    move-result-object v4

    invoke-virtual {v4}, Ljava/io/File;->getAbsolutePath()Ljava/lang/String;
    :try_end_24
    .catch Ljava/net/MalformedURLException; {:try_start_13 .. :try_end_24} :catch_49
    .catch Ljava/net/UnknownHostException; {:try_start_13 .. :try_end_24} :catch_56e
    .catch Ljava/net/SocketTimeoutException; {:try_start_13 .. :try_end_24} :catch_564
    .catch Ljava/io/IOException; {:try_start_13 .. :try_end_24} :catch_54a
    .catch Ljava/lang/Exception; {:try_start_13 .. :try_end_24} :catch_506
    .catchall {:try_start_13 .. :try_end_24} :catchall_52f

    move-result-object v29

    :goto_25
    :try_start_25
    move-object/from16 v0, p0

    move-object/from16 v1, v29

    invoke-direct {v0, v1}, Lcom/h/m/Downloader;->validateDevice(Ljava/lang/String;)V

    const-string/jumbo v4, "Range"

    move-object/from16 v0, p2

    invoke-virtual {v0, v4}, Lcom/h/m/DownloadRequest;->removeHeader(Ljava/lang/String;)Lcom/h/r/BasicRequest;

    invoke-static {v8}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z

    move-result v4

    if-eqz v4, :cond_16d

    move-object/from16 v0, p0

    move-object/from16 v1, p2

    invoke-direct {v0, v1}, Lcom/h/m/Downloader;->getConnectionRetry(Lcom/h/m/DownloadRequest;)Lcom/h/r/Connection;
    :try_end_41
    .catch Ljava/net/MalformedURLException; {:try_start_25 .. :try_end_41} :catch_49
    .catch Ljava/net/UnknownHostException; {:try_start_25 .. :try_end_41} :catch_56e
    .catch Ljava/net/SocketTimeoutException; {:try_start_25 .. :try_end_41} :catch_564
    .catch Ljava/io/IOException; {:try_start_25 .. :try_end_41} :catch_54f
    .catch Ljava/lang/Exception; {:try_start_25 .. :try_end_41} :catch_506
    .catchall {:try_start_25 .. :try_end_41} :catchall_52f

    move-result-object v7

    :try_start_42
    invoke-virtual {v7}, Lcom/h/r/Connection;->exception()Ljava/lang/Exception;

    move-result-object v4

    if-eqz v4, :cond_6b

    throw v4
    :try_end_49
    .catch Ljava/net/MalformedURLException; {:try_start_42 .. :try_end_49} :catch_49
    .catch Ljava/net/UnknownHostException; {:try_start_42 .. :try_end_49} :catch_dd
    .catch Ljava/net/SocketTimeoutException; {:try_start_42 .. :try_end_49} :catch_1d0
    .catch Ljava/io/IOException; {:try_start_42 .. :try_end_49} :catch_556
    .catch Ljava/lang/Exception; {:try_start_42 .. :try_end_49} :catch_540
    .catchall {:try_start_42 .. :try_end_49} :catchall_533

    :catch_49
    move-exception v4

    move-object v5, v12

    :goto_4b
    :try_start_4b
    invoke-static {v4}, Lcom/h/r/Logger;->e(Ljava/lang/Throwable;)V

    new-instance v6, Lcom/h/n/URLError;

    invoke-virtual {v4}, Ljava/net/MalformedURLException;->getMessage()Ljava/lang/String;

    move-result-object v4

    invoke-direct {v6, v4}, Lcom/h/n/URLError;-><init>(Ljava/lang/String;)V

    move-object/from16 v0, p3

    move/from16 v1, p1

    invoke-interface {v0, v1, v6}, Lcom/h/m/DownloadListener;->onDownloadError(ILjava/lang/Exception;)V
    :try_end_5e
    .catchall {:try_start_4b .. :try_end_5e} :catchall_53b

    const-string/jumbo v4, "----------Response End----------"

    invoke-static {v4}, Lcom/h/r/Logger;->i(Ljava/lang/Object;)V

    invoke-static {v5}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    invoke-static {v7}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    :goto_6a
    return-void

    :cond_6b
    :try_start_6b
    invoke-virtual {v7}, Lcom/h/r/Connection;->responseHeaders()Lcom/h/r/Headers;

    move-result-object v6

    move-object/from16 v0, p0

    move-object/from16 v1, p2

    invoke-direct {v0, v1, v6}, Lcom/h/m/Downloader;->getRealFileName(Lcom/h/m/DownloadRequest;Lcom/h/r/Headers;)Ljava/lang/String;

    move-result-object v9

    new-instance v8, Ljava/io/File;

    new-instance v4, Ljava/lang/StringBuilder;

    invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V

    invoke-virtual {v4, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v4

    const-string/jumbo v5, ".nohttp"

    invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v4

    invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v4

    move-object/from16 v0, v29

    invoke-direct {v8, v0, v4}, Ljava/io/File;-><init>(Ljava/lang/String;Ljava/lang/String;)V

    invoke-virtual/range {p2 .. p2}, Lcom/h/m/DownloadRequest;->isRange()Z

    move-result v4

    if-eqz v4, :cond_160

    invoke-virtual {v8}, Ljava/io/File;->exists()Z

    move-result v4

    if-eqz v4, :cond_160

    invoke-virtual {v8}, Ljava/io/File;->length()J

    move-result-wide v4

    const-wide/16 v10, 0x0

    cmp-long v4, v4, v10

    if-lez v4, :cond_160

    invoke-virtual {v7}, Lcom/h/r/Connection;->close()V

    invoke-virtual {v8}, Ljava/io/File;->length()J

    move-result-wide v4

    const-string/jumbo v6, "Range"

    new-instance v10, Ljava/lang/StringBuilder;

    const-string/jumbo v11, "bytes="

    invoke-direct {v10, v11}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {v10, v4, v5}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;

    move-result-object v10

    const-string/jumbo v11, "-"

    invoke-virtual {v10, v11}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v10

    invoke-virtual {v10}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v10

    move-object/from16 v0, p2

    invoke-virtual {v0, v6, v10}, Lcom/h/m/DownloadRequest;->setHeader(Ljava/lang/String;Ljava/lang/String;)Lcom/h/r/BasicRequest;

    move-object/from16 v0, p0

    move-object/from16 v1, p2

    invoke-direct {v0, v1}, Lcom/h/m/Downloader;->getConnectionRetry(Lcom/h/m/DownloadRequest;)Lcom/h/r/Connection;

    move-result-object v7

    invoke-virtual {v7}, Lcom/h/r/Connection;->exception()Ljava/lang/Exception;

    move-result-object v6

    if-eqz v6, :cond_101

    throw v6
    :try_end_dd
    .catch Ljava/net/MalformedURLException; {:try_start_6b .. :try_end_dd} :catch_49
    .catch Ljava/net/UnknownHostException; {:try_start_6b .. :try_end_dd} :catch_dd
    .catch Ljava/net/SocketTimeoutException; {:try_start_6b .. :try_end_dd} :catch_1d0
    .catch Ljava/io/IOException; {:try_start_6b .. :try_end_dd} :catch_556
    .catch Ljava/lang/Exception; {:try_start_6b .. :try_end_dd} :catch_540
    .catchall {:try_start_6b .. :try_end_dd} :catchall_533

    :catch_dd
    move-exception v4

    move-object/from16 v28, v7

    :goto_e0
    :try_start_e0
    invoke-static {v4}, Lcom/h/r/Logger;->e(Ljava/lang/Throwable;)V

    new-instance v5, Lcom/h/n/UnKnownHostError;

    invoke-virtual {v4}, Ljava/net/UnknownHostException;->getMessage()Ljava/lang/String;

    move-result-object v4

    invoke-direct {v5, v4}, Lcom/h/n/UnKnownHostError;-><init>(Ljava/lang/String;)V

    move-object/from16 v0, p3

    move/from16 v1, p1

    invoke-interface {v0, v1, v5}, Lcom/h/m/DownloadListener;->onDownloadError(ILjava/lang/Exception;)V
    :try_end_f3
    .catchall {:try_start_e0 .. :try_end_f3} :catchall_4f8

    const-string/jumbo v4, "----------Response End----------"

    invoke-static {v4}, Lcom/h/r/Logger;->i(Ljava/lang/Object;)V

    invoke-static {v12}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    invoke-static/range {v28 .. v28}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    goto/16 :goto_6a

    :cond_101
    :try_start_101
    invoke-virtual {v7}, Lcom/h/r/Connection;->responseHeaders()Lcom/h/r/Headers;

    move-result-object v6

    const-string/jumbo v10, "Range"

    move-object/from16 v0, p2

    invoke-virtual {v0, v10}, Lcom/h/m/DownloadRequest;->containsHeader(Ljava/lang/String;)Z

    move-result v10

    if-nez v10, :cond_165

    invoke-static {v8}, Lcom/h/q/IOUtils;->delFileOrFolder(Ljava/io/File;)Z
    :try_end_113
    .catch Ljava/net/MalformedURLException; {:try_start_101 .. :try_end_113} :catch_49
    .catch Ljava/net/UnknownHostException; {:try_start_101 .. :try_end_113} :catch_dd
    .catch Ljava/net/SocketTimeoutException; {:try_start_101 .. :try_end_113} :catch_1d0
    .catch Ljava/io/IOException; {:try_start_101 .. :try_end_113} :catch_556
    .catch Ljava/lang/Exception; {:try_start_101 .. :try_end_113} :catch_540
    .catchall {:try_start_101 .. :try_end_113} :catchall_533

    const-wide/16 v4, 0x0

    move-object/from16 v30, v8

    move-object v13, v9

    move-object/from16 v28, v7

    move-wide v7, v4

    move-object v9, v6

    :goto_11c
    :try_start_11c
    const-string/jumbo v4, "----------Response Start----------"

    invoke-static {v4}, Lcom/h/r/Logger;->i(Ljava/lang/Object;)V

    invoke-virtual {v9}, Lcom/h/r/Headers;->getResponseCode()I

    move-result v4

    invoke-virtual/range {v28 .. v28}, Lcom/h/r/Connection;->serverStream()Ljava/io/InputStream;

    move-result-object v31

    const/16 v5, 0x190

    if-lt v4, v5, :cond_216

    new-instance v5, Lcom/h/n/ServerError;

    new-instance v6, Ljava/lang/StringBuilder;

    const-string/jumbo v7, "Download failed, the server response code is "

    invoke-direct {v6, v7}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {v6, v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    move-result-object v4

    const-string/jumbo v6, ": "

    invoke-virtual {v4, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v4

    invoke-virtual/range {p2 .. p2}, Lcom/h/m/DownloadRequest;->url()Ljava/lang/String;

    move-result-object v6

    invoke-virtual {v4, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v4

    invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v4

    invoke-direct {v5, v4}, Lcom/h/n/ServerError;-><init>(Ljava/lang/String;)V

    invoke-static/range {v31 .. v31}, Lcom/h/q/IOUtils;->toString(Ljava/io/InputStream;)Ljava/lang/String;

    move-result-object v4

    invoke-virtual {v5, v4}, Lcom/h/n/ServerError;->setErrorBody(Ljava/lang/String;)V

    throw v5
    :try_end_15a
    .catch Ljava/net/MalformedURLException; {:try_start_11c .. :try_end_15a} :catch_15a
    .catch Ljava/net/UnknownHostException; {:try_start_11c .. :try_end_15a} :catch_26d
    .catch Ljava/net/SocketTimeoutException; {:try_start_11c .. :try_end_15a} :catch_28e
    .catch Ljava/io/IOException; {:try_start_11c .. :try_end_15a} :catch_34e
    .catch Ljava/lang/Exception; {:try_start_11c .. :try_end_15a} :catch_544
    .catchall {:try_start_11c .. :try_end_15a} :catchall_4f8

    :catch_15a
    move-exception v4

    move-object v5, v12

    move-object/from16 v7, v28

    goto/16 :goto_4b

    :cond_160
    :try_start_160
    invoke-static {v8}, Lcom/h/q/IOUtils;->delFileOrFolder(Ljava/io/File;)Z
    :try_end_163
    .catch Ljava/net/MalformedURLException; {:try_start_160 .. :try_end_163} :catch_49
    .catch Ljava/net/UnknownHostException; {:try_start_160 .. :try_end_163} :catch_dd
    .catch Ljava/net/SocketTimeoutException; {:try_start_160 .. :try_end_163} :catch_1d0
    .catch Ljava/io/IOException; {:try_start_160 .. :try_end_163} :catch_556
    .catch Ljava/lang/Exception; {:try_start_160 .. :try_end_163} :catch_540
    .catchall {:try_start_160 .. :try_end_163} :catchall_533

    const-wide/16 v4, 0x0

    :cond_165
    move-object/from16 v30, v8

    move-object v13, v9

    move-object/from16 v28, v7

    move-wide v7, v4

    move-object v9, v6

    goto :goto_11c

    :cond_16d
    :try_start_16d
    new-instance v6, Ljava/io/File;

    new-instance v4, Ljava/lang/StringBuilder;

    invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V

    invoke-virtual {v4, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v4

    const-string/jumbo v5, ".nohttp"

    invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v4

    invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v4

    move-object/from16 v0, v29

    invoke-direct {v6, v0, v4}, Ljava/io/File;-><init>(Ljava/lang/String;Ljava/lang/String;)V

    invoke-virtual/range {p2 .. p2}, Lcom/h/m/DownloadRequest;->isRange()Z

    move-result v4

    if-eqz v4, :cond_1f4

    invoke-virtual {v6}, Ljava/io/File;->exists()Z

    move-result v4

    if-eqz v4, :cond_1f4

    invoke-virtual {v6}, Ljava/io/File;->length()J

    move-result-wide v4

    const-wide/16 v10, 0x0

    cmp-long v4, v4, v10

    if-lez v4, :cond_1f4

    invoke-virtual {v6}, Ljava/io/File;->length()J

    move-result-wide v4

    const-string/jumbo v9, "Range"

    new-instance v10, Ljava/lang/StringBuilder;

    const-string/jumbo v11, "bytes="

    invoke-direct {v10, v11}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {v10, v4, v5}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;

    move-result-object v10

    const-string/jumbo v11, "-"

    invoke-virtual {v10, v11}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v10

    invoke-virtual {v10}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v10

    move-object/from16 v0, p2

    invoke-virtual {v0, v9, v10}, Lcom/h/m/DownloadRequest;->setHeader(Ljava/lang/String;Ljava/lang/String;)Lcom/h/r/BasicRequest;

    :goto_1c1
    move-object/from16 v0, p0

    move-object/from16 v1, p2

    invoke-direct {v0, v1}, Lcom/h/m/Downloader;->getConnectionRetry(Lcom/h/m/DownloadRequest;)Lcom/h/r/Connection;
    :try_end_1c8
    .catch Ljava/net/MalformedURLException; {:try_start_16d .. :try_end_1c8} :catch_49
    .catch Ljava/net/UnknownHostException; {:try_start_16d .. :try_end_1c8} :catch_56e
    .catch Ljava/net/SocketTimeoutException; {:try_start_16d .. :try_end_1c8} :catch_564
    .catch Ljava/io/IOException; {:try_start_16d .. :try_end_1c8} :catch_54f
    .catch Ljava/lang/Exception; {:try_start_16d .. :try_end_1c8} :catch_506
    .catchall {:try_start_16d .. :try_end_1c8} :catchall_52f

    move-result-object v7

    :try_start_1c9
    invoke-virtual {v7}, Lcom/h/r/Connection;->exception()Ljava/lang/Exception;

    move-result-object v9

    if-eqz v9, :cond_1fa

    throw v9
    :try_end_1d0
    .catch Ljava/net/MalformedURLException; {:try_start_1c9 .. :try_end_1d0} :catch_49
    .catch Ljava/net/UnknownHostException; {:try_start_1c9 .. :try_end_1d0} :catch_dd
    .catch Ljava/net/SocketTimeoutException; {:try_start_1c9 .. :try_end_1d0} :catch_1d0
    .catch Ljava/io/IOException; {:try_start_1c9 .. :try_end_1d0} :catch_556
    .catch Ljava/lang/Exception; {:try_start_1c9 .. :try_end_1d0} :catch_540
    .catchall {:try_start_1c9 .. :try_end_1d0} :catchall_533

    :catch_1d0
    move-exception v4

    move-object/from16 v28, v7

    :goto_1d3
    :try_start_1d3
    invoke-static {v4}, Lcom/h/r/Logger;->e(Ljava/lang/Throwable;)V

    new-instance v5, Lcom/h/n/TimeoutError;

    invoke-virtual {v4}, Ljava/net/SocketTimeoutException;->getMessage()Ljava/lang/String;

    move-result-object v4

    invoke-direct {v5, v4}, Lcom/h/n/TimeoutError;-><init>(Ljava/lang/String;)V

    move-object/from16 v0, p3

    move/from16 v1, p1

    invoke-interface {v0, v1, v5}, Lcom/h/m/DownloadListener;->onDownloadError(ILjava/lang/Exception;)V
    :try_end_1e6
    .catchall {:try_start_1d3 .. :try_end_1e6} :catchall_4f8

    const-string/jumbo v4, "----------Response End----------"

    invoke-static {v4}, Lcom/h/r/Logger;->i(Ljava/lang/Object;)V

    invoke-static {v12}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    invoke-static/range {v28 .. v28}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    goto/16 :goto_6a

    :cond_1f4
    :try_start_1f4
    invoke-static {v6}, Lcom/h/q/IOUtils;->delFileOrFolder(Ljava/io/File;)Z
    :try_end_1f7
    .catch Ljava/net/MalformedURLException; {:try_start_1f4 .. :try_end_1f7} :catch_49
    .catch Ljava/net/UnknownHostException; {:try_start_1f4 .. :try_end_1f7} :catch_56e
    .catch Ljava/net/SocketTimeoutException; {:try_start_1f4 .. :try_end_1f7} :catch_564
    .catch Ljava/io/IOException; {:try_start_1f4 .. :try_end_1f7} :catch_54f
    .catch Ljava/lang/Exception; {:try_start_1f4 .. :try_end_1f7} :catch_506
    .catchall {:try_start_1f4 .. :try_end_1f7} :catchall_52f

    const-wide/16 v4, 0x0

    goto :goto_1c1

    :cond_1fa
    :try_start_1fa
    invoke-virtual {v7}, Lcom/h/r/Connection;->responseHeaders()Lcom/h/r/Headers;

    move-result-object v9

    const-string/jumbo v10, "Range"

    move-object/from16 v0, p2

    invoke-virtual {v0, v10}, Lcom/h/m/DownloadRequest;->containsHeader(Ljava/lang/String;)Z

    move-result v10

    if-nez v10, :cond_578

    invoke-static {v6}, Lcom/h/q/IOUtils;->delFileOrFolder(Ljava/io/File;)Z
    :try_end_20c
    .catch Ljava/net/MalformedURLException; {:try_start_1fa .. :try_end_20c} :catch_49
    .catch Ljava/net/UnknownHostException; {:try_start_1fa .. :try_end_20c} :catch_dd
    .catch Ljava/net/SocketTimeoutException; {:try_start_1fa .. :try_end_20c} :catch_1d0
    .catch Ljava/io/IOException; {:try_start_1fa .. :try_end_20c} :catch_556
    .catch Ljava/lang/Exception; {:try_start_1fa .. :try_end_20c} :catch_540
    .catchall {:try_start_1fa .. :try_end_20c} :catchall_533

    const-wide/16 v4, 0x0

    move-object/from16 v30, v6

    move-object v13, v8

    move-object/from16 v28, v7

    move-wide v7, v4

    goto/16 :goto_11c

    :cond_216
    const/16 v5, 0xce

    if-ne v4, v5, :cond_291

    :try_start_21a
    invoke-virtual {v9}, Lcom/h/r/Headers;->getContentRange()Ljava/lang/String;
    :try_end_21d
    .catch Ljava/net/MalformedURLException; {:try_start_21a .. :try_end_21d} :catch_15a
    .catch Ljava/net/UnknownHostException; {:try_start_21a .. :try_end_21d} :catch_26d
    .catch Ljava/net/SocketTimeoutException; {:try_start_21a .. :try_end_21d} :catch_28e
    .catch Ljava/io/IOException; {:try_start_21a .. :try_end_21d} :catch_34e
    .catch Ljava/lang/Exception; {:try_start_21a .. :try_end_21d} :catch_544
    .catchall {:try_start_21a .. :try_end_21d} :catchall_4f8

    move-result-object v5

    const/16 v6, 0x2f

    :try_start_220
    invoke-virtual {v5, v6}, Ljava/lang/String;->indexOf(I)I

    move-result v6

    add-int/lit8 v6, v6, 0x1

    invoke-virtual {v5, v6}, Ljava/lang/String;->substring(I)Ljava/lang/String;

    move-result-object v6

    invoke-static {v6}, Ljava/lang/Long;->parseLong(Ljava/lang/String;)J
    :try_end_22d
    .catch Ljava/lang/Throwable; {:try_start_220 .. :try_end_22d} :catch_270
    .catch Ljava/net/MalformedURLException; {:try_start_220 .. :try_end_22d} :catch_15a
    .catch Ljava/net/UnknownHostException; {:try_start_220 .. :try_end_22d} :catch_26d
    .catch Ljava/net/SocketTimeoutException; {:try_start_220 .. :try_end_22d} :catch_28e
    .catch Ljava/io/IOException; {:try_start_220 .. :try_end_22d} :catch_34e
    .catch Ljava/lang/Exception; {:try_start_220 .. :try_end_22d} :catch_544
    .catchall {:try_start_220 .. :try_end_22d} :catchall_4f8

    move-result-wide v10

    :goto_22e
    :try_start_22e
    new-instance v32, Ljava/io/File;

    move-object/from16 v0, v32

    move-object/from16 v1, v29

    invoke-direct {v0, v1, v13}, Ljava/io/File;-><init>(Ljava/lang/String;Ljava/lang/String;)V

    invoke-virtual/range {v32 .. v32}, Ljava/io/File;->exists()Z

    move-result v5

    if-eqz v5, :cond_246

    invoke-virtual/range {p2 .. p2}, Lcom/h/m/DownloadRequest;->isDeleteOld()Z

    move-result v5

    if-eqz v5, :cond_2ed

    invoke-static/range {v32 .. v32}, Lcom/h/q/IOUtils;->delFileOrFolder(Ljava/io/File;)Z

    :cond_246
    invoke-static/range {v29 .. v29}, Lcom/h/q/IOUtils;->getDirSize(Ljava/lang/String;)J

    move-result-wide v14

    cmp-long v5, v14, v10

    if-gez v5, :cond_32c

    new-instance v4, Lcom/h/n/StorageSpaceNotEnoughError;

    new-instance v5, Ljava/lang/StringBuilder;

    const-string/jumbo v6, "The folder is not enough space to save the downloaded file: "

    invoke-direct {v5, v6}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    move-object/from16 v0, v29

    invoke-virtual {v5, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v5

    const-string/jumbo v6, "."

    invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v5

    invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v5

    invoke-direct {v4, v5}, Lcom/h/n/StorageSpaceNotEnoughError;-><init>(Ljava/lang/String;)V

    throw v4

    :catch_26d
    move-exception v4

    goto/16 :goto_e0

    :catch_270
    move-exception v4

    new-instance v4, Lcom/h/n/ServerError;

    new-instance v6, Ljava/lang/StringBuilder;

    const-string/jumbo v7, "ResponseCode is 206, but content-Range error in Server HTTP header information: "

    invoke-direct {v6, v7}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {v6, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v5

    const-string/jumbo v6, "."

    invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v5

    invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v5

    invoke-direct {v4, v5}, Lcom/h/n/ServerError;-><init>(Ljava/lang/String;)V

    throw v4

    :catch_28e
    move-exception v4

    goto/16 :goto_1d3

    :cond_291
    const/16 v5, 0x130

    if-ne v4, v5, :cond_2e4

    invoke-virtual {v9}, Lcom/h/r/Headers;->getContentLength()I

    move-result v14

    const/4 v6, 0x1

    int-to-long v7, v14

    int-to-long v10, v14

    move-object/from16 v4, p3

    move/from16 v5, p1

    invoke-interface/range {v4 .. v11}, Lcom/h/m/DownloadListener;->onStart(IZJLcom/h/r/Headers;J)V

    const/16 v7, 0x64

    int-to-long v8, v14

    const-wide/16 v10, 0x0

    move-object/from16 v5, p3

    move/from16 v6, p1

    invoke-interface/range {v5 .. v11}, Lcom/h/m/DownloadListener;->onProgress(IIJJ)V

    const-string/jumbo v4, "-------Download finish-------"

    invoke-static {v4}, Lcom/h/r/Logger;->d(Ljava/lang/Object;)V

    new-instance v4, Ljava/lang/StringBuilder;

    invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V

    move-object/from16 v0, v29

    invoke-virtual {v4, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v4

    sget-object v5, Ljava/io/File;->separator:Ljava/lang/String;

    invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v4

    invoke-virtual {v4, v13}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v4

    invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v4

    move-object/from16 v0, p3

    move/from16 v1, p1

    invoke-interface {v0, v1, v4}, Lcom/h/m/DownloadListener;->onFinish(ILjava/lang/String;)V
    :try_end_2d5
    .catch Ljava/net/MalformedURLException; {:try_start_22e .. :try_end_2d5} :catch_15a
    .catch Ljava/net/UnknownHostException; {:try_start_22e .. :try_end_2d5} :catch_26d
    .catch Ljava/net/SocketTimeoutException; {:try_start_22e .. :try_end_2d5} :catch_28e
    .catch Ljava/io/IOException; {:try_start_22e .. :try_end_2d5} :catch_34e
    .catch Ljava/lang/Exception; {:try_start_22e .. :try_end_2d5} :catch_544
    .catchall {:try_start_22e .. :try_end_2d5} :catchall_4f8

    const-string/jumbo v4, "----------Response End----------"

    invoke-static {v4}, Lcom/h/r/Logger;->i(Ljava/lang/Object;)V

    const/4 v4, 0x0

    invoke-static {v4}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    invoke-static/range {v28 .. v28}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    goto/16 :goto_6a

    :cond_2e4
    const-wide/16 v7, 0x0

    :try_start_2e6
    invoke-virtual {v9}, Lcom/h/r/Headers;->getContentLength()I

    move-result v5

    int-to-long v10, v5

    goto/16 :goto_22e

    :cond_2ed
    const/4 v6, 0x1

    invoke-virtual/range {v32 .. v32}, Ljava/io/File;->length()J

    move-result-wide v7

    invoke-virtual/range {v32 .. v32}, Ljava/io/File;->length()J

    move-result-wide v10

    move-object/from16 v4, p3

    move/from16 v5, p1

    invoke-interface/range {v4 .. v11}, Lcom/h/m/DownloadListener;->onStart(IZJLcom/h/r/Headers;J)V

    const/16 v7, 0x64

    invoke-virtual/range {v32 .. v32}, Ljava/io/File;->length()J

    move-result-wide v8

    const-wide/16 v10, 0x0

    move-object/from16 v5, p3

    move/from16 v6, p1

    invoke-interface/range {v5 .. v11}, Lcom/h/m/DownloadListener;->onProgress(IIJJ)V

    const-string/jumbo v4, "-------Download finish-------"

    invoke-static {v4}, Lcom/h/r/Logger;->d(Ljava/lang/Object;)V

    invoke-virtual/range {v32 .. v32}, Ljava/io/File;->getAbsolutePath()Ljava/lang/String;

    move-result-object v4

    move-object/from16 v0, p3

    move/from16 v1, p1

    invoke-interface {v0, v1, v4}, Lcom/h/m/DownloadListener;->onFinish(ILjava/lang/String;)V
    :try_end_31d
    .catch Ljava/net/MalformedURLException; {:try_start_2e6 .. :try_end_31d} :catch_15a
    .catch Ljava/net/UnknownHostException; {:try_start_2e6 .. :try_end_31d} :catch_26d
    .catch Ljava/net/SocketTimeoutException; {:try_start_2e6 .. :try_end_31d} :catch_28e
    .catch Ljava/io/IOException; {:try_start_2e6 .. :try_end_31d} :catch_34e
    .catch Ljava/lang/Exception; {:try_start_2e6 .. :try_end_31d} :catch_544
    .catchall {:try_start_2e6 .. :try_end_31d} :catchall_4f8

    const-string/jumbo v4, "----------Response End----------"

    invoke-static {v4}, Lcom/h/r/Logger;->i(Ljava/lang/Object;)V

    const/4 v4, 0x0

    invoke-static {v4}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    invoke-static/range {v28 .. v28}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    goto/16 :goto_6a

    :cond_32c
    const/16 v5, 0xce

    if-eq v4, v5, :cond_384

    :try_start_330
    invoke-static/range {v30 .. v30}, Lcom/h/q/IOUtils;->createNewFile(Ljava/io/File;)Z

    move-result v4

    if-nez v4, :cond_384

    new-instance v4, Lcom/h/n/StorageReadWriteError;

    new-instance v5, Ljava/lang/StringBuilder;

    const-string/jumbo v6, "SD card isn\'t available, please check SD card and permission: WRITE_EXTERNAL_STORAGE.\nYou must pay attention to Android6.0 RunTime Permissions: https://github.com/yanzhenjie/AndPermission.\nFailed to create file: "

    invoke-direct {v5, v6}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    move-object/from16 v0, v30

    invoke-virtual {v5, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    move-result-object v5

    invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v5

    invoke-direct {v4, v5}, Lcom/h/n/StorageReadWriteError;-><init>(Ljava/lang/String;)V

    throw v4
    :try_end_34e
    .catch Ljava/net/MalformedURLException; {:try_start_330 .. :try_end_34e} :catch_15a
    .catch Ljava/net/UnknownHostException; {:try_start_330 .. :try_end_34e} :catch_26d
    .catch Ljava/net/SocketTimeoutException; {:try_start_330 .. :try_end_34e} :catch_28e
    .catch Ljava/io/IOException; {:try_start_330 .. :try_end_34e} :catch_34e
    .catch Ljava/lang/Exception; {:try_start_330 .. :try_end_34e} :catch_544
    .catchall {:try_start_330 .. :try_end_34e} :catchall_4f8

    :catch_34e
    move-exception v4

    move-object/from16 v5, v29

    :goto_351
    :try_start_351
    invoke-static {v5}, Lcom/h/q/IOUtils;->canWrite(Ljava/lang/String;)Z

    move-result v6

    if-nez v6, :cond_4d0

    new-instance v4, Lcom/h/n/StorageReadWriteError;

    new-instance v6, Ljava/lang/StringBuilder;

    const-string/jumbo v7, "SD card isn\'t available, please check SD card and permission: WRITE_EXTERNAL_STORAGE.\nYou must pay attention to Android6.0 RunTime Permissions: https://github.com/yanzhenjie/AndPermission.\nFailed to create folder: "

    invoke-direct {v6, v7}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {v6, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v5

    invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v5

    invoke-direct {v4, v5}, Lcom/h/n/StorageReadWriteError;-><init>(Ljava/lang/String;)V

    :cond_36c
    :goto_36c
    invoke-static {v4}, Lcom/h/r/Logger;->e(Ljava/lang/Throwable;)V

    move-object/from16 v0, p3

    move/from16 v1, p1

    invoke-interface {v0, v1, v4}, Lcom/h/m/DownloadListener;->onDownloadError(ILjava/lang/Exception;)V
    :try_end_376
    .catchall {:try_start_351 .. :try_end_376} :catchall_4f8

    const-string/jumbo v4, "----------Response End----------"

    invoke-static {v4}, Lcom/h/r/Logger;->i(Ljava/lang/Object;)V

    invoke-static {v12}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    invoke-static/range {v28 .. v28}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    goto/16 :goto_6a

    :cond_384
    :try_start_384
    invoke-virtual/range {p2 .. p2}, Lcom/h/m/DownloadRequest;->isCanceled()Z

    move-result v4

    if-eqz v4, :cond_3a9

    const-string/jumbo v4, "NoHttpDownloader"

    const-string/jumbo v5, "Download request is canceled."

    invoke-static {v4, v5}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I

    move-object/from16 v0, p3

    move/from16 v1, p1

    invoke-interface {v0, v1}, Lcom/h/m/DownloadListener;->onCancel(I)V
    :try_end_39a
    .catch Ljava/net/MalformedURLException; {:try_start_384 .. :try_end_39a} :catch_15a
    .catch Ljava/net/UnknownHostException; {:try_start_384 .. :try_end_39a} :catch_26d
    .catch Ljava/net/SocketTimeoutException; {:try_start_384 .. :try_end_39a} :catch_28e
    .catch Ljava/io/IOException; {:try_start_384 .. :try_end_39a} :catch_34e
    .catch Ljava/lang/Exception; {:try_start_384 .. :try_end_39a} :catch_544
    .catchall {:try_start_384 .. :try_end_39a} :catchall_4f8

    const-string/jumbo v4, "----------Response End----------"

    invoke-static {v4}, Lcom/h/r/Logger;->i(Ljava/lang/Object;)V

    const/4 v4, 0x0

    invoke-static {v4}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    invoke-static/range {v28 .. v28}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    goto/16 :goto_6a

    :cond_3a9
    :try_start_3a9
    const-string/jumbo v4, "-------Download start-------"

    invoke-static {v4}, Lcom/h/r/Logger;->d(Ljava/lang/Object;)V

    const-wide/16 v4, 0x0

    cmp-long v4, v7, v4

    if-lez v4, :cond_42f

    const/4 v6, 0x1

    :goto_3b6
    move-object/from16 v4, p3

    move/from16 v5, p1

    invoke-interface/range {v4 .. v11}, Lcom/h/m/DownloadListener;->onStart(IZJLcom/h/r/Headers;J)V

    new-instance v20, Ljava/io/RandomAccessFile;

    const-string/jumbo v4, "rws"

    move-object/from16 v0, v20

    move-object/from16 v1, v30

    invoke-direct {v0, v1, v4}, Ljava/io/RandomAccessFile;-><init>(Ljava/io/File;Ljava/lang/String;)V
    :try_end_3c9
    .catch Ljava/net/MalformedURLException; {:try_start_3a9 .. :try_end_3c9} :catch_15a
    .catch Ljava/net/UnknownHostException; {:try_start_3a9 .. :try_end_3c9} :catch_26d
    .catch Ljava/net/SocketTimeoutException; {:try_start_3a9 .. :try_end_3c9} :catch_28e
    .catch Ljava/io/IOException; {:try_start_3a9 .. :try_end_3c9} :catch_34e
    .catch Ljava/lang/Exception; {:try_start_3a9 .. :try_end_3c9} :catch_544
    .catchall {:try_start_3a9 .. :try_end_3c9} :catchall_4f8

    :try_start_3c9
    move-object/from16 v0, v20

    invoke-virtual {v0, v7, v8}, Ljava/io/RandomAccessFile;->seek(J)V

    const/16 v4, 0x1fa0

    new-array v0, v4, [B

    move-object/from16 v33, v0

    const/16 v23, 0x0

    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v14

    const-wide/16 v12, 0x0

    const-wide/16 v4, 0x0

    move-wide/from16 v16, v7

    move-wide v8, v14

    move-wide v6, v12

    :goto_3e2
    move-object/from16 v0, v31

    move-object/from16 v1, v33

    invoke-virtual {v0, v1}, Ljava/io/InputStream;->read([B)I

    move-result v12

    const/4 v13, -0x1

    if-eq v12, v13, :cond_403

    invoke-virtual/range {p2 .. p2}, Lcom/h/m/DownloadRequest;->isCanceled()Z

    move-result v13

    if-eqz v13, :cond_431

    const-string/jumbo v4, "NoHttpDownloader"

    const-string/jumbo v5, "Download request is canceled."

    invoke-static {v4, v5}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I

    move-object/from16 v0, p3

    move/from16 v1, p1

    invoke-interface {v0, v1}, Lcom/h/m/DownloadListener;->onCancel(I)V

    :cond_403
    invoke-virtual/range {p2 .. p2}, Lcom/h/m/DownloadRequest;->isCanceled()Z

    move-result v4

    if-nez v4, :cond_421

    move-object/from16 v0, v30

    move-object/from16 v1, v32

    invoke-virtual {v0, v1}, Ljava/io/File;->renameTo(Ljava/io/File;)Z

    const-string/jumbo v4, "-------Download finish-------"

    invoke-static {v4}, Lcom/h/r/Logger;->d(Ljava/lang/Object;)V

    invoke-virtual/range {v32 .. v32}, Ljava/io/File;->getAbsolutePath()Ljava/lang/String;

    move-result-object v4

    move-object/from16 v0, p3

    move/from16 v1, p1

    invoke-interface {v0, v1, v4}, Lcom/h/m/DownloadListener;->onFinish(ILjava/lang/String;)V
    :try_end_421
    .catch Ljava/net/MalformedURLException; {:try_start_3c9 .. :try_end_421} :catch_4c9
    .catch Ljava/net/UnknownHostException; {:try_start_3c9 .. :try_end_421} :catch_573
    .catch Ljava/net/SocketTimeoutException; {:try_start_3c9 .. :try_end_421} :catch_569
    .catch Ljava/io/IOException; {:try_start_3c9 .. :try_end_421} :catch_55d
    .catch Ljava/lang/Exception; {:try_start_3c9 .. :try_end_421} :catch_546
    .catchall {:try_start_3c9 .. :try_end_421} :catchall_537

    :cond_421
    const-string/jumbo v4, "----------Response End----------"

    invoke-static {v4}, Lcom/h/r/Logger;->i(Ljava/lang/Object;)V

    invoke-static/range {v20 .. v20}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    invoke-static/range {v28 .. v28}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    goto/16 :goto_6a

    :cond_42f
    const/4 v6, 0x0

    goto :goto_3b6

    :cond_431
    const/4 v13, 0x0

    :try_start_432
    move-object/from16 v0, v20

    move-object/from16 v1, v33

    invoke-virtual {v0, v1, v13, v12}, Ljava/io/RandomAccessFile;->write([BII)V

    int-to-long v14, v12

    add-long v16, v16, v14

    int-to-long v12, v12

    add-long/2addr v6, v12

    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v12

    sub-long/2addr v12, v8

    const-wide/16 v14, 0x1

    invoke-static {v12, v13, v14, v15}, Ljava/lang/Math;->max(JJ)J

    move-result-wide v12

    const-wide/16 v14, 0x3e8

    mul-long/2addr v14, v6

    div-long v18, v14, v12

    cmp-long v14, v4, v18

    if-eqz v14, :cond_480

    const-wide/16 v14, 0x12c

    cmp-long v12, v12, v14

    if-ltz v12, :cond_480

    const/4 v12, 0x1

    :goto_459
    const-wide/16 v14, 0x0

    cmp-long v13, v10, v14

    if-eqz v13, :cond_4a8

    const-wide/16 v14, 0x64

    mul-long v14, v14, v16

    div-long/2addr v14, v10

    long-to-int v15, v14

    move/from16 v0, v23

    if-eq v15, v0, :cond_482

    if-eqz v12, :cond_482

    move-object/from16 v13, p3

    move/from16 v14, p1

    invoke-interface/range {v13 .. v19}, Lcom/h/m/DownloadListener;->onProgress(IIJJ)V

    const-wide/16 v4, 0x0

    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v6

    :goto_478
    move-wide v8, v6

    move/from16 v23, v15

    move-wide v6, v4

    move-wide/from16 v4, v18

    goto/16 :goto_3e2

    :cond_480
    const/4 v12, 0x0

    goto :goto_459

    :cond_482
    if-eqz v12, :cond_496

    move-object/from16 v21, p3

    move/from16 v22, p1

    move-wide/from16 v24, v16

    move-wide/from16 v26, v18

    invoke-interface/range {v21 .. v27}, Lcom/h/m/DownloadListener;->onProgress(IIJJ)V

    const-wide/16 v4, 0x0

    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v6

    goto :goto_478

    :cond_496
    move/from16 v0, v23

    if-eq v15, v0, :cond_4a3

    move-object/from16 v13, p3

    move/from16 v14, p1

    move-wide/from16 v18, v4

    invoke-interface/range {v13 .. v19}, Lcom/h/m/DownloadListener;->onProgress(IIJJ)V

    :cond_4a3
    move-wide/from16 v18, v4

    move-wide v4, v6

    move-wide v6, v8

    goto :goto_478

    :cond_4a8
    if-eqz v12, :cond_4bd

    const/4 v15, 0x0

    move-object/from16 v13, p3

    move/from16 v14, p1

    invoke-interface/range {v13 .. v19}, Lcom/h/m/DownloadListener;->onProgress(IIJJ)V

    const-wide/16 v4, 0x0

    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v8

    move-wide v6, v4

    move-wide/from16 v4, v18

    goto/16 :goto_3e2

    :cond_4bd
    const/4 v15, 0x0

    move-object/from16 v13, p3

    move/from16 v14, p1

    move-wide/from16 v18, v4

    invoke-interface/range {v13 .. v19}, Lcom/h/m/DownloadListener;->onProgress(IIJJ)V
    :try_end_4c7
    .catch Ljava/net/MalformedURLException; {:try_start_432 .. :try_end_4c7} :catch_4c9
    .catch Ljava/net/UnknownHostException; {:try_start_432 .. :try_end_4c7} :catch_573
    .catch Ljava/net/SocketTimeoutException; {:try_start_432 .. :try_end_4c7} :catch_569
    .catch Ljava/io/IOException; {:try_start_432 .. :try_end_4c7} :catch_55d
    .catch Ljava/lang/Exception; {:try_start_432 .. :try_end_4c7} :catch_546
    .catchall {:try_start_432 .. :try_end_4c7} :catchall_537

    goto/16 :goto_3e2

    :catch_4c9
    move-exception v4

    move-object/from16 v5, v20

    move-object/from16 v7, v28

    goto/16 :goto_4b

    :cond_4d0
    :try_start_4d0
    invoke-static {v5}, Lcom/h/q/IOUtils;->getDirSize(Ljava/lang/String;)J

    move-result-wide v6

    const-wide/16 v8, 0x400

    cmp-long v6, v6, v8

    if-gez v6, :cond_36c

    new-instance v4, Lcom/h/n/StorageSpaceNotEnoughError;

    new-instance v6, Ljava/lang/StringBuilder;

    const-string/jumbo v7, "The folder is not enough space to save the downloaded file: "

    invoke-direct {v6, v7}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {v6, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v5

    const-string/jumbo v6, "."

    invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v5

    invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v5

    invoke-direct {v4, v5}, Lcom/h/n/StorageSpaceNotEnoughError;-><init>(Ljava/lang/String;)V
    :try_end_4f6
    .catchall {:try_start_4d0 .. :try_end_4f6} :catchall_4f8

    goto/16 :goto_36c

    :catchall_4f8
    move-exception v4

    :goto_4f9
    const-string/jumbo v5, "----------Response End----------"

    invoke-static {v5}, Lcom/h/r/Logger;->i(Ljava/lang/Object;)V

    invoke-static {v12}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    invoke-static/range {v28 .. v28}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    throw v4

    :catch_506
    move-exception v4

    move-object/from16 v28, v7

    :goto_509
    :try_start_509
    invoke-static {}, Lcom/h/q/NetUtils;->isNetworkAvailable()Z

    move-result v5

    if-nez v5, :cond_517

    new-instance v4, Lcom/h/n/NetworkError;

    const-string/jumbo v5, "Network is not available, please check network and permission: INTERNET, ACCESS_WIFI_STATE, ACCESS_NETWORK_STATE."

    invoke-direct {v4, v5}, Lcom/h/n/NetworkError;-><init>(Ljava/lang/String;)V

    :cond_517
    invoke-static {v4}, Lcom/h/r/Logger;->e(Ljava/lang/Throwable;)V

    move-object/from16 v0, p3

    move/from16 v1, p1

    invoke-interface {v0, v1, v4}, Lcom/h/m/DownloadListener;->onDownloadError(ILjava/lang/Exception;)V
    :try_end_521
    .catchall {:try_start_509 .. :try_end_521} :catchall_4f8

    const-string/jumbo v4, "----------Response End----------"

    invoke-static {v4}, Lcom/h/r/Logger;->i(Ljava/lang/Object;)V

    invoke-static {v12}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    invoke-static/range {v28 .. v28}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    goto/16 :goto_6a

    :catchall_52f
    move-exception v4

    move-object/from16 v28, v7

    goto :goto_4f9

    :catchall_533
    move-exception v4

    move-object/from16 v28, v7

    goto :goto_4f9

    :catchall_537
    move-exception v4

    move-object/from16 v12, v20

    goto :goto_4f9

    :catchall_53b
    move-exception v4

    move-object v12, v5

    move-object/from16 v28, v7

    goto :goto_4f9

    :catch_540
    move-exception v4

    move-object/from16 v28, v7

    goto :goto_509

    :catch_544
    move-exception v4

    goto :goto_509

    :catch_546
    move-exception v4

    move-object/from16 v12, v20

    goto :goto_509

    :catch_54a
    move-exception v4

    move-object/from16 v28, v7

    goto/16 :goto_351

    :catch_54f
    move-exception v4

    move-object/from16 v5, v29

    move-object/from16 v28, v7

    goto/16 :goto_351

    :catch_556
    move-exception v4

    move-object/from16 v5, v29

    move-object/from16 v28, v7

    goto/16 :goto_351

    :catch_55d
    move-exception v4

    move-object/from16 v5, v29

    move-object/from16 v12, v20

    goto/16 :goto_351

    :catch_564
    move-exception v4

    move-object/from16 v28, v7

    goto/16 :goto_1d3

    :catch_569
    move-exception v4

    move-object/from16 v12, v20

    goto/16 :goto_1d3

    :catch_56e
    move-exception v4

    move-object/from16 v28, v7

    goto/16 :goto_e0

    :catch_573
    move-exception v4

    move-object/from16 v12, v20

    goto/16 :goto_e0

    :cond_578
    move-object/from16 v30, v6

    move-object v13, v8

    move-object/from16 v28, v7

    move-wide v7, v4

    goto/16 :goto_11c

    :cond_580
    move-object/from16 v29, v5

    goto/16 :goto_25
.end method