public static IItemData GetRemoteItemData(RemoteContentPullArgs args, string itemId) { try { WebClient wc = new WebClient { Encoding = Encoding.UTF8 }; string yamlList = wc.UploadString($"{args.server}/scs/cmcontenttreegetitem.scsvc", "POST", args.GetSerializedData(itemId, false)); string yaml = JsonConvert.DeserializeObject<List<string>>(yamlList).FirstOrDefault(); var formatter = new YamlSerializationFormatter(null, null); if (yaml != null) { using (var ms = new MemoryStream()) { IItemData itemData = null; try { var bytes = Encoding.UTF8.GetBytes(yaml); ms.Write(bytes, 0, bytes.Length); ms.Seek(0, SeekOrigin.Begin); itemData = formatter.ReadSerializedItem(ms, itemId); itemData.DatabaseName = args.database; } catch (Exception e) { Log.Error("Problem reading yaml from remote server", e, args); } if (itemData != null) { return itemData; } } } } catch (Exception e) { Log.Error("Error getting remote item data for " + itemId, e, args); } return null; }
private IEnumerable<IItemData> GetRemoteItemData(RemoteContentPullArgs args) { List<IItemData> ret = new List<IItemData>(); bool children = args.children; args.children = false; Queue<string> pullableItems = new Queue<string>(); WebClient wc = new WebClient { Encoding = Encoding.UTF8 }; pullableItems.Enqueue(args.id); while (pullableItems.Any()) { string cur = pullableItems.Dequeue(); args.id = cur; string yamlList = null; try { yamlList = wc.UploadString($"{args.server}/scs/cmcontenttreegetitem.scsvc", "POST", args.GetSerializedData()); } catch (Exception e) { Log.Error("Problem reading remote server item data", e, this); } if (string.IsNullOrWhiteSpace(yamlList)) { yield return new ErrorItemData() {Id = Guid.Parse(args.id), Path = "Problem reading remote server item data" }; continue; } List<string> remoteItems = JsonConvert.DeserializeObject<List<string>>(yamlList); var formatter = new YamlSerializationFormatter(null, null); foreach (string yaml in remoteItems) { using (var ms = new MemoryStream()) { IItemData itemData = null; try { var bytes = Encoding.UTF8.GetBytes(yaml); ms.Write(bytes, 0, bytes.Length); ms.Seek(0, SeekOrigin.Begin); itemData = formatter.ReadSerializedItem(ms, args.id); itemData.DatabaseName = args.database; } catch (Exception e) { Log.Error("Problem reading yaml from remote server", e, this); } if (itemData == null) { yield return new ErrorItemData() { Id = Guid.Parse(args.id), Path = "Problem reading yaml from remote server" }; continue; } yield return itemData; } } if (children) { ContentTreeNode node = null; try { node = JsonConvert.DeserializeObject<ContentTreeNode>(wc.UploadString($"{args.server}/scs/cmcontenttree.scsvc", "POST", $@"{{ ""id"": ""{cur}"", ""database"": ""{args.database}"", ""server"": ""{args.server}"" }}")); foreach (ContentTreeNode child in node.Nodes) { pullableItems.Enqueue(child.Id); } } catch (Exception e) { Log.Error("Problem getting children of node " + cur, e, this); } if (node == null) yield return new ErrorItemData() {Id = Guid.Parse(cur), Path = "Problem getting children of node" }; } } }