Пример #1
0
        private long AddFilesInfoToUpdateLists(SqlDataReader reader)
        {
            long          totalBytes = 0;
            Guid          fileId;
            string        filePath;
            string        hashCode;
            bool          isDevXpress;
            long          fileSize;
            List <string> filesToDelete = new List <string>();

            while (reader.Read())
            {
                filePath    = reader["Path"].ToString().Trim();
                hashCode    = reader["HashCode"].ToString().Trim();
                isDevXpress = (bool)reader["DXDLL"];
                fileSize    = (long)reader["FileSize"];

                if (FileHaveToBeUpdated(filePath, fileSize, hashCode, isDevXpress))
                {
                    fileId = (Guid)reader["RowId"];
                    DownloadFileInfo fileInfo = new DownloadFileInfo(filePath, fileSize);

                    filesToUpdate.Add(fileId, fileInfo);

                    #region Delecting is temporary file exists, is it fully downloaded

                    string temporaryFileName = GetTemporaryFilePath(fileId);

                    if (File.Exists(temporaryFileName))
                    {
                        bool sizesEquals = fileSize == (new FileInfo(temporaryFileName).Length);
                        if (!sizesEquals)
                        {
                            filesToDownLoad.Add(fileId, fileInfo);
                            filesToDelete.Add(temporaryFileName);
                        }
                    }
                    else
                    {
                        totalBytes += fileInfo.FileSize;
                        filesToDownLoad.Add(fileId, fileInfo);
                    }

                    #endregion
                }
            }

            // Delete not fully downloaded files
            filesToDelete.ForEach(fileToDeletePath => File.Delete(fileToDeletePath));
            return(totalBytes);
        }
Пример #2
0
        private bool DownloadUpdateFiles(long totalBytes)
        {
            RemoveFilesSchema();

            string queryText = string.Format("select f.RowId Id, f.UpdateFile FileData from {0}Update f join @FilesId ids on ids.FileId = f.RowId order by f.RowId",
                                             App.SelectedSolution.SolutionName);

            int  tryNumber            = 1;
            int  taskSize             = filesToDownLoad.Count;
            long totalDownloadedBytes = 0;

            while (filesToDownLoad.Count > 0 && tryNumber <= MAX_DOWNLOADING_ATTEMPTS_COUNT)
            {
                DataTable filesToDownLoadTable = GetFilesToDownLoadTable();

                SqlConnection conn = DatabaseHelper.GetUpdateConnection();
                try
                {
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand(queryText, conn))
                    {
                        SqlParameter tableParameter = cmd.Parameters.AddWithValue("@FilesId", filesToDownLoadTable);
                        tableParameter.SqlDbType = SqlDbType.Structured;
                        tableParameter.TypeName  = "tvp_FilesToDownload";

                        using (SqlDataReader dataReader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
                        {
                            while (dataReader.Read())
                            {
                                Guid fileId = (Guid)dataReader["Id"];

                                DownloadFileInfo fileInfo          = filesToDownLoad[fileId];
                                string           temporaryFilePath = GetTemporaryFilePath(fileId);

                                if (saveTemporaryFile(temporaryFilePath, fileInfo.FileSize, dataReader))
                                {
                                    filesToDownLoad.Remove(fileId);
                                    totalDownloadedBytes       += fileInfo.FileSize;
                                    downloadingComplateProgress = (int)(1000 * totalDownloadedBytes / totalBytes);
                                }
                            }
                        }
                    }
                }
                catch (Exception exp)
                {
                    Trace.WriteLine(String.Format("Ошибка получения файлов: {0}", exp.Message));
                    return(false);
                }
                finally
                {
                    if (conn != null)
                    {
                        ((IDisposable)conn).Dispose();
                    }
                }
            }

            bool allFilesDownloaded = filesToDownLoad.Count == 0;

            if (allFilesDownloaded)
            {
                return(WriteFilesSchema());
            }

            return(allFilesDownloaded);
        }