Index: simplefeed.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/simplefeed/simplefeed.module,v
retrieving revision 1.44.2.11
diff -u -p -r1.44.2.11 simplefeed.module
--- simplefeed.module	13 Aug 2008 22:28:17 -0000	1.44.2.11
+++ simplefeed.module	25 Sep 2008 22:42:35 -0000
@@ -190,6 +190,26 @@ function simplefeed_validate($node) {
     if ($duplicate != '' && $duplicate != $node->nid) {
       form_set_error('url', t('The URL entered already exists. Please try a different URL.'));
     }
+    
+    if (variable_get('simplefeed_check_url', TRUE)) {
+      include_once './'. drupal_get_path('module', 'simplefeed') .'/simplepie.inc';
+      
+      // init simplepie and have it see if it can find a feed
+      $feed = new SimplePie();
+      $feed->enable_cache(FALSE);
+      $feed->set_timeout(15);
+      
+      // prevent SimplePie from using all of it's data santization since we use Drupal's input formats to handle this
+      $feed->set_stupidly_fast(TRUE);
+      $feed->set_feed_url($node->url);
+  
+      header("If-Modified-Since:" . 1);
+      $success = $feed->init();
+
+      if (!$success) {
+        form_set_error('url', t('The URL entered doesn\'t have a feed'));
+      }
+    }
   }
   else {
     form_set_error('url', t('The URL entered is not valid. It should be in the format of: %url_format', array('%url_format' => 'http://www.example.com/rss.xml')));
@@ -420,6 +440,17 @@ function simplefeed_admin_settings() {
     '#options' => $throttle,
     '#default_value' => variable_get('simplefeed_cron_throttle', 50),
   );
+  
+  $form['simplefeed_check_url'] = array(
+    '#type' => 'select',
+    '#title' => t('Verify feed before adding to database'),
+    '#description' => t('This setting determines whether or not Simplefeed checks if the feed is valid. This does slow done the site when submitting a feed node'),
+    '#options' => array(
+      FALSE => t('No. Do not verify feed existance when saving a feed node'),
+      TRUE => t('Yes. Verify feed existance when saving a feed node'),
+    ),
+    '#default_value' => variable_get('simplefeed_check_url', TRUE),
+  );
 
   return system_settings_form($form);
 }
@@ -471,7 +492,7 @@ function simplefeed_feed_refresh($nid = 
     $limit = variable_get('simplefeed_cron_throttle', 50);
     // limit in ASC order so we grab the top N that haven't been checked recently
     // we can only update feed nodes that have a valid refresh time set; ignore "never" and "manual" options
-    $query = 'SELECT n.nid FROM {node} n INNER JOIN {simplefeed_feed} s ON n.vid = s.vid WHERE ((%d - s.checked) >= s.refresh) AND n.status = 1 AND s.refresh > 1 ORDER BY s.checked ASC';
+    $query = 'SELECT n.nid FROM {node} n INNER JOIN {simplefeed_feed} s ON n.vid = s.vid WHERE ((%d - s.checked) >= s.refresh) AND n.status = 1 AND s.refresh > 1  AND s.error = 0 ORDER BY s.checked ASC';
     if ($limit != 'unlimited') {
       $process_feeds = db_query_range($query, time(), 0, $limit);
     }
@@ -510,6 +531,8 @@ function simplefeed_feed_process($nid) {
   // prevent SimplePie from using all of it's data santization since we use Drupal's input formats to handle this
   $feed->set_stupidly_fast(TRUE);
   $feed->set_feed_url($process_feed->url);
+  
+  header("If-Modified-Since:" . $process_feed->checked);
   $success = $feed->init();
 
   if ($success && $feed->data) {
@@ -535,6 +558,7 @@ function simplefeed_feed_process($nid) {
   }
   else if (isset($feed->error)) {
     watchdog('simplefeed', t('The feed %feed could not be processed due to the following error: %error', array('%feed' => $process_feed->title, '%error' => $feed->error)), WATCHDOG_ERROR, l('view', 'node/'. $process_feed->nid));
+    db_query("UPDATE {simplefeed_feed} SET error = 1 WHERE vid = %d", $process_feed->vid);
   }
 }
