internal void BindContentControls(DataAccess.Netflix.Title title) { var doc = Globals.Factory.GetVstoObject(this.Application.ActiveDocument); const string xmlPartName = "http://netflix/titles"; var customXmlParts = doc.CustomXMLParts.SelectByNamespace(xmlPartName); CustomXMLPart customXmlPart = null; if (customXmlParts != null && customXmlParts.Count > 0) { customXmlPart = customXmlParts[1]; } foreach (Word.ContentControl cc in doc.ContentControls) { if (!cc.XMLMapping.IsMapped) { //if (cc.Type == WdContentControlType.wdContentControlPicture) //{ // ManuallySetImage(doc, cc, title); //} //else { cc.LockContents = false; var xpath = string.Format("//titles/title[@id='{0}']/{1}", title.Id, cc.Tag.ToLower()); cc.XMLMapping.SetMapping(xpath, "", customXmlPart); } } } }
internal void SaveTitleViewModel(DataAccess.Netflix.Title title) { var doc = this.Application.ActiveDocument; const string xmlPartName = "http://netflix/titles"; //var customXmlPart = doc.CustomXMLParts.SelectByNamespace(xmlPartName); //if (customXmlPart != null && customXmlPart.Count > 0) // customXmlPart[1].Delete(); const string t = @"<titles xmlns:nf='http://netflix/titles'> <title id='{id}'> <movielink>{movielink}</movielink> <boxart>{boxart}</boxart> <name>{name}</name> <rating>{rating}</rating> <duration>{duration} minutes</duration> <director>{director}</director> <genres>{genres}</genres> <cast>{cast}</cast> <synopsis>{synopsis}</synopsis> </title> </titles>"; var proxy = DataAccess.ProxyFactory.CreateNetflixProxy(); var boxart = ConvertBitmapToBase64(GetBitmapFromUrl(title.BoxArt.SmallUrl)); var genres = proxy.GetGenresFromTitle(title); var genresList = SecurityElement.Escape(string.Join(", ", genres.Select(g => g.Name))); var sb = new StringBuilder("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"); sb.Append(t); sb.Replace("{id}", title.Id); sb.Replace("{movielink}", title.Url); //sb.Replace("{boxart}", SecurityElement.Escape(title.BoxArt.SmallUrl)); sb.Replace("{boxart}", boxart); sb.Replace("{name}", title.Name); sb.Replace("{rating}", title.Rating); sb.Replace("{duration}", (title.Runtime / 60).ToString()); sb.Replace("{director}", "[not ready yet]"); sb.Replace("{genres}", genresList); sb.Replace("{cast}", "[not ready yet]"); sb.Replace("{synopsis}", SecurityElement.Escape(title.Synopsis)); var xmlPart = doc.CustomXMLParts.Add(sb.ToString()); }