PowerPress Podcasting plugin by Blubrry - Version 0.9.11

Version Description

  • Released on 10/01/2009
  • We are working on PowerPress version 1.0, if you'd like to beta test, please email Angelo (cio [at] rawvoice.com).
  • Fixed minor bugs with mp3 media detection: proper user agent set, logic added to deal with LibSyn 406 error, and media detection script can now be used for detecting file size for other media types.
  • Improved iTunes subtitle so value is contained within one line.
  • Fixed bug with mv4 video displaying incorrectly in PowerPress player.
Download this release

Release Info

Developer amandato
Plugin Icon 128x128 PowerPress Podcasting plugin by Blubrry
Version 0.9.11
Comparing to
See all releases

Code changes from version 0.9.10 to 0.9.11

Files changed (5) hide show
  1. mp3info.class.php +123 -35
  2. player.js +2 -3
  3. powerpress.php +8 -2
  4. powerpressadmin-metabox.php +3 -1
  5. readme.txt +9 -1
mp3info.class.php CHANGED
@@ -9,17 +9,22 @@
9
  //var $m_DownloadBytesLimit = 1638400; // 200K (200*1024*8) bytes file
10
  //var $m_DownloadBytesLimit = 204800; // 25K (25*1024*8) bytes file
11
  var $m_DownloadBytesLimit = 327680; // 40K (40*1024*8) bytes file
 
12
  var $m_RedirectLimit = 12; // Number of times to do the 302 redirect
13
- var $m_UserAgent = 'Blubrry PowerPress/1.0';
14
  var $m_error = '';
15
  var $m_warnings = array();
16
  var $m_ContentLength = false;
17
  var $m_RedirectCount = 0;
 
 
 
18
 
19
  // Constructor
20
  function Mp3Info()
21
  {
22
  // Empty for now
 
23
  }
24
 
25
  /*
@@ -132,10 +137,10 @@
132
  if ($fp)
133
  {
134
  // Create and send the request headers
135
- $RequestHeaders = 'GET '.$urlParts['path'].(isset($urlParts['query']) ? '?'.@$urlParts['query'] : '')." HTTP/1.0\r\n";
136
  $RequestHeaders .= 'Host: '.$urlParts['host'].($urlParts['port'] != 80 ? ':'.$urlParts['port'] : '')."\r\n";
137
  $RequestHeaders .= "Connection: Close\r\n";
138
- $RequestHeaders .= "User-Agent: {this->m_UserAgent}\r\n";
139
  fwrite($fp, $RequestHeaders."\r\n");
140
 
141
  $Redirect = false;
@@ -209,7 +214,21 @@
209
  }
210
  else // Otherwise, lets set the data and return true for part two
211
  {
212
- global $TempFile;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
213
  if( function_exists('get_temp_dir') ) // If wordpress function is available, lets use it
214
  $TempFile = tempnam(get_temp_dir(), 'wp_powerpress');
215
  else // otherwise use the default path
@@ -252,7 +271,7 @@
252
 
253
  $curl = curl_init();
254
  // First, get the content-length...
255
- curl_setopt($curl, CURLOPT_USERAGENT, 'Blubrry PowerPress/'.POWERPRESS_VERSION);
256
  curl_setopt($curl, CURLOPT_URL, $url);
257
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
258
  curl_setopt($curl, CURLOPT_HEADER, true); // header will be at output
@@ -295,23 +314,45 @@
295
  $redirect_url = trim($matches[1]);
296
 
297
  if( $redirect_url )
 
 
298
  return $this->DownloadCurl($redirect_url, $RedirectCount +1);
 
299
  else
 
300
  $this->SetError( sprintf(__('Unable to obtain HTTP %d redirect URL.'), $HttpCode) );
 
301
  }
302
  }; break;
303
  default: {
304
  $this->SetError( curl_error($curl) );
305
  }; break;
306
  }
 
307
  return false;
308
  }
309
 
 
310
  if( stristr($ContentType, 'text') )
311
  {
312
  $this->SetError( 'Invalid content type returned.' );
313
  return false;
314
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
315
 
316
  global $TempFile;
317
  if( function_exists('get_temp_dir') ) // If wordpress function is available, lets use it
@@ -323,13 +364,16 @@
323
  $this->SetError('Unable to create temporary file for checking media information.');
324
  return false;
325
  }
326
-
327
  $fp = fopen($TempFile, 'w+b');
328
  // Next get the first chunk of the file...
329
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, false);
330
- curl_setopt($curl, CURLOPT_USERAGENT, 'Blubrry PowerPress/'.POWERPRESS_VERSION);
 
 
 
 
331
  curl_setopt($curl, CURLOPT_FILE, $fp);
332
- curl_setopt($curl, CURLOPT_URL, $url);
333
  curl_setopt($curl, CURLOPT_HEADER, false); // header will be at output
334
  curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET'); // HTTP request
335
  curl_setopt($curl, CURLOPT_NOBODY, false );
@@ -341,62 +385,96 @@
341
  else
342
  {
343
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
344
- curl_setopt($curl, CURLOPT_MAXREDIRS, 0 );
345
  }
346
  curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
347
- curl_setopt($curl, CURLOPT_HTTPHEADER,array('Range: bytes=0-'.($this->m_DownloadBytesLimit - 1) ));
348
- //curl_setopt($curl, CURLINFO_HEADER_OUT, true); // For debugging
349
- // Do the download
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
350
  $success = curl_exec($curl);
351
- fclose($fp);
352
-
353
- //$headers_sent = curl_getinfo($curl, CURLINFO_HEADER_OUT); // For debugging
354
- //var_dump($headers_sent); // For debugging
355
-
356
- // Make sure the file is only so big so we don't have memory allocation errors
357
- $filesize = filesize($TempFile);
358
- if( $filesize > $this->m_DownloadBytesLimit ) // The web server did not support the Range: request
 
 
 
 
 
 
359
  {
360
- $fp = fopen($TempFile, 'w+');
361
- ftruncate($fp, $this->m_DownloadBytesLimit);
362
- fclose($fp);
 
363
  }
 
 
364
 
365
  if( $success )
366
  {
367
- curl_close($curl);
368
-
369
  if( $ContentLength )
370
  $this->m_ContentLength = $ContentLength;
371
  return $TempFile;
372
  }
373
- else
374
- {
375
- if( curl_errno($curl) )
376
- $this->SetError(curl_error($curl) .' ('.curl_errno($curl).')');
377
- else
378
- $this->SetError('Unable to download media.');
379
- }
380
 
381
- curl_close($curl);
382
  return false;
383
  }
384
 
385
  /*
386
  Get the MP3 information
387
  */
