public IndexStore.Record GetEntry(ulong fileHash) { Encoding.Entry encodingRecord; if (Root.TryGetByHash(fileHash, out var rootRecord)) { if (!Encoding.TryGetValue(rootRecord.MD5, out encodingRecord)) { return(null); } } else if (Install.HasFile(fileHash)) { var installEntry = Install.GetEntriesByHash(fileHash).First(); if (!Encoding.TryGetValue(installEntry.MD5, out encodingRecord)) { return(null); } } else { return(null); } if (!Indices.TryGetValue(encodingRecord.Key, out var indexEntry)) { return(new IndexStore.Record { Offset = 0, Size = -1, ArchiveIndex = -1, // Use as a marker for whole-size archives Hash = encodingRecord.Key }); } return(indexEntry); }