Exemplo n.º 1
0
        private static void Initialize(int versionState, bool isVet)
        {
            string newArchFlag = Path.Combine(ServiceManager.ImageRepositoryPath, "NewSqliteArch.dat");

            int isCorrectUpdate = versionState;

            //If sql data not exist, then do no initialize.
            if (isCorrectUpdate == 2)
            {
                return;
            }

            //Cancel updating if flag exists.
            if (VinnoFile.Exists(newArchFlag))
            {
                return;
            }

            if (!isVet && isCorrectUpdate == 1)
            {
                //Human, same type, nothing to do.
                return;
            }

            if (isVet && isCorrectUpdate == 1)
            {
                //Vet, same type, at start, move all old vet files into clean vet folder.
                if (!VinnoDirectory.Exists(ImageRepository))
                {
                    return;
                }

                TryToMoveFiles(new VinnoDirectoryInfo(ImageRepository), new VinnoDirectoryInfo(VetImageRepository));

                try
                {
                    VinnoDirectory.Delete(ImageRepository, true);
                }
                catch (Exception e)
                {
                    Logger.ForceWriteLine("Delete UltrasoundImage file is failed, detailed log is {0}", e.InnerException?.Message);
                }

                return;
            }

            if (!isVet)
            {
                //SqlRestore can not show messageBox normally, so it is called outside in Main exe.
                UpdateNoVetNoCorrectInfo();
                return;
            }

            //SqlRestore can not show messageBox normally, so it is called outside in Main exe.
            UpdateIsVetNoCorrectInfo();
        }
