public DateTime?GetLastBuildDate(int feedID) { DateTime?ret = null; feedimport.Rss.RssFeed rssFeed = GetRssFeed(feedID, null); if (rssFeed != null && rssFeed.Header != null && rssFeed.Header.LastBuildDate.HasValue) { ret = rssFeed.Header.LastBuildDate.Value; } return(ret); }
public bool SetRssFeed(feedimport.Rss.RssFeed rssFeed) { bool ret = false; // Ohne Header kann ein RssFeed nicht importiert werden. if (rssFeed == null || rssFeed.Header == null) { return(true); } feedimport.Rss.RssFeed dbRssFeed = GetRssFeed(rssFeed.Header.FeedID, null); using (SqliteConnection conn = GetConnection()) { try { // Header anlegen if (dbRssFeed == null || dbRssFeed.Header == null) { using (SqliteCommand sqlCmd = new SqliteCommand("INSERT INTO rssfeeds (FeedID, DateCreate, Title, Link, Description, LastBuildDate) VALUES (" + "@FeedID, date('now'), @Title, @Link, @Description, @LastBuildDate);", conn)) { sqlCmd.Parameters.AddWithValue("@FeedID", rssFeed.Header.FeedID); sqlCmd.Parameters.AddWithValue("@Title", (!String.IsNullOrEmpty(rssFeed.Header.Title)? rssFeed.Header.Title : "Kein Titel")); sqlCmd.Parameters.AddWithValue("@Link", (!String.IsNullOrEmpty(rssFeed.Header.Link)? rssFeed.Header.Link : null)); sqlCmd.Parameters.AddWithValue("@Description", (!String.IsNullOrEmpty(rssFeed.Header.Description)? rssFeed.Header.Description : null)); if (rssFeed.Header.LastBuildDate.HasValue) { sqlCmd.Parameters.AddWithValue("@LastBuildDate", rssFeed.Header.LastBuildDate.Value); } conn.Open(); sqlCmd.ExecuteNonQuery(); conn.Close(); } } // Items anlegen if (rssFeed.Items != null && rssFeed.Items.Count > 0) { List <SqliteCommand> sqlCmds = new List <SqliteCommand>(); foreach (feedimport.Rss.RssItem row in rssFeed.Items) { bool fInsertRow = true; if (dbRssFeed != null && dbRssFeed.Items != null && dbRssFeed.Items.Count > 0) { fInsertRow = (from r in dbRssFeed.Items where r.FeedID == row.FeedID && r.Link == row.Link select r.ItemID).Count() == 0; } // Zeile in die DB eintragen if (fInsertRow) { SqliteCommand sqlCmd = new SqliteCommand("INSERT INTO rssfeeditem (FeedID, DateCreate, Title, Link, Description, Category, PubDate, IsRead) VALUES (" + "@FeedID, @DateCreate, @Title, @Link, @Description, @Category, @PubDate, @IsRead)", conn); sqlCmd.Parameters.AddWithValue("@FeedID", row.FeedID); sqlCmd.Parameters.AddWithValue("@DateCreate", DateTime.Now); sqlCmd.Parameters.AddWithValue("@Title", (!String.IsNullOrEmpty(row.Title)? row.Title : "Kein Titel")); sqlCmd.Parameters.AddWithValue("@Link", (!String.IsNullOrEmpty(row.Link)? row.Link : null)); sqlCmd.Parameters.AddWithValue("@Description", (!String.IsNullOrEmpty(row.Description)? row.Description : null)); sqlCmd.Parameters.AddWithValue("@Category", (!String.IsNullOrEmpty(row.Category)? row.Category : null)); if (row.PubDate.HasValue) { sqlCmd.Parameters.AddWithValue("@PubDate", row.PubDate.Value); } sqlCmd.Parameters.AddWithValue("@IsRead", 0); sqlCmds.Add(sqlCmd); } } if (sqlCmds != null && sqlCmds.Count > 0) { conn.Open(); foreach (SqliteCommand cmd in sqlCmds) { cmd.ExecuteNonQuery(); } conn.Close(); } } ret = true; // TODO: Items die gelesen und älter als 365 Tage sind aus der DB entfernen // Die Daten erst spät entfernen, da sie sonst als neue nicht gelesene wieder angezeigt werden. } catch (SqliteException ex) { System.Diagnostics.Debug.WriteLine("SqlEx SetRssFeed - ex: " + ex.ToString()); } } return(ret); }