using System;
using System.Collections.Generic;
using UnityEngine;
namespace DefaultNamespace
{
///
/// 单个文件的下载信息
///
[Serializable]
public class FileDownloadInfo
{
///
/// 文件显示名称
///
public string name;
///
/// 文件下载URL
///
public string url;
///
/// 保存的文件名
///
public string fileName;
///
/// 本地文件路径(下载后设置)
///
[NonSerialized]
public string localFilePath;
///
/// 是否已下载
///
[NonSerialized]
public bool isDownloaded;
///
/// 下载状态
///
[NonSerialized]
public DownloadStatus downloadStatus;
///
/// 错误信息(如果下载失败)
///
[NonSerialized]
public string errorMessage;
}
///
/// 下载状态枚举
///
public enum DownloadStatus
{
///
/// 未开始
///
NotStarted,
///
/// 下载中
///
Downloading,
///
/// 下载完成
///
Completed,
///
/// 下载失败
///
Failed
}
///
/// 单个考试类型的文件配置
///
[Serializable]
public class ExamFileConfig
{
///
/// 考试类型名称
///
public string examType;
///
/// 该考试类型需要下载的文件列表
///
public List files = new List();
///
/// 获取指定名称的文件信息
///
/// 文件名称
/// 文件信息,如果不存在则返回null
public FileDownloadInfo GetFileByName(string fileName)
{
return files.Find(f => f.fileName == fileName);
}
///
/// 获取已下载的文件列表
///
/// 已下载的文件列表
public List GetDownloadedFiles()
{
return files.FindAll(f => f.isDownloaded);
}
///
/// 获取所有文件的本地路径(仅已下载的文件)
///
/// 已下载文件的本地路径列表
public List GetDownloadedFilePaths()
{
var downloadedFiles = GetDownloadedFiles();
var paths = new List();
foreach (var file in downloadedFiles)
{
if (!string.IsNullOrEmpty(file.localFilePath) && System.IO.File.Exists(file.localFilePath))
{
paths.Add(file.localFilePath);
}
}
return paths;
}
///
/// 检查是否所有文件都已下载
///
/// 是否所有文件都已下载
public bool AreAllFilesDownloaded()
{
return files.TrueForAll(f => f.isDownloaded);
}
// ///
// /// 获取下载进度(0-1之间)
// ///
// /// 下载进度
// public float GetDownloadProgress()
// {
// if (files.Count == 0) return 1f;
//
// int downloadedCount = files.Count(f => f.isDownloaded);
// return (float)downloadedCount / files.Count;
// }
}
///
/// 考试文件配置管理器
///
[Serializable]
public class ExamFileConfigManager
{
///
/// 所有考试类型的文件配置
///
public List examFileConfigs = new List();
///
/// 根据考试类型获取配置
///
/// 考试类型名称
/// 考试文件配置,如果不存在则返回null
public ExamFileConfig GetConfigByExamType(string examType)
{
return examFileConfigs.Find(c => c.examType == examType);
}
///
/// 添加或更新考试配置
///
/// 考试文件配置
public void AddOrUpdateConfig(ExamFileConfig config)
{
var existingConfig = GetConfigByExamType(config.examType);
if (existingConfig != null)
{
// 更新现有配置
int index = examFileConfigs.IndexOf(existingConfig);
examFileConfigs[index] = config;
}
else
{
// 添加新配置
examFileConfigs.Add(config);
}
}
///
/// 验证配置完整性
///
/// 验证结果
public bool Validate()
{
foreach (var config in examFileConfigs)
{
if (string.IsNullOrEmpty(config.examType))
{
Debug.LogError($"考试类型名称不能为空");
return false;
}
if (config.files == null || config.files.Count == 0)
{
Debug.LogWarning($"考试类型 '{config.examType}' 没有配置任何文件");
continue;
}
foreach (var file in config.files)
{
if (string.IsNullOrEmpty(file.name))
{
Debug.LogError($"考试类型 '{config.examType}' 存在文件名称为空的情况");
return false;
}
if (string.IsNullOrEmpty(file.url))
{
Debug.LogError($"考试类型 '{config.examType}' 文件 '{file.name}' 的URL为空");
return false;
}
if (string.IsNullOrEmpty(file.fileName))
{
Debug.LogError($"考试类型 '{config.examType}' 文件 '{file.name}' 的文件名为空");
return false;
}
}
}
return true;
}
}
}