using starter.viewmodel.common;
using System;
using System.Windows;
using System.Windows.Forms;
using Downloader;
using MessageBox = System.Windows.MessageBox;
using System.Configuration;
namespace starter.viewmodel.settings
{
public class SettingsViewModel : NotificationObject
{
///
/// Model object
///
private SettingsModel obj = new SettingsModel();
///
/// initializer
///
public SettingsViewModel()
{
//Program.Tencent_cos_download.UpdateHash();
if (Downloader.Program.Tencent_cos_download.CheckAlreadyDownload())
{
obj.checkUpdate();
Status = SettingsModel.Status.login;
this.RaisePropertyChanged("WindowWidth");
//TODO:在启动时立刻检查更新,确保选手启动最新版选手包
//TODO:若有更新,将启动键改为更新键;
//TODO:相应地,使用login界面启动;
//TODO:结构:上方为登录框架,下方有“修改选手包”按钮
}
else
{
Route = Environment.GetEnvironmentVariable("USERPROFILE") + "\\THUAI6";
Status = SettingsModel.Status.newUser;
this.RaisePropertyChanged("WindowWidth");
}
}
//TODO:参赛界面:包括上传参赛代码、申请对战
//TODO:界面中应包含上次对战完成提示及下载回放按钮
public int ExtraColumn
{
get
{
if (Status == SettingsModel.Status.newUser || Status == SettingsModel.Status.move)
return 75;
else
return 0;
}
}
public int WindowWidth
{
get
{
switch (Status)
{
case SettingsModel.Status.newUser:
return 505;
case SettingsModel.Status.move:
return 505;
case SettingsModel.Status.working:
return 435;
case SettingsModel.Status.successful:
return 435;
default:
return 355;
}
}
}
public SettingsModel.Status Status
{
get
{
return obj.status;
}
set
{
obj.status = value;
this.RaisePropertyChanged("ExtraColumn");
this.RaisePropertyChanged("Intro");
this.RaisePropertyChanged("RouteBoxIntro");
this.RaisePropertyChanged("LoginVis");
this.RaisePropertyChanged("MenuVis");
this.RaisePropertyChanged("RouteBoxVis");
this.RaisePropertyChanged("ProgressVis");
//TODO: Thread will be taken by process working and window will not refresh.
this.RaisePropertyChanged("CompleteVis");
this.RaisePropertyChanged("WindowWidth");
this.RaisePropertyChanged("WebVis");
}
}
public string Intro
{
get
{
switch (Status)
{
case SettingsModel.Status.newUser:
return "欢迎使用选手包,请选择你想要安装选手包的位置:";
case SettingsModel.Status.menu:
return "你已经安装了选手包,请选择想要进行的操作:";
case SettingsModel.Status.login:
return "使用EESAST账号登录";
case SettingsModel.Status.web:
return "THUAI6 赛场:";
case SettingsModel.Status.disconnected:
return "你可能没有连接到网络,无法下载/更新选手包";
case SettingsModel.Status.error:
return "我们遇到了一些问题,请向[]反馈";
default:
return "";
}
}
}
public string RouteBoxIntro
{
get
{
switch (Status)
{
case SettingsModel.Status.newUser:
return "将主体程序安装在:";
case SettingsModel.Status.move:
return "将主体程序移动到:";
default:
return "";
}
}
}
public string Route
{
get => obj.Route;
set
{
obj.Route = value;
this.RaisePropertyChanged("Route");
}
}
public string Username
{
get => obj.Username;
set
{
obj.Username = value;
this.RaisePropertyChanged("Username");
}
}
public string Password
{
get => obj.Password;
set
{
obj.Password = value;
this.RaisePropertyChanged("Password");
}
}
public string CodeName
{
get
{
return obj.CodeRoute.Substring(obj.CodeRoute.LastIndexOf('/') == -1 ? obj.CodeRoute.LastIndexOf('\\') + 1 : obj.CodeRoute.LastIndexOf('/') + 1);
}
}
public Visibility MenuVis
{
get
{
return Status == SettingsModel.Status.menu ? Visibility.Visible : Visibility.Collapsed;
}
}
public Visibility RouteBoxVis
{
get
{
return (Status == SettingsModel.Status.newUser || Status == SettingsModel.Status.move) ? Visibility.Visible : Visibility.Collapsed;
}
}
public Visibility LoginVis
{
get
{
return Status == SettingsModel.Status.login ? Visibility.Visible : Visibility.Collapsed;
}
}
public Visibility ProgressVis
{
get
{
return Status == SettingsModel.Status.working ? Visibility.Visible : Visibility.Collapsed;
}
}
public Visibility CompleteVis
{
get
{
return Status == SettingsModel.Status.successful ? Visibility.Visible : Visibility.Collapsed;
}
}
public Visibility WebVis
{
get
{
return Status == SettingsModel.Status.web ? Visibility.Visible : Visibility.Collapsed;
}
}
public Visibility CoverVis
{
get
{
return Status == SettingsModel.Status.web && !obj.UploadReady ? Visibility.Visible : Visibility.Collapsed;
}
}
public Visibility LoginFailVis
{
get
{
return obj.LoginFailed ? Visibility.Visible : Visibility.Collapsed;
}
}
public Visibility MatchFinishedVis
{
get
{
return obj.CombatCompleted ? Visibility.Visible : Visibility.Collapsed;
}
}
public Visibility UploadReadyVis
{
get { return obj.UploadReady ? Visibility.Visible : Visibility.Collapsed; }
}
public string UpdateBtnCont
{
get
{
return obj.UpdatePlanned ? "Update" : "Check Updates";
}
}
public string UpdateInfo
{
get
{
if (obj.UpdatePlanned)
return obj.Updates;
else
return "";
}
}
public string LaunchBtnCont
{
get
{
return obj.UpdatePlanned ? "更新" : "启动";
}
}
public string UploadBtnCont
{
get
{
return obj.UploadReady ? "上传代码" : "选择代码上传";
}
}
public string RouteSelectWindow(string type)
{
if (type == "Folder")
{
using (FolderBrowserDialog dialog = new FolderBrowserDialog())
{
_ = dialog.ShowDialog();
if (dialog.SelectedPath != String.Empty)
return dialog.SelectedPath;
}
}
else if (type == "File")
{
var openFileDialog = new Microsoft.Win32.OpenFileDialog()
{
Filter = "c++ Source Files (.cpp)|*.cpp|c++ Header File (.h)|*.h|python Source File (.py)|*.py"
};
var result = openFileDialog.ShowDialog();
if (result == true)
{
return openFileDialog.FileName;
}
}
return "";
}
private BaseCommand clickBrowseCommand;
public BaseCommand ClickBrowseCommand
{
get
{
if (clickBrowseCommand == null)
{
clickBrowseCommand = new BaseCommand(new Action