public static Task DeleteItem <T>( string fileName, T itemToDelete, MatchForUpdate <T> matcher) { using (var stream = FileUtils.GetReadWriteStream(fileName)) { var list = stream.ReadList <T>(); var found = false; for (int idx = 0; idx < list.Count && !found; idx++) { var item = list[idx]; bool shouldUpdate = false; (found, shouldUpdate) = matcher(item, itemToDelete); if (shouldUpdate) { list.RemoveAt(idx); } } stream.WriteList(list); } return(Task.FromResult(true)); }
public static Task InsertOrUpdate <T>( string _fileName, T itemToUpdate, MatchForUpdate <T> matcher, Func <T, T> cloneWithUpdateVersion) { using (var stream = FileUtils.GetReadWriteStream(_fileName)) { var list = stream.ReadList <T>(); var found = false; for (int idx = 0; idx < list.Count && !found; idx++) { var item = list[idx]; bool shouldUpdate = false; (found, shouldUpdate) = matcher(item, itemToUpdate); if (shouldUpdate) { list[idx] = cloneWithUpdateVersion(itemToUpdate); } } if (!found) { list.Add(cloneWithUpdateVersion(itemToUpdate)); } stream.WriteList(list); } return(Task.FromResult(true)); }
public Task <Stream> GetWriteStream(string pathKey) => Task.FromResult <Stream>( FileUtils.GetReadWriteStream( Path.Combine(_blobDirectory, pathKey)));