/// <summary> /// /// </summary> public void Initialize(Platform platform) { SystemMonitor.CheckWarning(NewsSourcesUnsafe.Count == 0, "Manager already has assigned sources."); _platform = platform; _persistenceHelper = Platform.CreatePersistenceHelper(platform.Settings); _persistenceHelper.SetupTypeMapping(typeof(RssNewsItem), "RssNewsItems", null); _persistenceHelper.SetupTypeMapping(typeof(NewsSource), "NewsSources", null); _persistenceHelper.SetupTypeMapping(typeof(RssNewsSource), "NewsSources", null); _persistenceHelper.SetupTypeMapping(typeof(ForexNewsItem), "ForexNewsItems", null); _persistenceHelper.SetupTypeMapping(typeof(ForexNewsSource), "ForexNewsSources", null); // Make sure this load is before the accept events, so that they do not cause adding failure. List <NewsSource> sources = _persistenceHelper.SelectDynamicType <NewsSource>(null, "Type", null); base.SourceAddedEvent += new NewsSourceUpdateDelegate(PlatformNewsManager_SourceAddedEvent); base.SourceRemovedEvent += new NewsSourceUpdateDelegate(PlatformNewsManager_SourceRemovedEvent); foreach (NewsSource source in sources) { if (source.Enabled) { List <RssNewsItem> items = _persistenceHelper.Select <RssNewsItem>(new MatchExpression("NewsSourceId", source.Id), null); foreach (RssNewsItem item in items) { item.Source = source; } // Handle the relation to persistence. source.AddItems(items.ToArray()); } base.AddSource(source); } GeneralHelper.FireAndForget(UpdateFeeds); }
/// <summary> /// Handle enable changed, to load items from DB for source (since it may not have any loaded; /// implementing an load "On demand" mechanism"); also store change of Enabled to DB. /// </summary> /// <param name="source"></param> protected override void source_EnabledChangedEvent(NewsSource source) { if (source.Enabled) {// Extract items from DB, since it may have none at this point. List <RssNewsItem> items = _persistenceHelper.Select <RssNewsItem>(new MatchExpression("NewsSourceId", source.Id), null); foreach (RssNewsItem item in items) { item.Source = source; } // Handle the relation to persistence. source.AddItems(items.ToArray()); } // Update source to DB. source_PersistenceDataUpdatedEvent(source); base.source_EnabledChangedEvent(source); }
/// <summary> /// /// </summary> public bool Initialize(PlatformSettings settings) { lock (this) { _persistenceHelper = Platform.CreatePersistenceHelper(settings); _persistenceHelper.SetupTypeMapping(typeof(DataStoreEntry), "DataStoreEntries", null); _dataStoreFilesFolder = settings.GetMappedFolder("DataStoreFolder"); } GeneralHelper.FireAndForget( delegate() { try { // Download online dataDelivery source entries. WebRequest request = WebRequest.Create(settings.DataStoreOnlineSourcesXml); request.Timeout = (int)TimeSpan.FromSeconds(15).TotalMilliseconds; TextReader reader = new StreamReader(request.GetResponse().GetResponseStream()); // If you get an error here in DEBUG MODE, just ignore it, it is a bug in VS 2008. XmlSerializer serializer = new XmlSerializer(typeof(OnlineEntrySource[])); OnlineEntrySource[] sources = (OnlineEntrySource[])serializer.Deserialize(reader); lock (_onlineEntrySources) { // _onlineEntrySources contains serialized existing sources. _onlineEntrySources.AddRange(sources); sources = _onlineEntrySources.ToArray(); } foreach (OnlineEntrySource source in sources) { if (OnlineEntrySourceAddedEvent != null) { OnlineEntrySourceAddedEvent(this, source); } } } catch (Exception ex) { SystemMonitor.OperationError("Failed to obtain online data souces [" + ex.Message + "].", TracerItem.PriorityEnum.Low); } } ); if (Directory.Exists(_dataStoreFilesFolder) == false) { if (Directory.CreateDirectory(_dataStoreFilesFolder) == null) { SystemMonitor.OperationError("Failed to create Data Store folder [" + settings.GetMappedFolder("DataStoreFolder") + "]"); return(false); } } List <DataStoreEntry> entries = _persistenceHelper.Select <DataStoreEntry>(null, null); foreach (DataStoreEntry entry in entries) { DoAddEntry(entry); } ChangeOperationalState(OperationalStateEnum.Operational); return(true); }
/// <summary> /// /// </summary> public bool Initialize(PlatformSettings settings) { lock (this) { _persistenceHelper = Platform.CreatePersistenceHelper(settings); _persistenceHelper.SetupTypeMapping(typeof(DataStoreEntry), "DataStoreEntries", null); _dataStoreFilesFolder = settings.GetMappedFolder("DataStoreFolder"); } GeneralHelper.FireAndForget( delegate() { try {// Download online dataDelivery source entries. WebRequest request = WebRequest.Create(settings.DataStoreOnlineSourcesXml); request.Timeout = (int)TimeSpan.FromSeconds(15).TotalMilliseconds; TextReader reader = new StreamReader(request.GetResponse().GetResponseStream()); // If you get an error here in DEBUG MODE, just ignore it, it is a bug in VS 2008. XmlSerializer serializer = new XmlSerializer(typeof(OnlineEntrySource[])); OnlineEntrySource[] sources = (OnlineEntrySource[])serializer.Deserialize(reader); lock (_onlineEntrySources) {// _onlineEntrySources contains serialized existing sources. _onlineEntrySources.AddRange(sources); sources = _onlineEntrySources.ToArray(); } foreach (OnlineEntrySource source in sources) { if (OnlineEntrySourceAddedEvent != null) { OnlineEntrySourceAddedEvent(this, source); } } } catch (Exception ex) { SystemMonitor.OperationError("Failed to obtain online data souces [" + ex.Message + "].", TracerItem.PriorityEnum.Low); } } ); if (Directory.Exists(_dataStoreFilesFolder) == false) { if (Directory.CreateDirectory(_dataStoreFilesFolder) == null) { SystemMonitor.OperationError("Failed to create Data Store folder [" + settings.GetMappedFolder("DataStoreFolder") + "]"); return false; } } List<DataStoreEntry> entries = _persistenceHelper.Select<DataStoreEntry>(null, null); foreach (DataStoreEntry entry in entries) { DoAddEntry(entry); } ChangeOperationalState(OperationalStateEnum.Operational); return true; }
/// <summary> /// /// </summary> public void Initialize(Platform platform) { SystemMonitor.CheckWarning(NewsSourcesUnsafe.Count == 0, "Manager already has assigned sources."); _platform = platform; _persistenceHelper = Platform.CreatePersistenceHelper(platform.Settings); _persistenceHelper.SetupTypeMapping(typeof(RssNewsItem), "RssNewsItems", null); _persistenceHelper.SetupTypeMapping(typeof(NewsSource), "NewsSources", null); _persistenceHelper.SetupTypeMapping(typeof(RssNewsSource), "NewsSources", null); _persistenceHelper.SetupTypeMapping(typeof(ForexNewsItem), "ForexNewsItems", null); _persistenceHelper.SetupTypeMapping(typeof(ForexNewsSource), "ForexNewsSources", null); // Make sure this load is before the accept events, so that they do not cause adding failure. List<NewsSource> sources = _persistenceHelper.SelectDynamicType<NewsSource>(null, "Type", null); base.SourceAddedEvent += new NewsSourceUpdateDelegate(PlatformNewsManager_SourceAddedEvent); base.SourceRemovedEvent += new NewsSourceUpdateDelegate(PlatformNewsManager_SourceRemovedEvent); foreach (NewsSource source in sources) { if (source.Enabled) { List<RssNewsItem> items = _persistenceHelper.Select<RssNewsItem>(new MatchExpression("NewsSourceId", source.Id), null); foreach (RssNewsItem item in items) { item.Source = source; } // Handle the relation to persistence. source.AddItems(items.ToArray()); } base.AddSource(source); } GeneralHelper.FireAndForget(UpdateFeeds); }