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(); }
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; } }
/// <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); }
//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); } }
/// <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); }