using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TinaX;
namespace TinaXEditor.VFSKit.Versions
{
[Serializable]
public class VersionBranch
{
[Serializable]
public enum BranchType
{
MainPackage = 0,
ExtensionGroup = 1,
}
public string BranchName;
///
/// branch type | 分支类型
///
public BranchType BType;
public XRuntimePlatform Platform;
public string Desc;
///
/// if branch type is extension group.
///
public string ExtensionGroupName;
public VersionRecord[] VersionRecords;
//==========================================================================================
private List _list_records;
private List mList_records
{
get
{
if(_list_records == null)
{
_list_records = new List();
if (VersionRecords != null) _list_records.AddRange(VersionRecords);
SortRecordsList(ref _list_records);
}
return _list_records;
}
}
public List VersionRecords_ReadWrite => mList_records;
public VersionRecord? GetMaxVersion()
{
if (mList_records.Count > 0)
{
return mList_records[mList_records.Count - 1];
}
else
{
return null;
}
}
public long GetMaxVersinCode()
{
var vr = this.GetMaxVersion();
if(vr != null)
{
return vr.Value.versionCode;
}
else
{
return -1;
}
}
public bool IsVersionCodeExists(long code)
{
return VersionRecords_ReadWrite.Any(v => v.versionCode == code);
}
public void AddVersion(ref VersionRecord vr)
{
VersionRecords_ReadWrite.Add(vr);
SortRecordsList(ref _list_records);
}
public bool TryGetVersion(long version, out VersionRecord version_record)
{
var versions = VersionRecords_ReadWrite.Where(v => v.versionCode == version);
if (versions.Count() > 0)
{
version_record = versions.First();
return true;
}
else
{
version_record = default;
return false;
}
}
public void ReadySave()
{
VersionRecords = mList_records.ToArray();
}
private void SortRecordsList(ref List list)
{
list.Sort((x, y) => x.versionCode.CompareTo(y.versionCode));
}
}
[Serializable]
public struct VersionRecord
{
public long versionCode;
public string versionName;
public string desc;
public string build_id;
}
}