public static async Task SaveFile( string filePath, CsfDocumentViewModel docvm, StatusCallbackHandle statusCallback = null, ProgressCallbackHandle progressCallback = null ) { await using var fs = new FileStream(filePath, FileMode.Create); var doc = new CsfDocument(); _ = statusCallback?.Invoke("Converting".GetResource(), false); _ = progressCallback?.Invoke(0, docvm.Content.Count); doc.AddRange(docvm.Content.Select((o, i) => { _ = progressCallback?.Invoke(i, docvm.Content.Count); return(o.GetLabel()); })); _ = statusCallback?.Invoke("CalculatingHeader".GetResource(), true); doc.Head = new CsfHead { Version = docvm.Version, Language = docvm.Language, Unknown = 0x5CF6_98A8, LabelCount = doc.Count, StringCount = doc.Select(n => n.Count).Sum() }; _ = statusCallback?.Invoke("WritingFile".GetResource(), false); await doc.SerializeAsync(fs, (i, j) => _ = progressCallback?.Invoke(i, j)); _ = statusCallback?.Invoke("Complete".GetResource(), false); _ = progressCallback?.Invoke(0, 1); }
public static async Task <CsfDocumentViewModel> OpenFile( string filePath, StatusCallbackHandle statusCallback = null, ProgressCallbackHandle progressCallback = null ) { await using var fs = new FileStream(filePath, FileMode.Open); statusCallback?.Invoke("ReadingFile".GetResource(), false); var csf = await CsfDocumentHelper.DeserializeAsync(fs, (i, j) => _ = progressCallback?.Invoke(i, j)); _ = statusCallback?.Invoke("Converting".GetResource(), false); return(new CsfDocumentViewModel(csf.Head.Version, csf.Head.Language, csf.Select((lbl, i) => { _ = progressCallback?.Invoke(i, csf.Count); return new CsfLabelViewModel(lbl); }))); }