public static string ForSeason(PlexXmlMetadataResponse response) { using var ms = new MemoryStream(); using var bw = new BinaryWriter(ms); // video key bw.Write(response.Key); // video added at bw.Write(response.AddedAt); // video updated at bw.Write(response.UpdatedAt); // collection ids foreach (PlexCollectionResponse collection in Optional(response.Collection).Flatten()) { bw.Write((byte)FieldKey.CollectionTag); bw.Write(collection.Tag); } // thumb if (!string.IsNullOrWhiteSpace(response.Thumb)) { bw.Write(response.Thumb); } // art if (!string.IsNullOrWhiteSpace(response.Art)) { bw.Write(response.Art); } ms.Position = 0; byte[] hash = SHA1.Create().ComputeHash(ms); return BitConverter.ToString(hash).Replace("-", string.Empty); }
public static string ForEpisode(PlexXmlMetadataResponse response) { using var ms = new MemoryStream(); using var bw = new BinaryWriter(ms); // video key bw.Write(response.Key); // video added at bw.Write(response.AddedAt); // video updated at bw.Write(response.UpdatedAt); foreach (PlexMediaResponse<PlexXmlPartResponse> media in response.Media) { // media id bw.Write((byte)FieldKey.MediaId); bw.Write(media.Id); // media part id foreach (PlexXmlPartResponse part in media.Part) { bw.Write((byte)FieldKey.PartId); bw.Write(part.Id); // media part id foreach (PlexStreamResponse stream in part.Stream) { bw.Write((byte)FieldKey.StreamId); bw.Write(stream.Id); } } } // genre ids foreach (PlexGenreResponse genre in Optional(response.Genre).Flatten()) { bw.Write((byte)FieldKey.GenreTag); bw.Write(genre.Tag); } // director ids foreach (PlexDirectorResponse director in Optional(response.Director).Flatten()) { bw.Write((byte)FieldKey.DirectorTag); bw.Write(director.Tag); } // writer ids foreach (PlexWriterResponse writer in Optional(response.Writer).Flatten()) { bw.Write((byte)FieldKey.WriterTag); bw.Write(writer.Tag); } // collection ids foreach (PlexCollectionResponse collection in Optional(response.Collection).Flatten()) { bw.Write((byte)FieldKey.CollectionTag); bw.Write(collection.Tag); } // role ids foreach (PlexRoleResponse role in Optional(response.Role).Flatten()) { bw.Write((byte)FieldKey.RoleTag); bw.Write(role.Tag); } ms.Position = 0; byte[] hash = SHA1.Create().ComputeHash(ms); return BitConverter.ToString(hash).Replace("-", string.Empty); }