Index: simplefeed.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/simplefeed/simplefeed.install,v
retrieving revision 1.10.2.4
diff -u -F^f -r1.10.2.4 simplefeed.install
--- simplefeed.install	12 Jun 2008 09:38:05 -0000	1.10.2.4
+++ simplefeed.install	26 Sep 2008 03:27:04 -0000
@@ -15,9 +15,11 @@ function simplefeed_install() {
         expires int NOT NULL default '0',
         refresh int NOT NULL default '0',
         checked int NOT NULL default '0',
+        error int(1) NOT NULL default '0', 
         hash varchar(32),        
         PRIMARY KEY (vid),
-        KEY nid (nid)
+        KEY nid (nid),
+        KEY error (error)
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
       break;
     case 'pgsql':
@@ -28,10 +30,12 @@ function simplefeed_install() {
         expires int NOT NULL default '0',
         refresh int NOT NULL default '0',
         checked int NOT NULL default '0',
+        error int(1) NOT NULL default '0',
         hash varchar(32),        
         PRIMARY KEY (vid)
       )");
       db_query("CREATE INDEX {simplefeed_feed}_nid_idx ON {simplefeed_feed} (nid)");
+      db_query("CREATE INDEX {simplefeed_feed}_error_idx ON {simplefeed_feed} (nid)");      
       break;
   }
 
@@ -50,6 +54,7 @@ function simplefeed_uninstall() {
   variable_del('simplefeed_vocab');
   variable_del('simplefeed_categories');
   variable_del('simplefeed_cron_throttle');
+  variable_get('simplefeed_check_url');
 }
 
 function simplefeed_update_1() {
@@ -64,3 +69,15 @@ function simplefeed_update_2() {
   $ret[] = update_sql("ALTER TABLE {simplefeed_feed} CHANGE url url text");  
   return $ret;
 }
+
+function simplefeed_update_3() {
+  $ret = array();
+  $ret[] = update_sql("ALTER TABLE {simplefeed_feed} ADD COLUMN error int(1) NOT NULL DEFAULT 0");
+  if ($GLOBALS['db_type'] == 'pgsql') {
+    db_query("CREATE INDEX {simplefeed_feed}_error_idx ON {simplefeed_feed} (error)");
+  }
+  else {
+    db_query("CREATE INDEX error ON {simplefeed_feed} (error)");
+  }
+  return $ret;
+}
Index: simplefeed.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/simplefeed/simplefeed.module,v
retrieving revision 1.44.2.13
diff -u -F^f -r1.44.2.13 simplefeed.module
--- simplefeed.module	26 Sep 2008 01:13:52 -0000	1.44.2.13
+++ simplefeed.module	26 Sep 2008 03:27:04 -0000
@@ -190,6 +190,28 @@ 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', 1)) {
+      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);
+  
+      // feed hasn't been added yet, so use a very low time setting
+      // FeedBurner requires this
+      header("If-Modified-Since:" . 1);
+      $success = $feed->init();
+
+      if (!$success) {
+        form_set_error('url', t('A feed could not be found at this URL. Please try a different URL.'));
+      }
+    }
   }
   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 +442,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 should check to see if a feed exists at the URL provided. This can slow down adding feeds slightly since a feed has to be fetched and verified before the node can be created.'),
+    '#options' => array(
+      0 => t('No'),
+      1 => t('Yes'),
+    ),
+    '#default_value' => variable_get('simplefeed_check_url', 1),
+  );
 
   return system_settings_form($form);
 }
@@ -471,7 +504,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);
     }
@@ -534,10 +567,11 @@ function simplefeed_feed_process($nid) {
     }
 
     // finished processing this feed so we can mark it checked
-    db_query("UPDATE {simplefeed_feed} SET checked = %d, hash = '%s' WHERE vid = %d", time(), $hash, $process_feed->vid);
+    db_query("UPDATE {simplefeed_feed} SET checked = %d, hash = '%s', error = 0 WHERE vid = %d", time(), $hash, $process_feed->vid);
   }
   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);
   }
   else {
     watchdog('simplefeed', 'You shouldn\'t be here. Something has gone terribly wrong.');
