Index: cdn.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cdn/cdn.admin.inc,v
retrieving revision 1.11
diff -u -p -r1.11 cdn.admin.inc
--- cdn.admin.inc	22 Apr 2010 02:47:39 -0000	1.11
+++ cdn.admin.inc	6 May 2010 23:36:06 -0000
@@ -16,8 +16,14 @@
  */
 function cdn_admin_mode_settings_form_router() {
   $mode = variable_get(CDN_MODE_VARIABLE, CDN_MODE_BASIC);
-  $form_function = ($mode == CDN_MODE_BASIC) ? 'cdn_admin_basic_settings_form' : 'cdn_admin_advanced_settings_form';
-  return drupal_get_form($form_function);
+  switch ($mode) {
+    case CDN_MODE_BASIC:
+      return drupal_get_form('cdn_admin_basic_settings_form');
+    case CDN_MODE_MEDIAMOVER:
+      return drupal_get_form('cdn_admin_media_mover_settings_form');
+    case CDN_MODE_ADVANCED:
+      return drupal_get_form('cdn_admin_advanced_settings_form');
+  }
 }
 
 
@@ -61,6 +67,10 @@ function cdn_admin_general_settings_form
       "<strong>Basic mode</strong> will simply prepend another URL to the
       complete file URL. Therefor, it only works for CDNs that support the
       Origin Pull technique.<br />
+      <strong>Media Mover mode</strong> uses the URLs stored in the Media 
+      Mover module's files table to rewrite the image paths based on whether or
+      not the files have been pushed to the CDN. This method only supports push 
+      CDNs such as Amazon S3.<br />
       <strong>Advanced mode</strong> uses the daemon to synchronize files and
       can be used with both Origin Pull and Push CDNs. If you've got an Origin
       Pull CDN and want to process files before they're synced to the CDN, it
@@ -68,8 +78,9 @@ function cdn_admin_general_settings_form
     ),
     '#required' => TRUE,
     '#options'  => array(
-      CDN_MODE_BASIC    => t('Basic'),
-      CDN_MODE_ADVANCED => t('Advanced'),
+      CDN_MODE_BASIC      => t('Basic'),
+      CDN_MODE_MEDIAMOVER => t('Media Mover'),
+      CDN_MODE_ADVANCED   => t('Advanced'),
     ),
     '#default_value' => variable_get(CDN_MODE_VARIABLE, CDN_MODE_BASIC),
   );
