示例#1
0
        /// <summary>
        /// Loads the feed sources.
        /// </summary>
        /// <param name="feedSources">The feed sources stream.</param>
        public void LoadFeedSources(Stream feedSources)
        {
            if (feedSources == null)
            {
                return;
            }

            try
            {
                XmlParserContext context =
                    new XmlParserContext(null, new RssBanditXmlNamespaceResolver(), null, XmlSpace.None);
                XmlReader reader = new RssBanditXmlReader(feedSources, XmlNodeType.Document, context);

                //convert XML to objects
                XmlSerializer serializer =
                    XmlHelper.SerializerCache.GetSerializer(typeof(SerializableFeedSources));
                SerializableFeedSources mySources = (SerializableFeedSources)serializer.Deserialize(reader);

                _feedSources.Clear();

                lastUsedKey = mySources.LastID;
                int maxUsedKey = 0;
                foreach (FeedSourceEntry fs in mySources.List)
                {
                    if (maxUsedKey < fs.ID)
                    {
                        maxUsedKey = fs.ID;
                    }
                    _feedSources.Add(fs.ID, fs);
                    fs.Source = FeedSource.CreateFeedSource(fs.ID, fs.SourceType,
                                                            CreateSubscriptionLocation(fs.ID, fs.SourceType, fs.Properties));
                }
                if (maxUsedKey > lastUsedKey)
                {
                    lastUsedKey = maxUsedKey;
                }
            }
            catch (Exception e)
            {
                _log.Error("Error on deserializing feed source", e);
            }
        }
