sourcegit/src/ViewModels/Archive.cs

63 lines
2 KiB
C#
Raw Normal View History

using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Threading.Tasks;
namespace SourceGit.ViewModels {
public class Archive : Popup {
[Required(ErrorMessage = "Output file name is required")]
public string SaveFile {
get => _saveFile;
set => SetProperty(ref _saveFile, value, true);
}
public object BasedOn {
get;
private set;
}
public Archive(Repository repo, Models.Branch branch) {
_repo = repo;
_revision = branch.Head;
_saveFile = $"archive-{Path.GetFileNameWithoutExtension(branch.Name)}.zip";
BasedOn = branch;
View = new Views.Archive() { DataContext = this };
}
public Archive(Repository repo, Models.Commit commit) {
_repo = repo;
_revision = commit.SHA;
_saveFile = $"archive-{commit.SHA.Substring(0,10)}.zip";
BasedOn = commit;
View = new Views.Archive() { DataContext = this };
}
public Archive(Repository repo, Models.Tag tag) {
_repo = repo;
_revision = tag.SHA;
_saveFile = $"archive-{tag.Name}.zip";
BasedOn = tag;
View = new Views.Archive() { DataContext = this };
}
public override Task<bool> Sure() {
_repo.SetWatcherEnabled(false);
ProgressDescription = "Archiving ...";
return Task.Run(() => {
var succ = new Commands.Archive(_repo.FullPath, _revision, _saveFile, SetProgressDescription).Exec();
CallUIThread(() => {
_repo.SetWatcherEnabled(true);
if (succ) App.SendNotification(_repo.FullPath, $"Save archive to : {_saveFile}");
});
return succ;
});
}
private Repository _repo = null;
private string _saveFile = string.Empty;
private string _revision = string.Empty;
}
}