388
- function GetMp3Info($File)
389
  {
 
390
  $DeleteFile = false;
391
  if( strtolower( substr($File, 0, 7) ) == 'http://' )
392
  {
393
  $LocalFile = $this->Download($File);
394
  if( $LocalFile === false )
395
  return false;
 
 
 
 
396
  $DeleteFile = true;
397
  }
398
  else
399
  {
 
 
 
 
 
400
  $LocalFile = $File;
401
  }
402
 
@@ -441,6 +519,16 @@
441
 
442
  return false;
443
  }
 
 
 
 
 
 
 
 
 
 
444
  };
445
 
446
  /*
9
  //var $m_DownloadBytesLimit = 1638400; // 200K (200*1024*8) bytes file
10
  //var $m_DownloadBytesLimit = 204800; // 25K (25*1024*8) bytes file
11
  var $m_DownloadBytesLimit = 327680; // 40K (40*1024*8) bytes file
12
+ //var $m_DownloadBytesLimit = 409600; // 50K (50*1024*8) bytes file
13
  var $m_RedirectLimit = 12; // Number of times to do the 302 redirect
14
+ var $m_UserAgent = 'Blubrry PowerPress';
15
  var $m_error = '';
16
  var $m_warnings = array();
17
  var $m_ContentLength = false;
18
  var $m_RedirectCount = 0;
19
+ Var $m_file_size_only = false;
20
+
21
+ var $m_data = '';
22
 
23
  // Constructor
24
  function Mp3Info()
25
  {
26
  // Empty for now
27
+ $this->m_UserAgent = 'Blubrry PowerPress/'.POWERPRESS_VERSION;
28
  }
29
 
30
  /*
137
  if ($fp)
138
  {
139
  // Create and send the request headers
140
+ $RequestHeaders = ($this->m_file_size_only?'HEAD ':'GET ').$urlParts['path'].(isset($urlParts['query']) ? '?'.@$urlParts['query'] : '')." HTTP/1.0\r\n";
141
  $RequestHeaders .= 'Host: '.$urlParts['host'].($urlParts['port'] != 80 ? ':'.$urlParts['port'] : '')."\r\n";
142
  $RequestHeaders .= "Connection: Close\r\n";
143
+ $RequestHeaders .= "User-Agent: {$this->m_UserAgent}\r\n";
144
  fwrite($fp, $RequestHeaders."\r\n");
145
 
146
  $Redirect = false;
214
  }
215
  else // Otherwise, lets set the data and return true for part two
216
  {
217
+ if( $this->m_file_size_only )
218
+ {
219
+ if( $ContentLength )
220
+ {
221
+ $this->m_ContentLength = $ContentLength;
222
+ return true;
223
+ }
224
+ else
225
+ {
226
+ $this->SetError('Unable to obtain media size from web server.');
227
+ return false;
228
+ }
229
+ }
230
+
231
+ //global $TempFile;
232
  if( function_exists('get_temp_dir') ) // If wordpress function is available, lets use it
233
  $TempFile = tempnam(get_temp_dir(), 'wp_powerpress');
234
  else // otherwise use the default path
271
 
272
  $curl = curl_init();
273
  // First, get the content-length...
274
+ curl_setopt($curl, CURLOPT_USERAGENT, $this->m_UserAgent );
275
  curl_setopt($curl, CURLOPT_URL, $url);
276
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
277
  curl_setopt($curl, CURLOPT_HEADER, true); // header will be at output
314
  $redirect_url = trim($matches[1]);
315
 
316
  if( $redirect_url )
317
+ {
318
+ curl_close($curl);
319
  return $this->DownloadCurl($redirect_url, $RedirectCount +1);
320
+ }
321
  else
322
+ {
323
  $this->SetError( sprintf(__('Unable to obtain HTTP %d redirect URL.'), $HttpCode) );
324
+ }
325
  }
326
  }; break;
327
  default: {
328
  $this->SetError( curl_error($curl) );
329
  }; break;
330
  }
331
+ curl_close($curl);
332
  return false;
333
  }
334
 
335
+ /*
336
  if( stristr($ContentType, 'text') )
337
  {
338
  $this->SetError( 'Invalid content type returned.' );
339
  return false;
340
  }
341
+ */
342
+
343
+ $FinalURL = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL);
344
+ curl_close($curl); // Close the first CURL connection
345
+
346
+ if( $this->m_file_size_only )
347
+ {
348
+ if( $ContentLength )
349
+ {
350
+ $this->m_ContentLength = $ContentLength;
351
+ return true;
352
+ }
353
+ $this->SetError('Unable to obtain media size from server.');
354
+ return false;
355
+ }
356
 
