You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
240 lines
9.3 KiB
240 lines
9.3 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Tiobon.PublishHelper
|
|
{
|
|
public partial class Form_VersionFolder : Form
|
|
{
|
|
string publishName = string.Empty;
|
|
public Form_VersionFolder(string name)
|
|
{
|
|
InitializeComponent();
|
|
publishName = name;
|
|
}
|
|
|
|
private void Form_VersionFile_Load(object sender, EventArgs e)
|
|
{
|
|
this.Text = $"版本文件夹管理 - {publishName}";
|
|
RefreshView();
|
|
}
|
|
|
|
private void RefreshView()
|
|
{
|
|
listView_VersionFolder.Items.Clear();
|
|
Utility.m_PublishServers.Where(o => o.Name == publishName).FirstOrDefault()
|
|
?.Folders
|
|
.OrderByDescending(o => o.CreateTime)
|
|
.ToList()
|
|
?.ForEach(o =>
|
|
{
|
|
ListViewItem item = new ListViewItem();
|
|
item.SubItems[0].Text = o.FolderName;
|
|
item.SubItems.Add(o.Size.ToString());
|
|
item.SubItems.Add(o.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"));
|
|
item.SubItems.Add(o.Files.Count.ToString());
|
|
listView_VersionFolder.Items.Add(item);
|
|
});
|
|
}
|
|
|
|
private void tsmi_Delete_Click(object sender, EventArgs e)
|
|
{
|
|
if (this.listView_VersionFolder.SelectedItems.Count <= 0)
|
|
{
|
|
return;
|
|
}
|
|
if (MessageBox.Show("本操作将同步操作服务端文件,是否确认删除?", "提示", MessageBoxButtons.YesNo) != DialogResult.Yes)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var foldername = this.listView_VersionFolder.SelectedItems[0].Text;
|
|
var server = Utility.m_PublishServers.Where(o => o.Name == publishName).FirstOrDefault();
|
|
if (!(server is null))
|
|
{
|
|
if (!Utility.Ping(server.Ip))
|
|
{
|
|
MessageBox.Show("网络连接失败!", "提示");
|
|
return;
|
|
}
|
|
this.Cursor = Cursors.WaitCursor;
|
|
|
|
try
|
|
{
|
|
//移除远端文件
|
|
SshHelper.ExcuteCmd(server, $"sudo rm -rf /home/{server.UserName}/ihdis/packages/versions/{foldername}", true);
|
|
|
|
//移除配置
|
|
var item = server.Folders.Where(o => o.FolderName == this.listView_VersionFolder.SelectedItems[0].Text).FirstOrDefault();
|
|
if (!(item is null))
|
|
{
|
|
server.Folders.Remove(item);
|
|
Utility.SaveDevServer();
|
|
RefreshView();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Utility.SendLog("", $"删除失败:{ex}");
|
|
}
|
|
Utility.SendLog("", $"删除成功");
|
|
this.Cursor = Cursors.Default;
|
|
}
|
|
}
|
|
|
|
private void ll_Sync_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
var server = Utility.m_PublishServers.Where(o => o.Name == publishName).FirstOrDefault();
|
|
if (server is null)
|
|
return;
|
|
if (!Utility.Ping(server.Ip))
|
|
{
|
|
MessageBox.Show("网络连接失败!", "提示");
|
|
return;
|
|
}
|
|
this.Cursor = Cursors.WaitCursor;
|
|
try
|
|
{
|
|
var folders = SftpHelper.ListDirectory(server, $"/home/{server.UserName}/ihdis/packages/versions/");
|
|
folders.ForEach(f =>
|
|
{
|
|
var folder = new VersionFolder
|
|
{
|
|
FolderName = f.Name,
|
|
Size = f.Length,
|
|
CreateTime = f.LastWriteTime,
|
|
Files = new List<VersionFile>()
|
|
};
|
|
var item = server.Folders.Where(o => o.FolderName == f.Name).FirstOrDefault();
|
|
|
|
if (item is null)
|
|
{
|
|
server.Folders.Add(folder);
|
|
Utility.SendLog("同步", $"发现新文件夹 {folder.FolderName}");
|
|
}
|
|
else
|
|
{
|
|
//已有文件大小与时间是否一致
|
|
if (item.Size != folder.Size)
|
|
{
|
|
Utility.SendLog("同步", $"文件夹 {folder.FolderName} 文件大小不一致 {item.Size},更新为实际大小 {folder.Size}");
|
|
item.Size = folder.Size;
|
|
}
|
|
if (item.CreateTime.ToString("yyyy-MM-dd HH:mm:ss") != folder.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"))
|
|
{
|
|
Utility.SendLog("同步", $"文件夹 {folder.FolderName} 创建时间不一致 {item.CreateTime:yyyy-MM-dd HH:mm:ss},更新为实际创建时间 {folder.CreateTime:yyyy-MM-dd HH:mm:ss}");
|
|
item.CreateTime = folder.CreateTime;
|
|
}
|
|
}
|
|
});
|
|
|
|
var notExsit = new List<VersionFolder>();
|
|
var fs = folders.Select(o => o.Name).ToList();
|
|
server.Folders.ForEach(f =>
|
|
{
|
|
if (!fs.Contains(f.FolderName))
|
|
{
|
|
notExsit.Add(f);
|
|
}
|
|
});
|
|
notExsit.ForEach(f =>
|
|
{
|
|
server.Folders.Remove(f);
|
|
//文件不存在
|
|
Utility.SendLog("同步", $"文件夹已经不存在 {f.FolderName}");
|
|
});
|
|
server.Folders?.ForEach(f => SyscFiles(server, f));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Utility.SendLog("同步", $"同步失败:{ex}");
|
|
}
|
|
RefreshView();
|
|
Utility.SendLog("同步", $"同步完毕");
|
|
this.Cursor = Cursors.Default;
|
|
}
|
|
|
|
private void SyscFiles(PublishServer server, VersionFolder folder)
|
|
{
|
|
var files = SftpHelper.ListFiles(server, $"/home/{server.UserName}/ihdis/packages/versions/{folder.FolderName}");
|
|
files.ForEach(ftpFile =>
|
|
{
|
|
if (ftpFile.Name == "version_list" || ftpFile.Name == "version_liste" || ftpFile.Name.EndsWith("_sql.zip") || !ftpFile.Name.EndsWith(".zip"))
|
|
{
|
|
return;
|
|
}
|
|
var file = new VersionFile
|
|
{
|
|
FileName = ftpFile.Name,
|
|
Size = ftpFile.Length,
|
|
CreateTime = ftpFile.LastWriteTime
|
|
};
|
|
var item = folder.Files.Where(o => o.FileName == ftpFile.Name).FirstOrDefault();
|
|
|
|
if (item is null)
|
|
{
|
|
folder.Files.Add(file);
|
|
Utility.SendLog("同步", $"发现新文件 {file.FileName}");
|
|
}
|
|
else
|
|
{
|
|
//已有文件大小与时间是否一致
|
|
if (item.Size != file.Size)
|
|
{
|
|
Utility.SendLog("同步", $"文件 {file.FileName} 文件大小不一致 {item.Size},更新为实际大小 {file.Size}");
|
|
item.Size = file.Size;
|
|
}
|
|
if (item.CreateTime.ToString("yyyy-MM-dd HH:mm:ss") != file.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"))
|
|
{
|
|
Utility.SendLog("同步", $"文件 {file.FileName} 创建时间不一致 {item.CreateTime:yyyy-MM-dd HH:mm:ss},更新为实际创建时间 {file.CreateTime:yyyy-MM-dd HH:mm:ss}");
|
|
item.CreateTime = file.CreateTime;
|
|
}
|
|
}
|
|
});
|
|
|
|
var notExsit = new List<VersionFile>();
|
|
var fnames = files.Select(o => o.Name).ToList();
|
|
folder.Files.ForEach(file =>
|
|
{
|
|
if (!fnames.Contains(file.FileName))
|
|
{
|
|
notExsit.Add(file);
|
|
}
|
|
});
|
|
notExsit.ForEach(file =>
|
|
{
|
|
folder.Files.Remove(file);
|
|
//文件不存在
|
|
Utility.SendLog("同步", $"文件已经不存在 {file.FileName}");
|
|
});
|
|
}
|
|
|
|
private void listView_VersionFolder_MouseDoubleClick(object sender, MouseEventArgs e)
|
|
{
|
|
if (this.listView_VersionFolder.SelectedItems.Count <= 0)
|
|
{
|
|
return;
|
|
}
|
|
var server = Utility.m_PublishServers.Where(o => o.Name == publishName).FirstOrDefault();
|
|
var item = server.Folders.Where(o => o.FolderName == this.listView_VersionFolder.SelectedItems[0].Text).FirstOrDefault();
|
|
|
|
if (server is null || item is null)
|
|
return;
|
|
|
|
using (Form_VersionFile f = new Form_VersionFile(server, item))
|
|
{
|
|
f.ShowDialog();
|
|
}
|
|
Utility.SavePublishServer();
|
|
RefreshView();
|
|
}
|
|
}
|
|
}
|
|
|