Example #1
0
        /// <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);
        }