357
  global $TempFile;
358
  if( function_exists('get_temp_dir') ) // If wordpress function is available, lets use it
364
  $this->SetError('Unable to create temporary file for checking media information.');
365
  return false;
366
  }
367
+
368
  $fp = fopen($TempFile, 'w+b');
369
  // Next get the first chunk of the file...
370
+
371
+ $curl = curl_init();
372
+ curl_setopt($curl, CURLOPT_URL, $FinalURL);
373
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, false); // Don't set this as it is knwon to cause errors with the function callback.
374
+ curl_setopt($curl, CURLOPT_BINARYTRANSFER, true);
375
+ curl_setopt($curl, CURLOPT_USERAGENT, $this->m_UserAgent);
376
  curl_setopt($curl, CURLOPT_FILE, $fp);
 
377
  curl_setopt($curl, CURLOPT_HEADER, false); // header will be at output
378
  curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET'); // HTTP request
379
  curl_setopt($curl, CURLOPT_NOBODY, false );
385
  else
386
  {
387
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
388
+ curl_setopt($curl, CURLOPT_MAXREDIRS, 0 ); // We will attempt to handle redirects ourself
389
  }
390
  curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
391
+
392
+ // First lets try a range request
393
+ curl_setopt($curl, CURLOPT_RANGE, '0-'.($this->m_DownloadBytesLimit - 1) );
394
+ // curl_setopt($curl, CURLOPT_HTTPHEADER, array('Range: bytes=0-'.($this->m_DownloadBytesLimit - 1) ));
395
+ $success = curl_exec($curl);
396
+
397
+ if( !$success && curl_getinfo($curl, CURLINFO_HTTP_CODE) == 406 )
398
+ {
399
+ curl_close($curl);
400
+ $curl = curl_init();
401
+ //curl_setopt($curl, CURLOPT_URL, $url);
402
+ curl_setopt($curl, CURLOPT_URL, $FinalURL);
403
+ curl_setopt($curl, CURLOPT_USERAGENT, $this->m_UserAgent);
404
+ curl_setopt($curl, CURLOPT_HEADER, false); // header will be at output
405
+ curl_setopt($curl, CURLOPT_NOBODY, false );
406
+ curl_setopt($curl, CURLOPT_WRITEFUNCTION, array($this, 'remoteread_curl_writefunc') );
407
+ if ( !ini_get('safe_mode') && !ini_get('open_basedir') )
408
+ {
409
+ curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
410
+ curl_setopt($curl, CURLOPT_MAXREDIRS, $this->m_RedirectLimit);
411
+ }
412
+ else
413
+ {
414
+ curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
415
+ curl_setopt($curl, CURLOPT_MAXREDIRS, 0 ); // We will attempt to handle redirects ourself
416
+ }
417
+
418
  $success = curl_exec($curl);
419
+ if( ($success || curl_errno($curl) == 23) && $this->m_data != '' )
420
+ {
421
+ fwrite($fp , $this->m_data);
422
+ $this->m_data = ''; // Free up this memory by setting the value to a blank string
423
+ $success = true; // Actually this was a success
424
+ }
425
+ else if( $success && $this->m_data == '' )
426
+ {
427
+ $this->SetError('Unable to download media.');
428
+ $success = false;
429
+ }
430
+ }
431
+
432
+ if( !$success )
433
  {
434
+ if( curl_errno($curl) )
435
+ $this->SetError('Retrieving file info: '. curl_error($curl) );
436
+ else if( $this->GetError() == '' )
437
+ $this->SetError('Unable to download media.');
438
  }
