Esempio n. 1
0
        /// <summary>
        /// Denna metoden tar in en fil som användaren har valt,
        /// filen läses in som en temporär fil på hårddisken och tas bort så fort den inte behövs mer.
        /// Använder OpenReadStream(20000000) då filen var större än default värdet.
        /// När datan har lästs in från fil, skapar vi upp entiteter som läggs i en lista
        /// som vi sedan skickar in till databasen och sparar.
        /// </summary>
        /// <param name="browserFile">Filen som användaren har valt.</param>
        /// <returns>En boolean på om det lyckats eller inte.</returns>
        public async Task <bool> ConvertAndAdd(IBrowserFile browserFile)
        {
            var dataList = new List <TemperatureReading>();
            var filePath = Path.GetTempFileName();

            using (var stream = File.Create(filePath))
            {
                await browserFile.OpenReadStream(20000000).CopyToAsync(stream);
            }

            var data = await File.ReadAllLinesAsync(filePath);

            File.Delete(filePath);

            for (int i = 0; i < data.Length; i++)
            {
                var item = data[i];
                if (item != null)
                {
                    var splittedData = item.Split(",");

                    if (splittedData.Length == 4)
                    {
                        try
                        {
                            TemperatureReading temperatureReading = new TemperatureReading()
                            {
                                Date        = DateTime.Parse(splittedData[0].Replace(" ", "T")),
                                Thermometer = splittedData[1],
                                Temperature = double.Parse(splittedData[2], NumberFormatInfo.InvariantInfo),
                                Humidity    = int.Parse(splittedData[3])
                            };
                            dataList.Add(temperatureReading);
                        }
                        catch (Exception e)
                        {
                            System.Diagnostics.Debug.WriteLine(e.Message);
                            System.Diagnostics.Debug.WriteLine(i + 1);
                            return(false);
                        }
                    }
                }
            }
            await _weatherDataContext.temperatureReadings.AddRangeAsync(dataList);

            await _weatherDataContext.SaveChangesAsync();

            return(true);
        }