Esempio n. 1
0
        // 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);
        }