Index: feedapi.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/feedapi/feedapi.module,v
retrieving revision 1.23.2.96
diff -u -r1.23.2.96 feedapi.module
--- feedapi.module	5 Dec 2007 15:32:45 -0000	1.23.2.96
+++ feedapi.module	5 Dec 2007 15:45:04 -0000
@@ -275,7 +275,7 @@
       $nid = $feed->nid;
       // Force non-caching mode if the feed is only processed half-done.
       $feed = _feedapi_call_parsers($feed, $feed->parsers, $feed->half_done ? FALSE : TRUE);
-      if ($feed === FALSE) {
+      if (($feed === FALSE) || (!is_array($feed->items))) {
         // Refresh the Last refresh field at all the cases
         db_query("UPDATE {feedapi} SET checked = %d, half_done = %d WHERE nid = %d", time(), FALSE, $nid);
         if (!$cron) {
@@ -296,7 +296,7 @@
         $is_new = FALSE;
         foreach ($feed->processors as $processor) {
           if (!module_invoke($processor, 'feedapi_item', 'unique', $item, $feed->nid, $feed->settings['processors'][$processor])) {
-            if ($feed->update_existing == TRUE) {
+            if ($settings['update_existing'] == TRUE) {
               module_invoke($processor, 'feedapi_item', 'update', $item, $feed->nid, $feed->settings['processors'][$processor]);
               $is_updated = TRUE;
             }
@@ -305,7 +305,7 @@
 
             // if the item is already expired then do nothing
             $diff = abs(time() - (isset($item->options->timestamp) ? $item->options->timestamp : time()));
-            $items_delete = $settings['feedapi_items_delete'];
+            $items_delete = $settings['items_delete'];
             if ($diff > $items_delete && ($items_delete > FEEDAPI_NEVER_DELETE_OLD)) {
               break;
             }
@@ -461,7 +461,7 @@
  */
 function feedapi_expire($feed, $force) {
   $settings = _feedapi_get_settings(array('nid' => $feed->nid));
-  $feed->items_delete = $settings['feedapi_items_delete'];
+  $feed->items_delete = $settings['items_delete'];
   $needs_refresh = time() - $feed->checked > $feed->refresh;
   if (is_array($feed->items) && ($needs_refresh || $force) && $feed->items_delete > FEEDAPI_NEVER_DELETE_OLD) {
     foreach ($feed->items as $item) {
@@ -728,7 +728,7 @@
       '#description' => t('If checked, feed items will be processed immediately after a feed is created.'),
       '#default_value' => 0,
     );
-    $form['feedapi_update_existing'] = array(
+    $form['update_existing'] = array(
       '#type' => 'checkbox',
       '#title' => t('Update existing feed items'),
       '#description' => t('If checked, existing feed items will be updated when feed is refreshed.'),
@@ -736,7 +736,7 @@
     );
     $period = drupal_map_assoc(array(3600, 10800, 21600, 32400, 43200, 86400, 172800, 259200, 604800, 1209600, 2419200, 3628800, 4838400, 7257600, 15724800, 31536000), 'format_interval');
     $period[FEEDAPI_NEVER_DELETE_OLD] = t('Never');
-    $form['feedapi_items_delete'] = array(
+    $form['items_delete'] = array(
       '#type' => 'select',
       '#title' => t('Delete news items older than'),
       '#options' => $period,
@@ -1057,14 +1057,12 @@
     }
     db_query("UPDATE {feedapi} SET
             url = '%s', feed_type = '%s', processors = '%s',
-            parsers = '%s', link = '%s',
-            update_existing = %d WHERE nid = %d", 
+            parsers = '%s', link = '%s' WHERE nid = %d", 
     $node->feed->url,
     $node->feed->feed_type,
     serialize($node->feed->processors),
     serialize($node->feed->parsers),
     $node->feed->options->link,
-    $node->feedapi['feedapi_update_existing'],
     $node->nid
     );
     // Store add on module's settings if user has permission to do so.
@@ -1100,7 +1098,7 @@
     }
     $feed = (object) array_merge((array) $feed, (array) $parser_output);
   }
-  // Call the turned on parsers, create an union of returned options
+  // Call the turned on parsers, create a union of returned options
   $parsers_secondary = is_array($parsers_secondary) ? $parsers_secondary : array();
   foreach ($parsers_secondary as $parser) {
     $feed_ext = module_invoke($parser, 'feedapi_feed', 'parse', $feed, FALSE);
Index: feedapi.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/feedapi/feedapi.install,v
retrieving revision 1.5.2.14
diff -u -r1.5.2.14 feedapi.install
--- feedapi.install	30 Nov 2007 00:00:44 -0000	1.5.2.14
+++ feedapi.install	5 Dec 2007 15:45:04 -0000
@@ -107,21 +107,61 @@
   }
   return $ret;
 }
-/*
+
 function feedapi_update_3() {
     $ret = array();
   switch ($GLOBALS['db_type']) {
     case 'mysqli':
     case 'mysql':
-      $ret[] = update_sql("ALTER TABLE {feedapi}
-        DROP COLUMN items_delete
-      ");
+      $result = db_query('SELECT n.nid, n.type, f.items_delete, f.update_existing FROM {feedapi} f JOIN {node} n ON n.nid = f.nid');
+      while ($feed = db_fetch_object($result)) {
+        if ($settings = _feedapi_get_settings(array('node_type' => $feed->type, 'nid' => $feed->nid))) {
+          if (!isset($settings['refresh_on_create'])) {
+            $settings['refresh_on_create'] = 0;
+          }
+          if (isset($settings['feedapi_update_existing'])) {
+            $settings['update_existing'] = $settings['feedapi_update_existing'];
+          }
+          else {
+            $settings['update_existing'] = $feed->update_existing;
+          }
+          if (isset($settings['feedapi_items_delete'])) {
+            $settings['items_delete'] = $settings['feedapi_items_delete'];
+          }
+          else {
+            $settings['items_delete'] = $feed->items_delete;
+          }
+          _feedapi_store_settings(array('nid' => $feed->nid), $settings);
+        }
+      }
+      $ret[] = update_sql("ALTER TABLE {feedapi} DROP COLUMN items_delete");
+      $ret[] = update_sql("ALTER TABLE {feedapi} DROP COLUMN update_existing");
       break;
     case 'pgsql':
-      db_query("ALTER TABLE {feedapi}
-        DROP COLUMN items_delete
-      ");
+      $result = db_query('SELECT n.nid, n.type, f.items_delete, f.update_existing FROM {feedapi} f JOIN {node} n ON n.nid = f.nid');
+      while ($feed = db_fetch_object($result)) {
+        if ($settings = _feedapi_get_settings(array('node_type' => $feed->type, 'nid' => $feed->nid))) {
+          if (!isset($settings['refresh_on_create'])) {
+            $settings['refresh_on_create'] = 0;
+          }
+          if (isset($settings['feedapi_update_existing'])) {
+            $settings['update_existing'] = $settings['feedapi_update_existing'];
+          }
+          else {
+            $settings['update_existing'] = $feed->update_existing;
+          }
+          if (isset($settings['feedapi_items_delete'])) {
+            $settings['items_delete'] = $settings['feedapi_items_delete'];
+          }
+          else {
+            $settings['items_delete'] = $feed->items_delete;
+          }
+          _feedapi_store_settings(array('nid' => $feed->nid), $settings);
+        }
+      }
+      db_query("ALTER TABLE {feedapi} DROP COLUMN items_delete");
+      db_query("ALTER TABLE {feedapi} DROP COLUMN update_existing");
+      break;
   }
   return $ret;
 }
-*/
\ No newline at end of file
