Added new property NewerRoFst that checks to see if a Newer ROFst is available to DocVersion and DocVersionInfo

Corrected the logic to use the datetime of the ROFST rather than the datetime of it's folder.
Use DocVersionInfo.NewerROFst to determine if the update button is enabled.
This commit is contained in:
Rich
2013-03-29 14:22:41 +00:00
parent 1088563cec
commit 381fa7361a
3 changed files with 87 additions and 37 deletions

View File

@@ -1771,39 +1771,8 @@ namespace Volian.Controls.Library
}
public bool NewerRoFst()
{
if (_MyDVI == null || _MyDVI.DocVersionAssociations == null) return false;
ROFstInfo roFstInfo = ROFstInfo.GetJustROFst( _MyDVI.DocVersionAssociations[0].ROFstID);
RODbInfo rdi = RODbInfo.GetJustRODB(roFstInfo.RODbID);
string rofstPath = rdi.FolderPath + @"\ro.fst";
if (!File.Exists(rofstPath)) return false;
FileInfo fiRofst = new FileInfo(rofstPath);
// if the database Ro.Fst is newer or if the files have identical DTS,
// assume that they are the same file.
if (roFstInfo.DTS >= fiRofst.LastWriteTimeUtc) return false;
// next see if the data is the same size, i.e. byte count of record and byte count
// of file. If different sizes, the date/time stamp check will hold.
if (fiRofst.Length != roFstInfo.ROLookup.Length) return fiRofst.LastWriteTimeUtc > roFstInfo.DTS;
// if we can't tell by the DTS or size, compare the contents. Get all of the rodb's
// rofsts of the size of the file & compare bytes. If
ROFstInfoList fstList = ROFstInfoList.GetBySize(rdi.RODbID, (int)fiRofst.Length);
if (fstList.Count > 0)
{
FileStream fsIn = new FileStream(rofstPath, FileMode.Open, FileAccess.Read, FileShare.Read);
// Create an instance of StreamReader that can read characters from the FileStream.
BinaryReader r = new BinaryReader(fsIn);
byte[] ab = r.ReadBytes((int)fsIn.Length);
fsIn.Close();
foreach (ROFstInfo irofst in fstList)
{
// compare contents by comparing each byte.
for (int i = 0; i < fiRofst.Length; i++)
if (ab[i] != irofst.ROLookup[i]) return true;
}
}
return false;
if (_MyDVI == null)return false;
return _MyDVI.NewerRoFst;
}
public void SetUpdRoValBtn(bool en)
{