コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }