private bool SetJsonInfo() { // Create the sidecar json object SidecarJson ??= new SidecarFileJsonSchema(); // Schema version SidecarJson.SchemaVersion = SidecarFileJsonSchema.CurrentSchemaVersion; // Media file info MediaFileInfo.Refresh(); SidecarJson.MediaLastWriteTimeUtc = MediaFileInfo.LastWriteTimeUtc; SidecarJson.MediaLength = MediaFileInfo.Length; SidecarJson.MediaHash = ComputeHash(); // Tool version info SidecarJson.FfProbeToolVersion = Tools.FfProbe.Info.Version; SidecarJson.MkvMergeToolVersion = Tools.MkvMerge.Info.Version; SidecarJson.MediaInfoToolVersion = Tools.MediaInfo.Info.Version; // Compressed tool info SidecarJson.FfProbeInfoData = StringCompression.Compress(FfProbeInfoJson); SidecarJson.MkvMergeInfoData = StringCompression.Compress(MkvMergeInfoJson); SidecarJson.MediaInfoData = StringCompression.Compress(MediaInfoXml); // State // TODO: Only update tool and file info if changed, else just update state SidecarJson.State = State; return(true); }
private bool IsMediaCurrent(bool log) { // Refresh file info MediaFileInfo.Refresh(); // Compare media attributes bool mismatch = false; if (MediaFileInfo.LastWriteTimeUtc != SidecarJson.MediaLastWriteTimeUtc) { // Ignore LastWriteTimeUtc, it is unreliable over SMB // mismatch = true; if (log) { Log.Logger.Warning("Sidecar LastWriteTimeUtc out of sync with media file : {SidecarJsonMediaLastWriteTimeUtc} != {MediaFileLastWriteTimeUtc} : {FileName}", SidecarJson.MediaLastWriteTimeUtc, MediaFileInfo.LastWriteTimeUtc, SidecarFileInfo.Name); } } if (MediaFileInfo.Length != SidecarJson.MediaLength) { mismatch = true; if (log) { Log.Logger.Warning("Sidecar FileLength out of sync with media file : {SidecarJsonMediaLength} != {MediaFileLength} : {FileName}", SidecarJson.MediaLength, MediaFileInfo.Length, SidecarFileInfo.Name); } } string hash = ComputeHash(); if (!string.Equals(hash, SidecarJson.MediaHash, StringComparison.OrdinalIgnoreCase)) { mismatch = true; if (log) { Log.Logger.Warning("Sidecar SHA256 out of sync with media file : {SidecarJsonHash} != {MediaFileHash} : {FileName}", SidecarJson.MediaHash, hash, SidecarFileInfo.Name); } } return(!mismatch); }