private void RenderHtmlUsingXslt(BTBWeatherFeedInfo info, string xsltFile)
        {
            XPathDocument doc       = new XPathDocument(new XmlTextReader(info.Feed, XmlNodeType.Document, null));
            MemoryStream  ms        = new MemoryStream();
            var           transform = new XslCompiledTransform();

            //if we don't have a custom XSLT defined then we should just use the
            //default one which we install with the module
            string xslFolder = HttpContext.Current.Server.MapPath("~/DesktopModules/BTBYahooWeather/Templates/Xslt");

            xsltFile = Path.Combine(xslFolder, xsltFile);

            if (!File.Exists(xsltFile))
            {
                //if we don't have the file call back to the default
                //xslt file which should exist in all instances
                xsltFile = Path.Combine(xslFolder, "weatherReport.xsl");
            }

            transform.Load(xsltFile);
            transform.Transform(doc, null, ms);

            ms.Position          = 0;
            info.TransformedFeed = new StreamReader(ms, System.Text.Encoding.UTF8).ReadToEnd();

            //clean up
            ms.Close();
        }
 public static void UpdateBTBWeatherFeed(BTBWeatherFeedInfo feed)
 {
     using (var dataContext = DataContext.Instance())
     {
         var rep = dataContext.GetRepository <BTBWeatherFeedInfo>();
         rep.Update(feed);
     }
 }
 public static int AddBTBWeatherFeed(BTBWeatherFeedInfo newFeed)
 {
     using (var dataContext = DataContext.Instance())
     {
         var rep = dataContext.GetRepository <BTBWeatherFeedInfo>();
         rep.Insert(newFeed);
         return(newFeed.WeatherId);
     }
 }
        public void ImportModule(int ModuleID, string Content, string Version, int UserId)
        {
            XmlNode weatherNode = Globals.GetContent(Content, "BTBYahooWeather");

            XmlNodeList nodeList = weatherNode.SelectNodes("url");

            if (nodeList != null)
            {
                for (int i = 0; i < nodeList.Count; i++)
                {
                    BTBWeatherFeedInfo info = new BTBWeatherFeedInfo();
                    info.ModuleId = ModuleID;
                    info.Url      = nodeList[i].InnerText;

                    DataProvider.AddBTBWeatherFeed(info);
                }
            }
        }
        /// <summary>
        /// renders the xml data into the HTML
        /// </summary>
        /// <param name="info"></param>
        /// <param name="moduleConfiguration"></param>
        public void RenderRssData(BTBWeatherFeedInfo info, ModuleInfo moduleConfiguration)
        {
            //work out if we are going to use the XSLT files or the razor engine
            //to render the weather into HTML
            var moduleSettings = new BTBYahooWeatherSettings(moduleConfiguration.TabModuleID);

            switch (moduleSettings.RenderEngine)
            {
            case BTBYahooWeatherSettings.TemplateEngine.Razor:
                RenderHtmlUsingRazor(info, moduleSettings.TemplateName);
                break;

            case BTBYahooWeatherSettings.TemplateEngine.Xlst:
            default:
                RenderHtmlUsingXslt(info, moduleSettings.TemplateName);
                break;
            }
        }
        public void UpdateWeatherFeed(BTBWeatherFeedInfo info, PortalSettings portalSettings, ModuleInfo moduleConfiguration)
        {
            string proxyHost     = Host.GetHostSettingsDictionary()["ProxyServer"];
            string proxyPort     = Host.GetHostSettingsDictionary()["ProxyPort"];
            string proxyUsername = Host.GetHostSettingsDictionary()["ProxyUsername"];
            string proxyPassword = Host.GetHostSettingsDictionary()["ProxyPassword"];

            //version 1.6
            //26/8/2008
            //fix to check if we have a proxy port, in which case we should append to the proxyhost
            //Thanks to Corrie Meyer for finding this bug.
            string proxyUrl = proxyPort.Trim() == string.Empty ? proxyHost : proxyHost + ":" + proxyPort;

            RssReader reader = new RssReader(info.Url, proxyUrl, proxyUsername, proxyPassword);

            //get the raw feed
            info.Feed = reader.Response();

            //render the xml into the HTML
            RenderRssData(info, moduleConfiguration);

            //get the ttl
            int ttl = reader.Ttl();

            if (ttl > -1)
            {
                info.Ttl = reader.Ttl();
            }
            else
            {
                //no value of ttl in feed
                //default to 20 minutes
                info.Ttl = 20;
            }

            //set the date stamps
            info.UpdatedDate  = DateTime.Now;
            info.CachedDate   = DateTime.Now.AddMinutes(info.Ttl);
            info.LocationName = reader.LocationName();

            //cache the feed in the database
            DataProvider.UpdateBTBWeatherFeed(info);
        }
        private void RenderHtmlUsingRazor(BTBWeatherFeedInfo info, string razorTemplate)
        {
            //if we don't have a custom XSLT defined then we should just use the
            //default one which we install with the module
            string razorFolder = HttpContext.Current.Server.MapPath("~/DesktopModules/BTBYahooWeather/Templates/Razor");
            string pathCheck   = Path.Combine(razorFolder, razorTemplate);

            if (!File.Exists(pathCheck))
            {
                //if we don't have the file call back to the default
                //xslt file which should exist in all instances
                razorTemplate = "weatherReport.cshtml";
            }

            using (var stringWriter = new StringWriter())
            {
                var razorEngine = new RazorEngine("~/DesktopModules/BTBYahooWeather/Templates/Razor/" + razorTemplate, null, null);
                razorEngine.Render <MainModel>(stringWriter, new MainModel(info.ModuleId, info.Feed));

                info.TransformedFeed = stringWriter.ToString();
            }
        }