--- feed_field/feed_field.module	2009-04-27 00:20:56.000000000 -0500
+++ feed_field/new/feed_field.module	2010-04-24 06:13:01.000000000 -0500
@@ -530,4 +530,58 @@ function _feed_field_save_parsed_feed($i
 function _feed_field_save_item($edit) {
   db_query("INSERT INTO {feed_field_items} (ff_id, title, link, author, description, timestamp, guid) VALUES (%d, '%s', '%s', '%s', '%s', %d, '%s')", $edit['ff_id'], $edit['title'], $edit['link'], $edit['author'], $edit['description'], $edit['timestamp'], $edit['guid']);
   $edit['id'] = db_last_insert_id('feed_field_items', 'id');
+}
+
+/**
+ * Implements hook_cron().
+ *
+ * @param $nid
+ *   the node to be refreshed
+ *   (all feed_field nodes will be refreshed if no nid is specified).
+ */
+function feed_field_cron($nid=null) {
+  $content_types = content_fields();
+  if (is_null($nid)) {
+    $feeds = db_query("SELECT * FROM {feed_field_settings} ORDER BY nid, delta");
+  } else {
+    $feeds = db_query("SELECT * FROM {feed_field_settings} WHERE nid=%d ORDER BY nid, delta", $nid);
+  }
+  $now = time();
+  $urls = array();
+  $nid = $old_nid = 0;
+  while ($settings = db_fetch_object($feeds)) {
+    $nid = $settings->nid;
+    if ($nid != $old_nid) {
+      $node = node_load($nid);
+      $fieldname = '';
+      foreach ($content_types as $type) {
+        if ($type['type_name'] == $node->type) {
+          $fieldname = $type['field_name'];
+          break;
+        }
+      }
+    }
+    if (empty($fieldname)) continue;
+    $field_value = $node->{$fieldname}[$settings->delta];
+    if (($now - $node->changed) > $field_value['feed_field_freq']) {
+      // first we update the feeds...
+      _feed_field_refresh_items($settings->id, $field_value);
+      db_query("UPDATE {feed_field_settings} SET modified='%s' WHERE nid=%d AND delta=%d", $now, $nid, $settings->delta);
+      // then we set $node->changed...
+      db_query("UPDATE {node} SET changed='%s' WHERE nid=%d", $now, $nid);
+    }
+    $old_nid = $nid;
+  } 
+  $ret = db_query("SELECT s.id as sid, i.id as iid FROM {feed_field_items} AS i LEFT JOIN {feed_field_settings} AS s ON s.id = i.ff_id");
+  $ids = array();
+  while ($row = db_fetch_object($ret)) {
+    if (empty($row->sid)) {
+      $ids[] = $row->iid;
+    }
+  }
+  if (!empty($ids)) {
+    db_query("DELETE FROM {feed_field_items} WHERE id IN (%s)", implode(',', $ids));
+    // uncomment next line for watchdog reports
+    // watchdog('aggregator', 'deleted feedfield items: ' . htmlentities(print_r($ids,1)));
+  }
 }
\ No newline at end of file
