/// <summary> /// Try to open each cloud model and reload if they have links, /// making that point to cloud path. /// </summary> /// <param name="directory">Transit directory where cloud models exist</param> /// <param name="projectId">not used</param> /// <returns></returns> public IEnumerator ReloadLinks(string directory, Guid projectId) { var view = (ViewMigrationToBim360)View; if (!Directory.Exists(directory)) { view.UpdateReloadingProgress("Directory doesn't exist.", 0); yield break; } view.UpdateReloadingProgress("Ready to start.", 2); var ops = new OpenOptions(); var transOp = new TransactWithCentralOptions(); var swcOptions = new SynchronizeWithCentralOptions(); var count = 0; // Read mapping info var jsonString = File.ReadAllText(FLinksInfo); JavaScriptSerializer serializer = new JavaScriptSerializer(); var mapLocalModelPathToLinksName = serializer.Deserialize <Dictionary <string, List <string> > >(jsonString); jsonString = File.ReadAllText(FModelsGuid); var mapModelsNameToGuid = serializer.Deserialize <Dictionary <string, string> >(jsonString); // Try to open each cloud model and reload if they have links, making that point to cloud path. foreach (var kvp in mapLocalModelPathToLinksName) { var localPath = kvp.Key; var name = Path.GetFileName(localPath); var guids = mapModelsNameToGuid[name].Split(','); var hostModelPath = ModelPathUtils.ConvertCloudGUIDsToCloudPath("US", Guid.Parse(guids[0]), Guid.Parse(guids[1])); var progress = count++ *100 / mapLocalModelPathToLinksName.Count(); view.UpdateReloadingProgress($"Reloading {name}", progress); yield return(null); try { var doc = Application.Application.OpenDocumentFile(hostModelPath, ops, new DefaultOpenFromCloudCallback()); foreach (var linkInstance in GetLinkInstances(doc)) { if (mapModelsNameToGuid.TryGetValue(linkInstance.Name, out var sLinkedGuids)) { guids = mapModelsNameToGuid[linkInstance.Name].Split(','); var linkModelPath = ModelPathUtils.ConvertCloudGUIDsToCloudPath("US", Guid.Parse(guids[0]), Guid.Parse(guids[1])); linkInstance.LoadFrom(linkModelPath, new WorksetConfiguration()); } } doc.SynchronizeWithCentral(transOp, swcOptions); doc.Close(false); } catch (Exception e) { var msg = $"Failed to reload {name} - {e.Message}"; view.UpdateUploadingProgress(msg, progress); MessageBox.Show(msg); yield break; } } view.UpdateReloadingProgress("Reloading finished", 100); }