? .cvsignore
? browser
? media-popup.patch
? images/icons/tango
? images/icons/tango-icon-theme-0.8.90.tar.gz
Index: media.fields.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/media/media.fields.inc,v
retrieving revision 1.21
diff -u -r1.21 media.fields.inc
--- media.fields.inc	14 Sep 2010 13:50:00 -0000	1.21
+++ media.fields.inc	15 Sep 2010 22:04:03 -0000
@@ -330,3 +330,94 @@
 
   return $return;
 }
+
+
+/**
+ * Implements hook_field_insert().
+ */
+function media_field_insert($entity_type, $entity, $field, $instance, $langcode, &$items) {
+  list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
+
+  // Add a new usage of each uploaded file.
+  foreach ($items as $item) {
+    $file = (object) $item;
+    file_usage_add($file, 'media', $entity_type, $id);
+  }
+}
+
+/**
+ * Implements hook_field_update().
+ *
+ * Checks for files that have been removed from the object.
+ */
+function media_field_update($entity_type, $entity, $field, $instance, $langcode, &$items) {
+  list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
+
+  // On new revisions, all files are considered to be a new usage and no
+  // deletion of previous file usages are necessary.
+  if (!empty($entity->revision)) {
+    foreach ($items as $item) {
+      $file = (object) $item;
+      file_usage_add($file, 'media', $entity_type, $id);
+    }
+    return;
+  }
+  
+  // Build a display of the current FIDs.
+  $current_fids = array();
+  foreach ($items as $item) {
+    $current_fids[] = $item['fid'];
+  }
+  
+  // Create a bare-bones entity so that we can load its previous values.
+  $original = entity_create_stub_entity($entity_type, array($id, $vid, $bundle));
+  field_attach_load($entity_type, array($id => $original), FIELD_LOAD_CURRENT, array('field_id' => $field['id']));
+
+  // Compare the original field values with the ones that are being saved.
+  $original_fids = array();
+  if (!empty($original->{$field['field_name']}[$langcode])) {
+    foreach ($original->{$field['field_name']}[$langcode] as $original_item) {
+      $original_fids[] = $original_item['fid'];
+      if (isset($original_item['fid']) && !in_array($original_item['fid'], $current_fids)) {
+        // Decrement the file usage count by 1.
+        $file = (object)$original_item;
+        file_usage_delete($file, 'media', $entity_type, $id, 1);
+      }
+    }
+  }
+
+  // Add new usage entries for newly added files.
+  foreach ($items as $item) {
+    if (!in_array($item['fid'], $original_fids)) {
+      $file = (object) $item;
+      file_usage_add($file, 'media', $entity_type, $id);
+    }
+  }
+}
+
+/**
+ * Implements hook_field_delete().
+ */
+function media_field_delete($entity_type, $entity, $field, $instance, $langcode, &$items) {
+  list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
+
+  // Delete all file usages within this entity.
+  foreach ($items as $delta => $item) {
+    $file = (object) $item;
+    file_usage_delete($file, 'media', $entity_type, $id, 0);
+  }
+}
+
+/**
+ * Implements hook_field_delete_revision().
+ */
+function media_field_delete_revision($entity_type, $entity, $field, $instance, $langcode, &$items) {
+  list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
+  foreach ($items as $delta => $item) {
+    // @TODO: Not sure if this is correct
+    $file = (object)$item;
+    if (file_usage_delete($file, 'media', $entity_type, $id, 1)) {
+      $items[$delta] = NULL;
+    }
+  }
+}
Index: media.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/media/media.module,v
retrieving revision 1.48
diff -u -r1.48 media.module
--- media.module	14 Sep 2010 18:25:39 -0000	1.48
+++ media.module	15 Sep 2010 22:04:04 -0000
@@ -1074,15 +1074,6 @@
 }
 
 /**
- * Implements hook_file_references().
- */
-function media_file_references($file) {
-  $count = file_get_file_reference_count($file, NULL, 'media');
-  return $count ? array('media' => $count) : NULL;
-}
-
-
-/**
  * Implements hook_entity_info().
  */
 function media_entity_info() {
