package nicelee.bilibili.downloaders;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import nicelee.bilibili.PackageScanLoader;
import nicelee.bilibili.annotations.Bilibili;
import nicelee.bilibili.enums.StatusEnum;
import nicelee.bilibili.util.HttpRequestUtil;
import nicelee.bilibili.util.Logger;

public class Downloader implements IDownloader {

	private List<IDownloader> downloaders = null;
	private IDownloader downloader = null;
	private HttpRequestUtil util;
	private StatusEnum status;

	@Override
	public boolean matches(String url) {
		return true;
	}

	@Override
	public void init(HttpRequestUtil util) {
		downloaders = new ArrayList<>();
		status = StatusEnum.NONE;
		this.util = util;

		try {
			for (Class<?> clazz : PackageScanLoader.validDownloaderClasses) {
				IDownloader downloader = (IDownloader) clazz.newInstance();
				downloader.init(util);
				downloaders.add(downloader);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public boolean download(String url, String avId, int qn, int page) {
		for (IDownloader downloader : downloaders) {
			if (downloader.matches(url)) {
				this.downloader = downloader;
				status = StatusEnum.DOWNLOADING;
				downloader.init(util);
				return downloader.download(url, avId, qn, page);
			}
		}
		System.out.print("未找到匹配当前url的下载器:");
		System.out.println(url);
		status = StatusEnum.FAIL;
		return false;
	}

	@Override
	public void startTask() {
		if (downloader != null) {
			status = StatusEnum.DOWNLOADING;
			downloader.startTask();
		} else {
			Logger.println(StatusEnum.NONE.toString());
			status = StatusEnum.NONE;
		}
	}

	@Override
	public void stopTask() {
		if (downloader != null) {
			downloader.stopTask();
		}
		status = StatusEnum.STOP;
	}

	@Override
	public File file() {
		if (downloader != null) {
			return downloader.file();
		}
		return null;
	}

	@Override
	public StatusEnum currentStatus() {
		// 如果有downloader, 以downloader为准
		if (downloader != null) {
			return downloader.currentStatus();
		} else {
			return status;
		}
	}

	@Override
	public int totalTaskCount() {
		if (downloader != null) {
			return downloader.totalTaskCount();
		}
		return 0;
	}

	@Override
	public int currentTask() {
		if (downloader != null) {
			return downloader.currentTask();
		}
		return 0;
	}

	@Override
	public long sumTotalFileSize() {
		if (downloader != null) {
			return downloader.sumTotalFileSize();
		}
		return 0;
	}

	@Override
	public long sumDownloadedFileSize() {
		if (downloader != null) {
			return downloader.sumDownloadedFileSize();
		}
		return 0;
	}

	@Override
	public long currentFileDownloadedSize() {
		if (downloader != null) {
			return downloader.currentFileDownloadedSize();
		}
		return 0;
	}

	@Override
	public long currentFileTotalSize() {
		if (downloader != null) {
			return downloader.currentFileTotalSize();
		}
		return 0;
	}

}
最近下载更多
玖零定制问题修复  LV34 3月3日
woldxy  LV12 2月19日
Seaskye  LV14 2023年11月10日
lipanlong  LV10 2023年7月6日
zhangjilu  LV18 2023年4月23日
wyx065747  LV67 2023年2月6日
快乐的程序员  LV25 2023年1月25日
Rommel  LV27 2022年11月12日
笑得很美  LV11 2022年10月27日
最代码官方  LV167 2022年10月23日
最近浏览更多
WBelong  LV7 3月28日
玖零定制问题修复  LV34 3月3日
3334004690  LV3 2月20日
woldxy  LV12 2月19日
哪里的完整版  LV7 2月1日
linfon  LV2 1月25日
shiaomon 2023年12月14日
暂无贡献等级
Seaskye  LV14 2023年11月10日
wl010101  LV9 2023年11月8日
jkjfdgbkl  LV2 2023年11月1日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友