@@ -127,6 +138,22 @@ function cdn_admin_basic_settings_form(&
 }
 
 /**
+ * Form definition; Media Mover settings.
+ */
+function cdn_admin_media_mover_settings_form() {
+  $form['cdn_media_mover_api_version'] = array(
+    '#title'         => t('Media Mover API version'),
+    '#type'          => 'textfield',
+    '#disabled'          => TRUE,
+    '#description'   => t('Automatically detected when Media Mover mode is selected. Re-submit 
+                           the main settings form to refresh this setting.'),
+    '#default_value' => variable_get(CDN_MEDIAMOVER_API_VARIABLE, _cdn_get_media_mover_api_version()),
+  );
+  
+  return system_settings_form($form);
+}
+
+/**
  * Form definition; advanced settings.
  */
 function cdn_admin_advanced_settings_form(&$form_state) {
@@ -226,16 +253,41 @@ function cdn_admin_general_settings_form
   // be configured (on the advanced settings form) *before* advanced mode can
   // be enabled!
   $enabled  = isset($form_state['values'][CDN_STATUS_VARIABLE]) && $form_state['values'][CDN_STATUS_VARIABLE] != CDN_DISABLED;
+  $media_mover = isset($form_state['values'][CDN_MODE_VARIABLE]) && $form_state['values'][CDN_MODE_VARIABLE]   == CDN_MODE_MEDIAMOVER;
   $advanced = isset($form_state['values'][CDN_MODE_VARIABLE])   && $form_state['values'][CDN_MODE_VARIABLE]   == CDN_MODE_ADVANCED;
-  if ($enabled && $advanced) {
-    $synced_files_db = variable_get(CDN_ADVANCED_SYNCED_FILES_DB_VARIABLE, '');
-    if (!_cdn_admin_validate_synced_files_db($synced_files_db, CDN_STATUS_VARIABLE)) {
-      drupal_set_message(t('Please correct the above error in the <em>Advanced mode</em> settings form first.'), 'error');
+  if ($enabled) {
+    if ($media_mover) {
+      $mm_version = _cdn_get_media_mover_api_version();
+      switch($mm_version) {
+        case 1:
+        case 2:
+          variable_set(CDN_MEDIAMOVER_API_VARIABLE, $mm_version);
+          drupal_set_message(t('Using Media Mover API version ' . $mm_version), 'status');
+          break;
+        default:
+          drupal_set_message(t('Could not detect Media Mover API version.'), 'error');
+      }
+    }
+    elseif ($advanced) {
+      $synced_files_db = variable_get(CDN_ADVANCED_SYNCED_FILES_DB_VARIABLE, '');
+      if (!_cdn_admin_validate_synced_files_db($synced_files_db, CDN_STATUS_VARIABLE)) {
+        drupal_set_message(t('Please correct the above error in the <em>Advanced mode</em> settings form first.'), 'error');
+      }
     }
   }
 }
 
 /**
+ * Default validate callback for the media mover settings form.
+ */
+function cdn_admin_media_mover_settings_form_validate($form, &$form_state) {
+  // Detect the media mover api version if the field is empty.
+  if (!$form_state['values'][CDN_MEDIAMOVER_API_VARIABLE]) {
+    $form_state['values'][CDN_MEDIAMOVER_API_VARIABLE] = _cdn_get_media_mover_api_version();
+  }
+}
+
+/**
  * Default validate callback for the advanced settings form.
  */
 function cdn_admin_advanced_settings_form_validate($form, &$form_state) {
@@ -284,6 +336,15 @@ function _cdn_admin_validate_synced_file
 }
 
 /**
+ * Helper function to automatically retrieve version of the media mover api.
+ */
+function _cdn_get_media_mover_api_version() {
+  $mm_info = unserialize(db_result(db_query("SELECT info FROM system WHERE name = 'media_mover_api'")));
+  preg_match('/[0-9]\..-([0-9])/', $mm_info['version'], $matches);
+  return $matches[1];
+}
+
+/**
  * Helper function to check if the requirements of the CDN integration module
  * have been met. If any requirement errors exist, they are aggregated into
  * a single error message and are subsequently displayed.
Index: cdn.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cdn/cdn.module,v
retrieving revision 1.41
diff -u -p -r1.41 cdn.module
--- cdn.module	22 Apr 2010 01:49:08 -0000	1.41
+++ cdn.module	6 May 2010 23:36:06 -0000
@@ -19,6 +19,7 @@ define('CDN_PERM_TOUCH',          'touch
 // Variables and values.
 define('CDN_MODE_VARIABLE', 'cdn_mode');
 define('CDN_MODE_BASIC', 'basic');
+define('CDN_MODE_MEDIAMOVER', 'media_mover');
 define('CDN_MODE_ADVANCED', 'advanced');
 define('CDN_STATUS_VARIABLE', 'cdn_status');
 define('CDN_STATS_VARIABLE', 'cdn_stats');
@@ -31,6 +32,9 @@ define('CDN_BASIC_URL_VARIABLE', 'cdn_ba
 define('CDN_BASIC_EXTENSIONS_VARIABLE', 'cdn_basic_extensions');
 define('CDN_BASIC_EXTENSIONS_DEFAULT', '.css .js .ico .gif .jpg .jpeg .png .svg .otf .ttf .swf');
 
+// Variables for media mover mode.
+define('CDN_MEDIAMOVER_API_VARIABLE', 'cdn_media_mover_api_version');
+
 // Variables for advanced mode.
 define('CDN_ADVANCED_SYNCED_FILES_DB_VARIABLE', 'cdn_advanced_synced_files_db');
 
@@ -76,6 +80,9 @@ function cdn_file_url_alter(&$path) {
       $cdn_url = cdn_basic_get_url($path);
       $server = FALSE;
     }
+    elseif ($mode == CDN_MODE_MEDIAMOVER) {
+      $cdn_url = cdn_media_mover_get_url($path);
+    }
     else {
       list($cdn_url, $server) = cdn_advanced_get_url($path);
     }
@@ -427,6 +434,37 @@ function cdn_basic_get_url($path) {
 }
 
 /**
+ * Gets the URL for a file when the Media mover mode is enabled.
+ *
+ * @param $path
+ *   The path to get the URL for.
+ */
+function cdn_media_mover_get_url($path) {
+  $mm_api_version = variable_get('cdn_media_mover_api_version', '');
+  if ($mm_api_version == 1) {
+    // If $path is an imagecache path, use the path of the "process" step in 
+    // media mover's database, otherwise, use the harvest field.
+    if (strpos($path, 'imagecache/')) {
+      $mm_step = 'process_file';
+    } else {
+      $mm_step = 'harvest_file';
+    }
+
+    // Check if $path is in the media mover db and get the path at the last step if so.
+    $complete_file = db_result(db_query("SELECT complete_file FROM media_mover_files WHERE %s = '%s'", $mm_step, $path));
+    // Only use if $complete_file is an external URL.
+    $data = explode('://', $complete_file);
+    if (count($data) == 2) {
+      $cdn_url = $complete_file;
+    }
+  }
+  elseif ($mm_api_version == 2) {
+    // TODO
+  }
+  return $cdn_url ? $cdn_url : FALSE;
+}
+
+/**
  * Gets the URL for a file when the basic mode is enabled.
  *
  * @param $path
