admin
2020-08-12 cefe2a41db4a275fb1e940a902cb156f1ed68d80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
 * Copyright © 2012-2013 LiuZhongnan. All rights reserved.
 * 
 * Email:qq81595157@126.com
 * 
 * PROPRIETARY/CONFIDENTIAL.
 */
 
package com.youku.service.download;
 
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
 
import android.content.Context;
 
import com.baseproject.utils.Logger;
import com.youku.player.YoukuPlayerConfiguration;
import com.youku.player.util.PlayerUtil;
import com.youku.service.download.SDCardManager.SDCardInfo;
 
/**
 * BaseDownload.下载管理抽象类
 * 
 * @author 刘仲男 qq81595157@126.com
 * @version v3.5
 * @created time 2012-10-15 下午1:16:02
 */
public abstract class BaseDownload implements IDownload {
 
    public Context context;
 
    /** SD卡列表 */
    public ArrayList<SDCardInfo> sdCard_list;
 
    @Override
    public final boolean existsDownloadInfo(String videoId) {
        return getDownloadInfo(videoId) == null ? false : true;
    }
 
    @Override
    public final boolean isDownloadFinished(String vid) {
        DownloadInfo info = getDownloadInfo(vid);
        if (info != null && info.getState() == DownloadInfo.STATE_FINISH)
            return true;
        return false;
    }
 
    @Override
    public final DownloadInfo getDownloadInfo(String videoId) {
        if (sdCard_list == null
                && (sdCard_list = SDCardManager.getExternalStorageDirectory()) == null) {
            return null;
        }
        for (int i = 0; i < sdCard_list.size(); i++) {
            DownloadInfo info = getDownloadInfoBySavePath(sdCard_list.get(i).path
                    + YoukuPlayerConfiguration.getDownloadPath() + videoId + "/");
            if (info != null) {
                return info;
            }
        }
        return null;
    }
 
    /**
     * 根据存储路径获得DownloadInfo
     */
    public final DownloadInfo getDownloadInfoBySavePath(String savePath) {
        try {
            File f = new File(savePath + FILE_NAME);
            if (f.exists() && f.isFile()) {
                String s = PlayerUtil.convertStreamToString(new FileInputStream(
                        f));
                DownloadInfo i = DownloadInfo.jsonToDownloadInfo(s);
                if (i != null && i.getState() != DownloadInfo.STATE_CANCEL) {
                    i.savePath = savePath;
                    return i;
                }
            }
        } catch (Exception e) {
            Logger.e("Download_BaseDownload",
                    "getDownloadInfoBySavePath()#savePath:" + savePath, e);
        }
        return null;
    }
 
    /**
     * 重新获取正在下载的数据
     * 
     * @return
     */
    protected HashMap<String, DownloadInfo> getNewDownloadingData() {
        HashMap<String, DownloadInfo> downloadingData = new HashMap<String, DownloadInfo>();
        if (sdCard_list == null
                && (sdCard_list = SDCardManager.getExternalStorageDirectory()) == null) {
            return downloadingData;
        }
        for (int j = 0; j < sdCard_list.size(); j++) {
            File dir = new File(sdCard_list.get(j).path + YoukuPlayerConfiguration.getDownloadPath());
            if (!dir.exists())
                continue;
            String[] dirs = dir.list();
            for (int i = dirs.length - 1; i >= 0; i--) {
                String vid = dirs[i];
                DownloadInfo info = getDownloadInfoBySavePath(sdCard_list
                        .get(j).path + YoukuPlayerConfiguration.getDownloadPath() + vid + "/");
                if (info != null
                        && info.getState() != DownloadInfo.STATE_FINISH
                        && info.getState() != DownloadInfo.STATE_CANCEL) {
                    info.downloadListener = new DownloadListenerImpl(context,
                            info);
                    downloadingData.put(info.taskId, info);
                }
            }
        }
        return downloadingData;
    }
    
}