コード例 #1
0
    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);
    }
コード例 #2
0
    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);
    }