439
+ curl_close($curl);
440
+ fclose($fp);
441
 
442
  if( $success )
443
  {
 
 
444
  if( $ContentLength )
445
  $this->m_ContentLength = $ContentLength;
446
  return $TempFile;
447
  }
 
 
 
 
 
 
 
448
 
449
+ @unlink($TempFile);
450
  return false;
451
  }
452
 
453
  /*
454
  Get the MP3 information
455
  */
456
+ function GetMp3Info($File, $file_size_only = false)
457
  {
458
+ $this->m_file_size_only = $file_size_only;
459
  $DeleteFile = false;
460
  if( strtolower( substr($File, 0, 7) ) == 'http://' )
461
  {
462
  $LocalFile = $this->Download($File);
463
  if( $LocalFile === false )
464
  return false;
465
+
466
+ if( $file_size_only )
467
+ return true;
468
+
469
  $DeleteFile = true;
470
  }
471
  else
472
  {
473
+ if( $file_size_only )
474
+ {
475
+ $this->m_ContentLength = filesize($File);
476
+ return true;
477
+ }
478
  $LocalFile = $File;
479
  }
480
 
519
 
520
  return false;
521
  }
522
+
523
+ function remoteread_curl_writefunc($curl, $data)
524
+ {
525
+ $this->m_data .= $data;
526
+ if( strlen($this->m_data) > $this->m_DownloadBytesLimit )
527
+ {
528
+ return 0; // stop the download here...
529
+ }
530
+ return strlen($data);
531
+ }
532
  };
533
 