Exemplo n.º 2
0
        private static void UpdateNoVetNoCorrectInfo()
        {
            var result = ServiceManager.Instance.GetService <IMessageBoxService>()
                         .ShowMessageBox("Waring", "DeleteOrSaveOldDataVP", MessageBoxButtonEnum.YesNo);

            switch (result)
            {
            case MessageBoxResultExtend.No:
                //Delete images.
                if (VinnoDirectory.Exists(ImageRepository))
                {
                    TryToMoveFiles(new VinnoDirectoryInfo(ImageRepository), new VinnoDirectoryInfo(OldVetImageRepository));
                    try
                    {
                        VinnoDirectory.Delete(ImageRepository, true);
                    }
                    catch (Exception e)
                    {
                        Logger.ForceWriteLine("Delete UltrasoundImage file is failed, detailed log is {0}", e.InnerException?.Message);
                    }
                }

                if (VinnoDirectory.Exists(VetImageRepository))
                {
                    TryToMoveFiles(new VinnoDirectoryInfo(VetImageRepository), new VinnoDirectoryInfo(OldVetImageRepository));

                    try
                    {
                        VinnoDirectory.Delete(VetImageRepository, true);
                    }
                    catch (Exception e)
                    {
                        Logger.ForceWriteLine("Delete UltrasoundImage_Vet file is failed, detailed log is {0}", e.InnerException?.Message);
                    }
                }

                UpdateNoVetNoCorrectDatabase(false);
                break;

            case MessageBoxResultExtend.Yes:
                //Delete images.
                try
                {
                    VinnoDirectory.Delete(ImageRepository, true);
                }
                catch (Exception e)
                {
                    Logger.ForceWriteLine("Delete UltrasoundImage file is failed, detailed log is {0}", e.InnerException?.Message);
                }

                UpdateNoVetNoCorrectDatabase(true);
                break;
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Figure out if there is any suitable upgrade package zip inside USB. If so, send out the package path.
        /// </summary>
        /// <param name="usbPath">The usb root path.</param>
        /// <param name="currentVersion">Version of current system.</param>
        /// <param name="zipFilePath">Send out the upgrade package zip file path.</param>
        /// <returns></returns>
        internal static bool IsUpgradePackageExists(string usbPath, string currentVersion, out string zipFilePath)
        {
            //Find all zip files in USB, only search top directory.
            var zipFileList = VinnoDirectory.GetFiles(usbPath, "*.zip").ToList();

            if (zipFileList.Count == 0)
            {
                zipFilePath = string.Empty;
                return(false);
            }

            //Remove zip which is not upgrade package.
            foreach (var zipFile in zipFileList)
            {
                string version = GetVersion(zipFile);
                if (string.IsNullOrEmpty(version) || (version.Split('.', '(', ')').Length != 3 && version.Split('.', '(', ')').Length != 5))
                {
                    zipFileList.Remove(zipFile);
                }
            }

            if (zipFileList.Count == 0)
            {
                zipFilePath = string.Empty;
                return(false);
            }

            //Loop zip file list.
            zipFileList.Sort((left, right) =>
                             string.Compare(CreateStandardVersion(GetVersion(left)),
                                            CreateStandardVersion(GetVersion(right)), StringComparison.OrdinalIgnoreCase));

            //Do for loop here, zipFileList is ascending.
            foreach (var zipFile in zipFileList)
            {
                if (string.Compare(CreateStandardVersion(GetVersion(zipFile)), CreateStandardVersion(currentVersion),
                                   StringComparison.OrdinalIgnoreCase) <= 0)
                {
                    continue;
                }

                if (!IsCorrectFormat(zipFile))
                {
                    continue;
                }

                zipFilePath = zipFile;
                return(true);
            }

            zipFilePath = string.Empty;
            return(false);
        }
Exemplo n.º 4
0
        //For those source files one by one:
        //First,try to move files into new target folder. If failed, then try to copy.
        //If copy is still failed, try to delete files directly. If delete is also failed, then do nothing, just leave it. (Log is written)
        private static void TryToMoveFiles(VinnoDirectoryInfo source, VinnoDirectoryInfo target)
        {
            if (string.Equals(source.FullName, target.FullName, StringComparison.CurrentCultureIgnoreCase))
            {
                return;
            }

            // Check if the target directory exists, if not, create it.
            VinnoDirectory.CreateDirectory(target.FullName);

            // Copy each file into it's new directory.
            foreach (var fi in source.GetFiles())
            {
                string targetFilePath = Path.Combine(target.ToString(), fi.Name);
                try
                {
                    Logger.ForceWriteLine(@"Try to move {0}\{1}", target.FullName, fi.Name);

                    //Try to move file.
                    if (!VinnoFile.Exists(targetFilePath))
                    {
                        fi.MoveTo(targetFilePath);
                    }
                }
                catch (Exception e)
                {
                    //Log the move failed message.
                    Logger.ForceWriteLine(@"File {0} move is failed, detailed exception is: {1}", fi.Name,
                                          e.InnerException?.Message);

                    try
                    {
                        Logger.ForceWriteLine(@"Try to copy {0}\{1}", target.FullName, fi.Name);

                        //Try to copy file if move is not working.
                        fi.CopyTo(targetFilePath, true);
                    }
                    catch (Exception exception)
                    {
                        //Log the copy failed message.
                        Logger.ForceWriteLine(@"File {0} copy is failed, detailed exception is: {1}", fi.Name,
                                              exception.InnerException?.Message);
                    }
                }
                finally
                {
                    try
                    {
                        //Delete file if move & copy are both failed.
                        fi.Delete();
                    }
                    catch (Exception e)
                    {
                        Logger.ForceWriteLine(@"File {0} delete is failed, detailed exception is: {1}", fi.Name,
                                              e.InnerException?.Message);
                    }
                }
            }

            // Copy each subdirectory using recursion.
            foreach (VinnoDirectoryInfo diSourceSubDir in source.GetDirectories())
            {
                VinnoDirectoryInfo nextTargetSubDir = target.CreateSubdirectory(diSourceSubDir.Name);
                TryToMoveFiles(diSourceSubDir, nextTargetSubDir);
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// //Figure out if upgrade is proper. If ok, send out zip file path.
        /// </summary>
        /// <param name="usbPath">The usb path.</param>
        /// <param name="currentVersion">The string of current version.</param>
        /// <param name="zipFilePath">Send out the update package zip file path.</param>
        /// <returns></returns>
        internal static bool IsUpgradePackageExists(string usbPath, string currentVersion, out string zipFilePath)
        {
            var current = currentVersion.Split('.', '(', ')');

            //Find all zip files in USB.
            var zipFiles = VinnoDirectory.GetFiles(usbPath, "*.zip");

            if (zipFiles.Length == 0)
            {
                zipFilePath = string.Empty;
                return(false);
            }

            //Get first and last update package version.
            var front = Path.GetFileNameWithoutExtension(zipFiles[0])?.Split('.', '(', ')');
            var back  = Path.GetFileNameWithoutExtension(zipFiles.Last())?.Split('.', '(', ')');

            if (front == null || back == null)
            {
                zipFilePath = string.Empty;
                return(false);
            }

            switch (current.Length)
            {
            case 3:
            {
                int currentSum = int.Parse(current[0]) * 100 + int.Parse(current[1]) * 10 +
                                 int.Parse(current[2]) * 1;
                int frontSum = int.Parse(front[0]) * 100 + int.Parse(front[1]) * 10 +
                               int.Parse(front[2]) * 1;
                int backSum = int.Parse(back[0]) * 100 + int.Parse(back[1]) * 10 +
                              int.Parse(back[2]) * 1;

                if (currentSum <= frontSum)
                {
                    switch (front.Length)
                    {
                    case 3:
                        if (currentSum < frontSum)
                        {
                            zipFilePath = zipFiles[0];
                            return(true);
                        }
                        break;

                    case 4:
                        zipFilePath = zipFiles[0];
                        return(true);

                    default:
                        zipFilePath = string.Empty;
                        return(false);
                    }
                }

                if (frontSum <= currentSum && currentSum <= backSum)
                {
                    for (int i = 0; i < zipFiles.Length - 1; i++)
                    {
                        var position     = Path.GetFileNameWithoutExtension(zipFiles[i])?.Split('.', '(', ')');
                        var positionNext = Path.GetFileNameWithoutExtension(zipFiles[i + 1])?.Split('.', '(', ')');
                        if (position == null || positionNext == null)
                        {
                            continue;
                        }
                        int positionSum = int.Parse(position[0]) * 100 + int.Parse(position[1]) * 10 +
                                          int.Parse(position[2]) * 1;

                        int positionNextSum = int.Parse(positionNext[0]) * 100 + int.Parse(positionNext[1]) * 10 +
                                              int.Parse(positionNext[2]) * 1;
                        switch (position.Length)
                        {
                        case 3:
                        {
                            switch (positionNext.Length)
                            {
                            case 3:
                                if (positionSum < currentSum && currentSum < positionNextSum)
                                {
                                    zipFilePath = zipFiles[i + 1];
                                    return(true);
                                }
                                break;

                            case 4:
                                if (positionSum < currentSum && currentSum <= positionNextSum)
                                {
                                    zipFilePath = zipFiles[i + 1];
                                    return(true);
                                }
                                break;

                            default:
                                zipFilePath = string.Empty;
                                return(false);
                            }
                            break;
                        }

                        case 4:
                        {
                            switch (positionNext.Length)
                            {
                            case 3:
                                if (positionSum < currentSum && currentSum < positionNextSum)
                                {
                                    zipFilePath = zipFiles[i + 1];
                                    return(true);
                                }
                                break;

                            case 4:
                                if (positionSum < currentSum && currentSum < positionNextSum)
                                {
                                    zipFilePath = zipFiles[i + 1];
                                    return(true);
                                }
                                break;

                            default:
                            {
                                zipFilePath = string.Empty;
                                return(false);
                            }
                            }
                            break;
                        }

                        default:
                            zipFilePath = string.Empty;
                            return(false);
                        }
                    }
                }

                if (currentSum >= backSum)
                {
                    switch (back.Length)
                    {
                    case 3:
                        zipFilePath = string.Empty;
                        return(false);

                    case 4:
                        if (currentSum == backSum)
                        {
                            zipFilePath = zipFiles.Last();
                            return(true);
                        }
                        break;

                    default:
                        zipFilePath = string.Empty;
                        return(false);
                    }

                    zipFilePath = string.Empty;
                    return(false);
                }

                break;
            }

            case 4:
            {
                int currentSum = int.Parse(current[0]) * 100 + int.Parse(current[1]) * 10 +
                                 int.Parse(current[2]) * 1;
                int frontSum = int.Parse(front[0]) * 100 + int.Parse(front[1]) * 10 +
                               int.Parse(front[2]) * 1;
                int backSum = int.Parse(back[0]) * 100 + int.Parse(back[1]) * 10 +
                              int.Parse(back[2]) * 1;

                if (currentSum <= frontSum)
                {
                    switch (front.Length)
                    {
                    case 3:
                        if (currentSum < frontSum)
                        {
                            zipFilePath = zipFiles[0];
                            return(true);
                        }
                        break;

                    case 4:
                        if (currentSum < frontSum)
                        {
                            zipFilePath = zipFiles[0];
                            return(true);
                        }
                        if (currentSum == frontSum && string.CompareOrdinal(front[3], current[3]) > 0)
                        {
                            zipFilePath = zipFiles[0];
                            return(true);
                        }

                        break;

                    default:
                        zipFilePath = string.Empty;
                        return(false);
                    }
                }

                if (frontSum <= currentSum && currentSum <= backSum)
                {
                    for (int i = 0; i < zipFiles.Length - 1; i++)
                    {
                        var position     = Path.GetFileNameWithoutExtension(zipFiles[i])?.Split('.', '(', ')');
                        var positionNext = Path.GetFileNameWithoutExtension(zipFiles[i + 1])?.Split('.', '(', ')');
                        if (position == null || positionNext == null)
                        {
                            continue;
                        }
                        int positionSum = int.Parse(position[0]) * 100 + int.Parse(position[1]) * 10 +
                                          int.Parse(position[2]) * 1;
                        int positionNextSum = int.Parse(positionNext[0]) * 100 + int.Parse(positionNext[1]) * 10 +
                                              int.Parse(positionNext[2]) * 1;
                        switch (position.Length)
                        {
                        case 3:
                        {
                            switch (positionNext.Length)
                            {
                            case 3:
                                if (positionSum <= currentSum && currentSum < positionNextSum)
                                {
                                    zipFilePath = zipFiles[i + 1];
                                    return(true);
                                }
                                break;

                            case 4:
                            {
                                if (positionSum <= currentSum && currentSum <= positionNextSum)
                                {
                                    if (currentSum < positionNextSum)
                                    {
                                        zipFilePath = zipFiles[i + 1];
                                        return(true);
                                    }

                                    if ((currentSum == positionNextSum) && string.CompareOrdinal(current[3], positionNext[3]) < 0)
                                    {
                                        zipFilePath = zipFiles[i + 1];
                                        return(true);
                                    }
                                }
                                break;
                            }

                            default:
                            {
                                zipFilePath = string.Empty;
                                return(false);
                            }
                            }
                            break;
                        }

                        case 4:
                        {
                            if (positionNext.Length == 3)
                            {
                                if (currentSum > positionSum && currentSum < positionNextSum)
                                {
                                    zipFilePath = zipFiles[i + 1];
                                    return(true);
                                }

                                if (currentSum == positionSum && string.CompareOrdinal(current[3], position[3]) > 0 && currentSum < positionNextSum)
                                {
                                    zipFilePath = zipFiles[i + 1];
                                    return(true);
                                }
                            }

                            if (positionNext.Length == 4)
                            {
                                if (currentSum > positionSum && currentSum < positionNextSum)
                                {
                                    zipFilePath = zipFiles[i + 1];
                                    return(true);
                                }

                                if (currentSum == positionSum && string.CompareOrdinal(current[3], position[3]) > 0 && currentSum < positionNextSum)
                                {
                                    zipFilePath = zipFiles[i + 1];
                                    return(true);
                                }

                                if (currentSum > positionSum && currentSum == positionNextSum && string.CompareOrdinal(current[3], positionNext[3]) < 0)
                                {
                                    zipFilePath = zipFiles[i + 1];
                                    return(true);
                                }

                                if (currentSum == positionSum && currentSum == positionNextSum &&
                                    string.CompareOrdinal(current[3], position[3]) > 0 &&
                                    string.CompareOrdinal(positionNext[3], current[3]) > 0)
                                {
                                    zipFilePath = zipFiles[i + 1];
                                    return(true);
                                }
                            }

                            break;
                        }

                        default:
                        {
                            zipFilePath = string.Empty;
                            return(false);
                        }
                        }
                    }
                }

                if (currentSum >= backSum)
                {
                    switch (back.Length)
                    {
                    case 3:
                        zipFilePath = string.Empty;
                        return(false);

                    case 4:
                        if (currentSum > backSum)
                        {
                            zipFilePath = string.Empty;
                            return(false);
                        }
                        if (currentSum == backSum && string.CompareOrdinal(back[3], current[3]) > 0)
                        {
                            zipFilePath = zipFiles.Last();
                            return(true);
                        }

                        zipFilePath = string.Empty;
                        return(false);

                    default:
                    {
                        zipFilePath = string.Empty;
                        return(false);
                    }
                    }
                }
                break;
            }

            default:
            {
                zipFilePath = string.Empty;
                return(false);
            }
            }

            zipFilePath = string.Empty;
            return(false);
        }