private void LoadIssuesFromStorageStore() { IEnumerable <int> issuesIds = null; IssueInfo[] issueInfos = null; using (var storageHandler = Model.Access3rdPartyStorageStore(STORAGE_NAME, false)) { if (storageHandler.Storage != null) { using (var storage = storageHandler.Storage) { using (var issuesStore = storage.TryOpenStorage(ISSUES_SUB_STORAGE_NAME, false)) { if (issuesStore != null) { issuesIds = issuesStore.GetSubStreamNames().Select(n => int.Parse(n)); } } using (var stream = storage.TryOpenStream(ISSUES_SUMMARIES_STREAM_NAME, false)) { if (stream != null) { var ser = new DataContractSerializer(typeof(IssueInfo[])); issueInfos = ser.ReadObject(stream) as IssueInfo[]; } } } } } if (issuesIds == null) { issuesIds = Enumerable.Empty <int>(); } if (issueInfos == null) { issueInfos = new IssueInfo[0]; } if (!issueInfos.Select(i => i.Id).OrderBy(i => i) .SequenceEqual(issuesIds.OrderBy(i => i))) { throw new InvalidOperationException("Issues mismatch"); } m_IssuesVm = new IssuesVM(issueInfos); m_IssuesVm.Modified += OnIssuesModified; m_IssuesVm.LoadIssue += OnLoadIssue; if (Model.Visible) { ShowIssues?.Invoke(m_IssuesVm); } }
private Issue OnLoadIssue(int issueId) { using (var storageHandler = Model.Access3rdPartyStorageStore(STORAGE_NAME, false)) { using (var storage = storageHandler.Storage) { using (var issueStorage = storage.TryOpenStorage(ISSUES_SUB_STORAGE_NAME, false)) { using (var stream = issueStorage.TryOpenStream(issueId.ToString(), false)) { var ser = new DataContractSerializer(typeof(Issue)); return(ser.ReadObject(stream) as Issue); } } } } }
private void SaveIssuesToStorageStore() { var loadedIssues = m_IssuesVm.Issues.Where(i => i.IsLoaded); if (loadedIssues.Any(i => i.IsDeleted || i.IsDirty)) { using (var storageHandler = Model.Access3rdPartyStorageStore(STORAGE_NAME, true)) { using (var storage = storageHandler.Storage) { using (var stream = storage.TryOpenStream(ISSUES_SUMMARIES_STREAM_NAME, true)) { var ser = new DataContractSerializer(typeof(IssueInfo[])); ser.WriteObject(stream, m_IssuesVm.Issues .Select(i => i.Issue.GetInfo()).ToArray()); } using (var issuesStore = storage.TryOpenStorage(ISSUES_SUB_STORAGE_NAME, true)) { foreach (var removedIssue in loadedIssues.Where(i => i.IsDeleted)) { //TODO: simplify when issue #23 is implemented issuesStore.Storage.DestroyElement(removedIssue.Id.ToString()); } foreach (var modifiedIssue in loadedIssues.Where(i => !i.IsDeleted && i.IsDirty)) { using (var stream = issuesStore.TryOpenStream(modifiedIssue.Id.ToString(), true)) { var ser = new DataContractSerializer(typeof(Issue)); ser.WriteObject(stream, modifiedIssue.Issue); } } } } } } m_IssuesVm.FlushChanges(); }
private void SaveToStorageStore() { var path = SUB_STORAGE_PATH.Split('\\'); using (var storageHandler = Model.Access3rdPartyStorageStore(path[0], true)) { using (var subStorage = storageHandler.Storage.TryOpenStorage(path[1], true)) { using (var str = subStorage.TryOpenStream(TIME_STAMP_STREAM_NAME, true)) { var buffer = Encoding.UTF8.GetBytes(DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss")); str.Write(buffer, 0, buffer.Length); } using (var str = subStorage.TryOpenStream(USER_NAME_STREAM_NAME, true)) { var buffer = Encoding.UTF8.GetBytes(System.Environment.UserName); str.Write(buffer, 0, buffer.Length); } } } }
private void LoadFromStorageStore() { var path = SUB_STORAGE_PATH.Split('\\'); using (var storageHandler = Model.Access3rdPartyStorageStore(path[0], false)) { if (storageHandler.Storage != null) { using (var subStorage = storageHandler.Storage.TryOpenStorage(path[1], false)) { foreach (var subStreamName in subStorage.GetSubStreamNames()) { using (var str = subStorage.TryOpenStream(subStreamName, false)) { if (str != null) { var buffer = new byte[str.Length]; str.Read(buffer, 0, buffer.Length); var timeStamp = Encoding.UTF8.GetString(buffer); ShowMessage($"Metadata stamp of {Model.GetTitle()}: {timeStamp}"); } else { ShowMessage($"No metadata stamp stream in {Model.GetTitle()}"); } } } } } else { ShowMessage($"No metadata storage in {Model.GetTitle()}"); } } }