// Finds the DataChunk to resume from. // Skips required nr of bytes in that chunk. private async Task <DataChunk> GetResumeDataChunk( DataChunk dataChunk, FileItem fileItem, int startByteNr) { int chunkSize = dataChunk.Data.Count(); if (fileItem.FileSize < dataChunk.Data.Count()) { dataChunk.Data = dataChunk.Data.Skip(startByteNr).ToArray(); } else { int indexOfStartChunk = (int)(Math.Floor( ((float)startByteNr / (float)fileItem.FileSize) * (float)dataChunk.NumberOfChunksInSequence())); // dataChunk to resume from dataChunk = await _context.GetDataChunkAtIndex(dataChunk, indexOfStartChunk); // Skip ahead to start byte in dataChunk dataChunk.Data = dataChunk.Data.Skip( startByteNr - indexOfStartChunk * chunkSize).ToArray(); // If we skipped all bytes start resume from the begining of next chunk if (dataChunk.Data.Count() == 0) { dataChunk = await _context.GetNextDataChunk(dataChunk); } } return(dataChunk); }
public void NumberOfChunksInSequenceReturnsLastNumberInString() { // Arrange DataChunk dataChunk = new DataChunk { PartName = "test.jpg.part_8.10" }; // Act var result = dataChunk.NumberOfChunksInSequence(); // Assert Assert.Equal(10, result); }