示例#2
0
        /// <summary>
        /// Loads the RSS feedlist from the given URL and validates it against the schema.
        /// </summary>
        /// <param name="xmlStream">The XML Stream of a feedlist to load</param>
        /// <param name="veh">The event handler that should be invoked on the client if validation errors occur. NOT USED.</param>
        /// <exception cref="XmlException">XmlException thrown if XML is not well-formed</exception>
        private void LoadFeedlist(Stream xmlStream, ValidationEventHandler veh)
        {
            var context =
                new XmlParserContext(null, new RssBanditXmlNamespaceResolver(), null, XmlSpace.None);
            XmlReader reader = new RssBanditXmlReader(xmlStream, XmlNodeType.Document, context);

            validationErrorOccured = false;

            //convert XML to objects
            XmlSerializer serializer = XmlHelper.SerializerCache.GetSerializer(typeof(feeds));
            var           myFeeds    = (feeds)serializer.Deserialize(reader);

            reader.Close();

            // reset migration properties dictionary:
            MigrationProperties.Clear();

            //copy over category info if we are importing a new feed
            if (myFeeds.categories != null)
            {
                foreach (var cat in myFeeds.categories)
                {
                    string cat_trimmed = cat.Value.Trim();
                    if (!categories.ContainsKey(cat_trimmed))
                    {
                        cat.Value = cat_trimmed;
                        categories.Add(cat_trimmed, cat);
                    }
                }
            }

            //copy feeds over if we are importing a new feed
            if (myFeeds.feed != null)
            {
                foreach (var f in myFeeds.feed)
                {
                    if (feedsTable.ContainsKey(f.link) == false)
                    {
                        Uri uri;
                        if (Uri.TryCreate(f.link, UriKind.Absolute, out uri))
                        {
                            // CLR 2.0 Uri does not like "news:" scheme, so we
                            // switch it to "nntp:" (see http://msdn2.microsoft.com/en-us/library/system.uri.scheme.aspx)
                            if (NntpWebRequest.NewsUriScheme.Equals(uri.Scheme))
                            {
                                f.link = NntpWebRequest.NntpUriScheme +
                                         uri.CanonicalizedUri().Substring(uri.Scheme.Length);
                            }
                            else
                            {
                                f.link = uri.CanonicalizedUri();
                            }
                        }
                        else
                        {
                            // bad uri:
                            continue;
                        }

                        // test again: we may have changed to Uri above:
                        if (feedsTable.ContainsKey(f.link) == false)
                        {
                            f.owner = this;
                            feedsTable.Add(f.link, f);

                            //add category if needed
                            if (f.category != null)
                            {
                                string cat_trimmed = f.category = f.category.Trim();

                                if (!categories.ContainsKey(cat_trimmed))
                                {
                                    AddCategory(cat_trimmed);
                                }
                            }
                        }
                    }
                }
            }


            ////copy over layout info if we are importing a new feed
            //if (myFeeds.listviewLayouts != null)
            //{
            //    foreach (var layout in myFeeds.listviewLayouts)
            //    {
            //        string layout_trimmed = layout.ID.Trim();
            //        if (!layouts.ContainsKey(layout_trimmed))
            //        {
            //            layouts.Add(layout_trimmed, layout.FeedColumnLayout);
            //        }
            //    }
            //}



            /*
             * props. set by configuration/static, but required for migration:
             */

            if (MigrateProperties)
            {
                //copy user-identities over if we are migrating
                if (myFeeds.identities != null)
                {
                    MigrationProperties.Add("UserIdentity", myFeeds.identities);
                }

                //copy nntp-server defs. over if we are migrating
                if (myFeeds.nntpservers != null)
                {
                    foreach (var sd in myFeeds.nntpservers)
                    {
                        // using the public property will initiate a load:
                        if (NntpServers.ContainsKey(sd.Name) == false)
                        {
                            NntpServers.Add(sd.Name, sd);
                        }
                    }
                }

                //if refresh rate in imported feed then use that
                if (myFeeds.refreshrateSpecified)
                {
                    MigrationProperties.Add("RefreshRate", myFeeds.refreshrate);
                }

                //if stylesheet specified in imported feed then use that
                if (!string.IsNullOrEmpty(myFeeds.stylesheet))
                {
                    MigrationProperties.Add("Stylesheet", myFeeds.stylesheet);
                    //this.stylesheet = myFeeds.stylesheet;
                }

                //if download enclosures specified in imported feed then use that
                if (myFeeds.downloadenclosuresSpecified)
                {
                    MigrationProperties.Add("DownloadEnclosures", myFeeds.downloadenclosures);
                }

                //if maximum enclosure cache size specified in imported feed then use that
                if (myFeeds.enclosurecachesizeSpecified)
                {
                    MigrationProperties.Add("EnclosureCacheSize", myFeeds.enclosurecachesize);
                    //this.enclosurecachesize = myFeeds.enclosurecachesize;
                }

                //if maximum number of enclosures to download on a new feed specified in imported feed then use that
                if (myFeeds.numtodownloadonnewfeedSpecified)
                {
                    MigrationProperties.Add("NumEnclosuresToDownloadOnNewFeed", myFeeds.numtodownloadonnewfeed);
                    //this.numtodownloadonnewfeed = myFeeds.numtodownloadonnewfeed;
                }

                //if cause alert on enclosures specified in imported feed then use that
                if (myFeeds.enclosurealertSpecified)
                {
                    MigrationProperties.Add("EnclosureAlert", myFeeds.enclosurealert);
                    //this.enclosurealert = myFeeds.enclosurealert;
                }

                //if create subfolders for enclosures specified in imported feed then use that
                if (myFeeds.createsubfoldersforenclosuresSpecified)
                {
                    MigrationProperties.Add("CreateSubfoldersForEnclosures", myFeeds.createsubfoldersforenclosures);
                    //this.createsubfoldersforenclosures = myFeeds.createsubfoldersforenclosures;
                }


                //if marking items as read on exit specified in imported feed then use that
                if (myFeeds.markitemsreadonexitSpecified)
                {
                    MigrationProperties.Add("MarkItemsReadOnExit", myFeeds.markitemsreadonexit);
                    //this.markitemsreadonexit = myFeeds.markitemsreadonexit;
                }

                //if enclosure folder specified in imported feed then use that
                if (!string.IsNullOrEmpty(myFeeds.enclosurefolder))
                {
                    MigrationProperties.Add("EnclosureFolder", myFeeds.enclosurefolder);
                }

                //if podcast folder specified in imported feed then use that
                if (!string.IsNullOrEmpty(myFeeds.podcastfolder))
                {
                    MigrationProperties.Add("PodcastFolder", myFeeds.podcastfolder);
                }

                //if podcast file extensions specified in imported feed then use that
                if (!string.IsNullOrEmpty(myFeeds.podcastfileexts))
                {
                    MigrationProperties.Add("PodcastFileExtensions", myFeeds.podcastfileexts);
                }

                ////if listview layout specified in imported feed then use that
                //if (!string.IsNullOrEmpty(myFeeds.listviewlayout))
                //{
                //    FeedColumnLayout = myFeeds.listviewlayout;
                //}

                //if max item age in imported feed then use that
                try
                {
                    if (!string.IsNullOrEmpty(myFeeds.maxitemage))
                    {
                        MigrationProperties.Add("MaxItemAge", myFeeds.maxitemage);
                        //this.maxitemage = XmlConvert.ToTimeSpan(myFeeds.maxitemage);
                    }
                }
                catch (FormatException fe)
                {
                    Trace("Error occured while parsing maximum item age from feed list: {0}", fe.ToDescriptiveString());
                }
            } //if(FeedSource.MigrateProperties){
        }