mirror of
https://github.com/Tribufu/ServerManagers
synced 2026-08-08 04:01:05 +00:00
242 lines
9.3 KiB
C#
242 lines
9.3 KiB
C#
using ServerManagerTool.Common.Model;
|
|
using ServerManagerTool.Common.Utils;
|
|
using ServerManagerTool.Utils;
|
|
using System;
|
|
using System.Windows;
|
|
using WPFSharp.Globalizer;
|
|
|
|
namespace ServerManagerTool.Lib
|
|
{
|
|
public class ModDetail : DependencyObject
|
|
{
|
|
private readonly GlobalizedApplication _globalizer = GlobalizedApplication.Instance;
|
|
|
|
public static readonly DependencyProperty AppIdProperty = DependencyProperty.Register(nameof(AppId), typeof(string), typeof(ModDetail), new PropertyMetadata(string.Empty));
|
|
public static readonly DependencyProperty IndexProperty = DependencyProperty.Register(nameof(Index), typeof(int), typeof(ModDetail), new PropertyMetadata(0));
|
|
public static readonly DependencyProperty IsFirstProperty = DependencyProperty.Register(nameof(IsFirst), typeof(bool), typeof(ModDetail), new PropertyMetadata(false));
|
|
public static readonly DependencyProperty IsLastProperty = DependencyProperty.Register(nameof(IsLast), typeof(bool), typeof(ModDetail), new PropertyMetadata(false));
|
|
public static readonly DependencyProperty LastWriteTimeProperty = DependencyProperty.Register(nameof(LastWriteTime), typeof(DateTime), typeof(ModDetail), new PropertyMetadata(DateTime.MinValue));
|
|
public static readonly DependencyProperty LastTimeUpdatedProperty = DependencyProperty.Register(nameof(LastTimeUpdated), typeof(int), typeof(ModDetail), new PropertyMetadata(0));
|
|
public static readonly DependencyProperty ModIdProperty = DependencyProperty.Register(nameof(ModId), typeof(string), typeof(ModDetail), new PropertyMetadata(string.Empty));
|
|
public static readonly DependencyProperty ModTypeProperty = DependencyProperty.Register(nameof(ModType), typeof(string), typeof(ModDetail), new PropertyMetadata(ModUtils.MODTYPE_UNKNOWN));
|
|
public static readonly DependencyProperty ModTypeStringProperty = DependencyProperty.Register(nameof(ModTypeString), typeof(string), typeof(ModDetail), new PropertyMetadata(string.Empty));
|
|
public static readonly DependencyProperty ModUrlProperty = DependencyProperty.Register(nameof(ModUrl), typeof(string), typeof(ModDetail), new PropertyMetadata(string.Empty));
|
|
public static readonly DependencyProperty TimeUpdatedProperty = DependencyProperty.Register(nameof(TimeUpdated), typeof(int), typeof(ModDetail), new PropertyMetadata(0));
|
|
public static readonly DependencyProperty TitleProperty = DependencyProperty.Register(nameof(Title), typeof(string), typeof(ModDetail), new PropertyMetadata(string.Empty));
|
|
public static readonly DependencyProperty IsValidProperty = DependencyProperty.Register(nameof(IsValid), typeof(bool), typeof(ModDetail), new PropertyMetadata(false));
|
|
|
|
public string AppId
|
|
{
|
|
get { return (string)GetValue(AppIdProperty); }
|
|
set { SetValue(AppIdProperty, value); }
|
|
}
|
|
|
|
public int Index
|
|
{
|
|
get { return (int)GetValue(IndexProperty); }
|
|
set { SetValue(IndexProperty, value); }
|
|
}
|
|
|
|
public bool IsFirst
|
|
{
|
|
get { return (bool)GetValue(IsFirstProperty); }
|
|
set { SetValue(IsFirstProperty, value); }
|
|
}
|
|
|
|
public bool IsLast
|
|
{
|
|
get { return (bool)GetValue(IsLastProperty); }
|
|
set { SetValue(IsLastProperty, value); }
|
|
}
|
|
|
|
public DateTime LastWriteTime
|
|
{
|
|
get { return (DateTime)GetValue(LastWriteTimeProperty); }
|
|
set { SetValue(LastWriteTimeProperty, value); }
|
|
}
|
|
|
|
public int LastTimeUpdated
|
|
{
|
|
get { return (int)GetValue(LastTimeUpdatedProperty); }
|
|
set { SetValue(LastTimeUpdatedProperty, value); }
|
|
}
|
|
|
|
public string ModId
|
|
{
|
|
get { return (string)GetValue(ModIdProperty); }
|
|
set { SetValue(ModIdProperty, value); }
|
|
}
|
|
|
|
public string ModType
|
|
{
|
|
get { return (string)GetValue(ModTypeProperty); }
|
|
set
|
|
{
|
|
SetValue(ModTypeProperty, value);
|
|
SetModTypeString();
|
|
}
|
|
}
|
|
|
|
public string ModTypeString
|
|
{
|
|
get { return (string)GetValue(ModTypeStringProperty); }
|
|
set { SetValue(ModTypeStringProperty, value); }
|
|
}
|
|
|
|
public int TimeUpdated
|
|
{
|
|
get { return (int)GetValue(TimeUpdatedProperty); }
|
|
set { SetValue(TimeUpdatedProperty, value); }
|
|
}
|
|
|
|
public string Title
|
|
{
|
|
get { return (string)GetValue(TitleProperty); }
|
|
set
|
|
{
|
|
SetValue(TitleProperty, value);
|
|
|
|
TitleFilterString = value?.ToLower();
|
|
}
|
|
}
|
|
|
|
public bool IsValid
|
|
{
|
|
get { return (bool)GetValue(IsValidProperty); }
|
|
set { SetValue(IsValidProperty, value); }
|
|
}
|
|
|
|
|
|
public bool IsValidModType => !string.IsNullOrWhiteSpace(ModType) && (ModType.Equals(ModUtils.MODTYPE_MAP) || ModType.Equals(ModUtils.MODTYPE_MOD));
|
|
|
|
public string LastWriteTimeString => LastWriteTime == DateTime.MinValue ? string.Empty : LastWriteTime.ToString();
|
|
|
|
public string LastWriteTimeSortString => LastWriteTime == DateTime.MinValue ? string.Empty : LastWriteTime.ToString("yyyyMMdd_HHmmss");
|
|
|
|
public string MapName { get; set; }
|
|
|
|
public string ModUrl => $"https://steamcommunity.com/sharedfiles/filedetails/?id={ModId}";
|
|
|
|
public string TimeUpdatedString => TimeUpdated <= 0 ? string.Empty : DateTimeUtils.UnixTimeStampToDateTime(TimeUpdated).ToString();
|
|
|
|
public string TimeUpdatedSortString => TimeUpdated <= 0 ? string.Empty : DateTimeUtils.UnixTimeStampToDateTime(TimeUpdated).ToString("yyyyMMdd_HHmmss");
|
|
|
|
public string TitleFilterString
|
|
{
|
|
get;
|
|
private set;
|
|
}
|
|
|
|
public bool UpToDate => !IsValid && TimeUpdated == -1 || LastTimeUpdated > 0 && LastTimeUpdated == TimeUpdated;
|
|
|
|
public long FolderSize { get; set; }
|
|
|
|
public string FolderSizeString
|
|
{
|
|
get
|
|
{
|
|
// GB
|
|
var divisor = Math.Pow(1024, 3);
|
|
if (FolderSize > divisor)
|
|
return $"{FolderSize / divisor:N2} GB";
|
|
|
|
// MB
|
|
divisor = Math.Pow(1024, 2);
|
|
if (FolderSize > divisor)
|
|
return $"{FolderSize / divisor:N2} MB";
|
|
|
|
// KB
|
|
divisor = Math.Pow(1024, 1);
|
|
if (FolderSize > divisor)
|
|
return $"{FolderSize / divisor:N2} KB";
|
|
|
|
return $"{FolderSize} B";
|
|
}
|
|
}
|
|
|
|
public void PopulateExtended(string modsRootFolder)
|
|
{
|
|
var modExtended = new ModDetailExtended(ModId);
|
|
modExtended.PopulateExtended(modsRootFolder);
|
|
PopulateExtended(modExtended);
|
|
}
|
|
|
|
public void PopulateExtended(ModDetailExtended extended)
|
|
{
|
|
LastTimeUpdated = extended.LastTimeUpdated;
|
|
LastWriteTime = extended.LastWriteTime;
|
|
MapName = extended.MapName;
|
|
ModType = extended.ModType;
|
|
FolderSize = extended.FolderSize;
|
|
}
|
|
|
|
public void SetModTypeString()
|
|
{
|
|
if (string.IsNullOrWhiteSpace(ModType))
|
|
ModTypeString = _globalizer.GetResourceString("ModType_Unknown");
|
|
|
|
switch (ModType)
|
|
{
|
|
case ModUtils.MODTYPE_MAP:
|
|
ModTypeString = _globalizer.GetResourceString("ModType_Map");
|
|
break;
|
|
|
|
case ModUtils.MODTYPE_MOD:
|
|
ModTypeString = _globalizer.GetResourceString("ModType_Mod");
|
|
break;
|
|
|
|
default:
|
|
if (string.IsNullOrWhiteSpace(AppId))
|
|
ModTypeString = _globalizer.GetResourceString("ModType_Unknown");
|
|
else
|
|
ModTypeString = _globalizer.GetResourceString("ModType_NotDownloaded");
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
public static ModDetail GetModDetail(PublishedFileDetail detail)
|
|
{
|
|
var result = new ModDetail()
|
|
{
|
|
AppId = detail.creator_app_id,
|
|
ModId = detail.publishedfileid,
|
|
TimeUpdated = detail.time_updated,
|
|
Title = detail.title,
|
|
IsValid = true,
|
|
};
|
|
return result;
|
|
}
|
|
|
|
public static ModDetail GetModDetail(WorkshopFileDetail detail)
|
|
{
|
|
var result = new ModDetail()
|
|
{
|
|
AppId = detail.creator_appid,
|
|
ModId = detail.publishedfileid,
|
|
TimeUpdated = detail.time_updated,
|
|
Title = detail.title,
|
|
IsValid = true,
|
|
};
|
|
return result;
|
|
}
|
|
|
|
public static ModDetail GetModDetail(WorkshopFileItem detail)
|
|
{
|
|
var result = new ModDetail()
|
|
{
|
|
AppId = detail.AppId,
|
|
ModId = detail.WorkshopId,
|
|
TimeUpdated = detail.TimeUpdated,
|
|
Title = detail.Title,
|
|
IsValid = true,
|
|
};
|
|
return result;
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return $"{ModId} - {Title}";
|
|
}
|
|
}
|
|
}
|