534
  /*
player.js CHANGED
@@ -48,12 +48,11 @@ function powerpress_embed_quicktime(div,media_url,width,height)
48
  Html += '<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" width="'+ width +'" height="'+ height +'" codebase="http://www.apple.com/qtactivex/qtplugin.cab">\n';
49
  Html += ' <param name="src" value="'+ media_url +'" />\n';
50
  Html += ' <param name="href" value="'+ media_url +'" />\n';
51
- Html += ' <param name="scale" value="aspect" />\n';
52
  Html += ' <param name="controller" value="true" />\n';
53
  Html += ' <param name="autoplay" value="true" />\n';
54
- Html += ' <param name="bgcolor" value="000000" />\n';
55
  Html += ' <param name="pluginspage" value="http://www.apple.com/quicktime/download/" />\n';
56
- Html += ' <embed src="'+ media_url +'" type="'+ contentType +'" width="'+ width +'" height="'+ height +'" scale="aspect" cache="true" bgcolor="000000" autoplay="true" controller="true" pluginspage="http://www.apple.com/quicktime/download/"></embed>';
57
  Html += '</object>\n';
58
  document.getElementById(div).innerHTML = Html;
59
  return false; // stop the default link from proceeding
48
  Html += '<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" width="'+ width +'" height="'+ height +'" codebase="http://www.apple.com/qtactivex/qtplugin.cab">\n';
49
  Html += ' <param name="src" value="'+ media_url +'" />\n';
50
  Html += ' <param name="href" value="'+ media_url +'" />\n';
51
+ Html += ' <param name="scale" value="tofit" />\n';
52
  Html += ' <param name="controller" value="true" />\n';
53
  Html += ' <param name="autoplay" value="true" />\n';
 
54
  Html += ' <param name="pluginspage" value="http://www.apple.com/quicktime/download/" />\n';
55
+ Html += ' <embed type="'+ contentType +'" src="'+ media_url +'" width="'+ width +'" height="'+ height +'" scale="tofit" correction="full" cache="true" autoplay="true" controller="true" pluginspage="http://www.apple.com/quicktime/download/"></embed>';
56
  Html += '</object>\n';
57
  document.getElementById(div).innerHTML = Html;
58
  return false; // stop the default link from proceeding
powerpress.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Blubrry PowerPress
4
  Plugin URI: http://www.blubrry.com/powerpress/
5
  Description: <a href="http://www.blubrry.com/powerpress/" target="_blank">Blubrry PowerPress</a> adds podcasting support to your blog. Features include: media player, 3rd party statistics, iTunes integration, Blubrry Services (Media Statistics and Hosting) integration and a lot more.
6
- Version: 0.9.10
7
  Author: Blubrry
8
  Author URI: http://www.blubrry.com/
9
  Change Log:
@@ -33,7 +33,7 @@ if( !function_exists('add_action') )
33
  die("access denied.");
34
 
35
  // WP_PLUGIN_DIR (REMEMBER TO USE THIS DEFINE IF NEEDED)
36
- define('POWERPRESS_VERSION', '0.9.10' );
37
 
38
  /////////////////////////////////////////////////////
39
  // The following define options should be placed in your
@@ -1714,6 +1714,8 @@ function powerpress_trim_itunes_value($value, $tag = 'summary')
1714
  {
1715
  $length = (function_exists('mb_strlen')?mb_strlen($value):strlen($value) );
1716
  $trim_at = false;
 
 
1717
  switch($tag)
1718
  {
1719
  case 'summary': {
@@ -1726,6 +1728,7 @@ function powerpress_trim_itunes_value($value, $tag = 'summary')
1726
  case 'author':
1727
  case 'name':
1728
  default: {
 
1729
  // 255 character limit
1730
  if( $length > 255 )
1731
  $trim_at = 255;
@@ -1756,6 +1759,9 @@ function powerpress_trim_itunes_value($value, $tag = 'summary')
1756
  $value = (function_exists('mb_substr')?mb_substr($value, 0, 252):substr($value, 0, 252) ). '...';
1757
  }
1758
 
 
 
 
1759
  return $value;
1760
  }
1761
 
3
  Plugin Name: Blubrry PowerPress
4
  Plugin URI: http://www.blubrry.com/powerpress/
5
  Description: <a href="http://www.blubrry.com/powerpress/" target="_blank">Blubrry PowerPress</a> adds podcasting support to your blog. Features include: media player, 3rd party statistics, iTunes integration, Blubrry Services (Media Statistics and Hosting) integration and a lot more.
6
+ Version: 0.9.11
7
  Author: Blubrry
8
  Author URI: http://www.blubrry.com/
9
  Change Log:
33
  die("access denied.");
34
 
35
  // WP_PLUGIN_DIR (REMEMBER TO USE THIS DEFINE IF NEEDED)
36
+ define('POWERPRESS_VERSION', '0.9.11' );
37
 
38
  /////////////////////////////////////////////////////
39
  // The following define options should be placed in your
1714
  {
1715
  $length = (function_exists('mb_strlen')?mb_strlen($value):strlen($value) );
1716
  $trim_at = false;
1717
+ $remove_new_lines = false;
1718
+
1719
  switch($tag)
1720
  {
1721
  case 'summary': {
1728
  case 'author':
1729
  case 'name':
1730
  default: {
1731
+ $remove_new_lines = true;
1732
  // 255 character limit
1733
  if( $length > 255 )
1734
  $trim_at = 255;
1759
  $value = (function_exists('mb_substr')?mb_substr($value, 0, 252):substr($value, 0, 252) ). '...';
1760
  }
1761
 
1762
+ if( $remove_new_lines )
1763
+ $value = str_replace( array("\r\n\r\n", "\n", "\r", "\t"), array(' - ',' ', '', ' '), $value );
1764
+
1765
  return $value;
1766
  }
1767
 
powerpressadmin-metabox.php CHANGED
@@ -105,7 +105,9 @@ function powerpress_meta_box($object, $box)
105
  <label for "Powerpress[<?php echo $FeedSlug; ?>][url]">Media URL</label>
106
  <div class="powerpress_row_content">
107
  <input id="powerpress_url_<?php echo $FeedSlug; ?>" name="Powerpress[<?php echo $FeedSlug; ?>][url]" value="<?php echo $EnclosureURL; ?>" onblur="powerpress_check_url(this.value,'powerpress_warning_<?php echo $FeedSlug; ?>')" style="width: 70%; font-size: 90%;" />
108
- <a href="<?php echo admin_url(); ?>?action=powerpress-jquery-media&podcast-feed=<?php echo $FeedSlug; ?>&KeepThis=true&TB_iframe=true&modal=true" title="Select Media File" class="thickbox"><img src="<?php echo powerpress_get_root_url(); ?>/images/blubrry_folder.png" alt="Browse Media Files" /></a>
 
 
109
  <input type="hidden" id="powerpress_hosting_<?php echo $FeedSlug; ?>" name="Powerpress[<?php echo $FeedSlug; ?>][hosting]" value="0" />
110
  <?php
111
 
105
  <label for "Powerpress[<?php echo $FeedSlug; ?>][url]">Media URL</label>
106
  <div class="powerpress_row_content">
107
  <input id="powerpress_url_<?php echo $FeedSlug; ?>" name="Powerpress[<?php echo $FeedSlug; ?>][url]" value="<?php echo $EnclosureURL; ?>" onblur="powerpress_check_url(this.value,'powerpress_warning_<?php echo $FeedSlug; ?>')" style="width: 70%; font-size: 90%;" />
108
+ <?php if( @$GeneralSettings['blubrry_hosting'] == 1 ) { ?>
109
+ <a href="<?php echo admin_url(); ?>?action=powerpress-jquery-media&podcast-feed=<?php echo $FeedSlug; ?>&KeepThis=true&TB_iframe=true&modal=true" title="Select Media File" class="thickbox"><img src="<?php echo powerpress_get_root_url(); ?>/images/blubrry_folder.png" alt="Browse Media Files" /></a>
110
+ <?php } ?>
111
  <input type="hidden" id="powerpress_hosting_<?php echo $FeedSlug; ?>" name="Powerpress[<?php echo $FeedSlug; ?>][hosting]" value="0" />
112
  <?php
113
 
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: Angelo Mandato, Blubrry.com
3
  Tags: podcasting, podcast, podcaster, itunes, enclosure, zune, iphone, youtube, viddler, blip.tv, ustream, podcasting, audio, video, rss2, feed, player, media, rss, mp3, music, embed, feedburner, statistics, stats, flv, flash, id3, episodes, blubrry
4
  Requires at least: 2.6.0
5
  Tested up to: 2.8.4
6
- Stable tag: 0.9.10
7
 
8
  Add podcasting support to your blog.
9
 
@@ -85,6 +85,14 @@ You can insert the media player within yoru blog posts by using the WordPress sh
85
 
86
  == Changelog ==
87
 
 
 
 
 
 
 
 
 
88
  = 0.9.10 =
89
  * Released on 9/21/2009
90
  * Fixed code that detects media information when encountering redirects. Bug only affected users who did not have cURL configured in PHP.
3
  Tags: podcasting, podcast, podcaster, itunes, enclosure, zune, iphone, youtube, viddler, blip.tv, ustream, podcasting, audio, video, rss2, feed, player, media, rss, mp3, music, embed, feedburner, statistics, stats, flv, flash, id3, episodes, blubrry
4
  Requires at least: 2.6.0
5
  Tested up to: 2.8.4
6
+ Stable tag: 0.9.11
7
 
8
  Add podcasting support to your blog.
9
 
85
 
86
  == Changelog ==
87
 
88
+ = 0.9.11 =
89
+ * Released on 10/01/2009
90
+ * We are working on PowerPress version 1.0, if you'd like to beta test, please email Angelo (cio [at] rawvoice.com).
91
+ * Fixed minor bugs with mp3 media detection: proper user agent set, logic added to deal with LibSyn 406 error, and media detection script can now be used for detecting file size for other media types.
92
+ * Improved iTunes subtitle so value is contained within one line.
93
+ * Fixed bug with mv4 video displaying incorrectly in PowerPress player.
94
+
95
+
96
  = 0.9.10 =
97
  * Released on 9/21/2009
98
  * Fixed code that detects media information when encountering redirects. Bug only affected users who did not have cURL configured in PHP.