• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

jiangxincode / ApkToolBoxGUI / #727

12 May 2024 08:17AM UTC coverage: 3.153%. Remained the same
#727

push

jiangxincode
fix github Code scanning issues(infer)

0 of 4 new or added lines in 1 file covered. (0.0%)

236 of 7485 relevant lines covered (3.15%)

0.03 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/main/java/edu/jiangxin/apktoolbox/swing/extend/plugin/runnable/DownloadRunnable.java
1
package edu.jiangxin.apktoolbox.swing.extend.plugin.runnable;
2

3
import edu.jiangxin.apktoolbox.swing.extend.plugin.ChangeMenuPreparePluginController;
4
import edu.jiangxin.apktoolbox.swing.extend.plugin.IPreparePluginCallback;
5
import org.apache.commons.io.FileUtils;
6
import org.apache.logging.log4j.LogManager;
7
import org.apache.logging.log4j.Logger;
8

9
import javax.swing.*;
10
import java.io.*;
11
import java.net.HttpURLConnection;
12
import java.net.URL;
13
import java.util.List;
14
import java.util.Map;
15

16
public class DownloadRunnable extends AbstractRunnable {
17
    private static final Logger LOGGER = LogManager.getLogger(DownloadRunnable.class.getSimpleName());
×
18
    private final URL url;
19
    private final File downloadDir;
20

21
    public DownloadRunnable(URL url, File downloadDir, IPreparePluginCallback callback) {
22
        super("Downloading...", callback);
×
23
        this.url = url;
×
24
        this.downloadDir = downloadDir;
×
25
    }
×
26

27
    @Override
28
    public void run() {
29
        SwingUtilities.invokeLater(() -> progressBarDialog.setVisible(true));
×
30
        HttpURLConnection conn;
31
        try {
32
            conn = (HttpURLConnection) url.openConnection();
×
33
            conn.setRequestMethod("GET");
×
34
            conn.setUseCaches(false);
×
35
            conn.setConnectTimeout(5000);
×
36
            conn.connect();
×
37
        } catch (IOException e) {
×
38
            LOGGER.error("download failed: {}", e.getMessage());
×
39
            callback.onDownloadFinished(ChangeMenuPreparePluginController.RESULT_DOWNLOAD_FAILED);
×
40
            return;
×
41
        }
×
42

43
        Map<String, List<String>> map = conn.getHeaderFields();
×
NEW
44
        List<String> contentLengthList = map.get("Content-Length");
×
NEW
45
        int downloadLength = 1;
×
NEW
46
        if (contentLengthList != null && !contentLengthList.isEmpty()) {
×
NEW
47
            downloadLength = Integer.parseInt(contentLengthList.get(0));
×
48
        }
49

50
        String urlStr = url.toString();
×
51
        String fileName = urlStr.substring(urlStr.lastIndexOf("/") + 1);
×
52
        File downloadFile = new File(downloadDir, fileName);
×
53

54
        try (BufferedInputStream is = new BufferedInputStream(conn.getInputStream());
×
55
             BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(downloadFile))) {
×
56
            byte[] b = new byte[2048];
×
57
            int length;
58
            long count = 0;
×
59
            while ((length = is.read(b)) != -1 && !isCancelled) {
×
60
                os.write(b, 0, length);
×
61
                count += length;
×
62
                progress = (int)(count * 100 / downloadLength);
×
63
            }
64
        } catch (IOException e) {
×
65
            LOGGER.error("download failed: {}", e.getMessage());
×
66
            callback.onDownloadFinished(ChangeMenuPreparePluginController.RESULT_DOWNLOAD_FAILED);
×
67
            return;
×
68
        }
×
69
        if (isCancelled) {
×
70
            LOGGER.info("download cancelled");
×
71
            FileUtils.deleteQuietly(downloadFile);
×
72
            callback.onDownloadFinished(ChangeMenuPreparePluginController.RESULT_DOWNLOAD_CANCELLED);
×
73
        } else {
74
            isFinished = true;
×
75
            callback.onDownloadFinished(ChangeMenuPreparePluginController.RESULT_DOWNLOAD_SUCCESS);
×
76
        }
77
    }
×
78
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc