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:
@@ -14,12 +14,52 @@ using System.Data.SqlClient;
|
||||
using Csla;
|
||||
using Csla.Data;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
//using VEPROMS.Properties;
|
||||
|
||||
namespace VEPROMS.CSLA.Library
|
||||
{
|
||||
public partial class DocVersion: IVEDrillDown
|
||||
{
|
||||
public bool NewerRoFst
|
||||
{
|
||||
get
|
||||
{
|
||||
if (DocVersionAssociations == null) return false;
|
||||
ROFstInfo roFstInfo = ROFstInfo.GetJustROFst(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;
|
||||
}
|
||||
}
|
||||
#region VersionType
|
||||
public VersionTypeEnum eVersionType
|
||||
{
|
||||
@@ -124,6 +164,46 @@ namespace VEPROMS.CSLA.Library
|
||||
}
|
||||
public partial class DocVersionInfo : IVEDrillDownReadOnly
|
||||
{
|
||||
public bool NewerRoFst
|
||||
{
|
||||
get
|
||||
{
|
||||
if (DocVersionAssociations == null) return false;
|
||||
ROFstInfo roFstInfo = ROFstInfo.GetJustROFst(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;
|
||||
}
|
||||
}
|
||||
|
||||
#region SearchPaths
|
||||
public string _SearchDVPath;
|
||||
public string SearchDVPath
|
||||
|
Reference in New Issue
Block a user