using LitJson;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEditor;
using UnityEngine;
#if UNITY_EDITOR
using YooAsset.Editor;
#endif
public class VersionUtils
{
#if UNITY_EDITOR
//static string VersionPackagePath => $"{Application.dataPath}/../Bundles/assets_version_info.json";
static string VersionPackagePath
{
get
{
if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android)
{
return $"E:\\nginx-1.27.5\\html\\CDN\\Android\\v1.0\\assets_version_info.json";
}
else if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS)
{
return $"F:\\nginx-1.27.5\\html\\CDN\\IPhone\\v1.0\\assets_version_info.json";
}
else if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows ||
EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows64 ||
EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneOSX ||
EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneLinux64)
{
return $"F:\\nginx-1.27.5\\html\\CDN\\PC\\v1.0\\assets_version_info.json";
}
else
{
Debug.LogError("��ǰƽ̨�Ȳ��ǰ���iOS��Ҳ���� PC �༭��ģʽ");
return "";
}
}
}
///
/// ��ȡ�����б�
///
public static List GetPackageList()
{
// ��ȡ�����ļ�ʵ��
string guidStr = AssetDatabase.FindAssets("AssetBundleCollectorSetting t:ScriptableObject")[0];
string assetPath = AssetDatabase.GUIDToAssetPath(guidStr);
var setting = AssetDatabase.LoadAssetAtPath(assetPath);
if (setting != null)
return setting.Packages;
return null;
}
#endif
///
/// ��� �����汾�ļ�
///
public static void CheckYooPackagesVersion()
{
#if UNITY_EDITOR
var packageList = GetPackageList();
if (packageList != null)
{
//��ȡ������
Yoo_Package_Info nowVersion = null;
if (File.Exists(VersionPackagePath))
{
// ָ�������ȡ
using (StreamReader reader = new StreamReader(VersionPackagePath, Encoding.UTF8))
{
var str = reader.ReadToEnd();
try
{
nowVersion = JsonMapper.ToObject(str);
}
catch (System.Exception)
{
nowVersion = null;
}
}
}
//����������
Dictionary dic = new Dictionary();
if (nowVersion != null && nowVersion.packages != null)
foreach (var item in nowVersion.packages)
if (!string.IsNullOrEmpty(item.name))
dic.Add(item.name, item.version);
var yooPackageInfo = new Yoo_Package_Info();
yooPackageInfo.packages = new List();
bool isChange = false;
for (int i = 0; i < packageList.Count; i++)
{
var item = new Yoo_Package_Info_Item();
item.name = packageList[i].PackageName;
if (dic.ContainsKey(item.name))
item.version = dic[item.name];
else
{
isChange = true;
item.version = 0;
}
yooPackageInfo.packages.Add(item);
}
if (isChange)
SetYooPackageVersion(yooPackageInfo);
}
#endif
}
///
/// ��ȡ���ذ汾�ļ�
///
public static Yoo_Package_Info GetYooPackageVersion()
{
Yoo_Package_Info nowVersion = null;
#if UNITY_EDITOR
if (!File.Exists(VersionPackagePath))
CheckYooPackagesVersion();
// ָ�������ȡ
using (StreamReader reader = new StreamReader(VersionPackagePath, Encoding.UTF8))
{
var str = reader.ReadToEnd();
nowVersion = JsonMapper.ToObject(str);
}
#endif
return nowVersion;
}
///
/// ���ñ��ذ汾�ļ�
///
public static void SetYooPackageVersion(Yoo_Package_Info nowVersion)
{
#if UNITY_EDITOR
// ȷ��Ŀ¼����
string directoryPath = Path.GetDirectoryName(VersionPackagePath);
if (!Directory.Exists(directoryPath))
Directory.CreateDirectory(directoryPath);
File.WriteAllText(VersionPackagePath, JsonMapper.ToJson(nowVersion));
#endif
}
///
/// ��ȡjson�汾�ļ�
///
public static Yoo_Package_Info GetToVersion(string json)
{
var info = JsonMapper.ToObject(json);
return info;
}
///
/// ��ȡ���汾��
///
public static int GetPackageVersion(string name)
{
var version = GetYooPackageVersion();
foreach (var item in version.packages)
if (item.name == name) return item.version;
return 0;
}
///
/// ���汾��+1
///
public static int PackageVesion_Add1(string name)
{
var version = GetYooPackageVersion();
foreach (var item in version.packages)
{
if (item.name == name)
{
item.version++;
SetYooPackageVersion(version);
return item.version;
}
}
version.packages.Add(new Yoo_Package_Info_Item { name = name, version = 0});
SetYooPackageVersion(version);
return 0;
}
///
/// ��Դ�ܰ汾��+1
///
public static int PackageTotalVersion_Add1()
{
var version = GetYooPackageVersion();
version.packageVersion++;
SetYooPackageVersion(version);
return version.packageVersion;
}
}
///
/// �汾��Ϣ
///
public class Yoo_Package_Info
{
///
/// ����Դ�汾 ÿ��1����Դ����Դ�汾+1
///
public int packageVersion;
///
/// YooAsset Package ��Դ�汾
///
public List packages;
}
public class Yoo_Package_Info_Item
{
///
/// ����
///
public string name;
///
/// ���汾�� ÿ��1�Σ��汾��+1
///
public int version;
///
/// �Ƿ��������ļ�ϵͳ��ʼ��
/// true ����ʼ����ȡStreamingAssets/yoo/DefaultPackage�µ��ļ��嵥 ��ע��apk��StreamingAssets�±�����嵥�ļ�������������ᱨ����
/// false ����ʼ����ȡCDN�ϵ��嵥�ļ����ȸ����̡�
///
public bool isBuildinFileSystem = false;
}