diff options
author | Karl 'vollmerk' Vollmer <vollmer@ampache.org> | 2007-08-06 07:23:42 +0000 |
---|---|---|
committer | Karl 'vollmerk' Vollmer <vollmer@ampache.org> | 2007-08-06 07:23:42 +0000 |
commit | 0949ff48904b06438fc4215854d7fa3ba884474e (patch) | |
tree | 1ada94218223d74853d17023a919eddf16fac23c | |
parent | 0b4194ebf11e2ce8b59563c57a4eeca8c80a70e8 (diff) | |
download | ampache-0949ff48904b06438fc4215854d7fa3ba884474e.tar.gz ampache-0949ff48904b06438fc4215854d7fa3ba884474e.tar.bz2 ampache-0949ff48904b06438fc4215854d7fa3ba884474e.zip |
fixed find missing tracks, tweaked openstrands class again to account for lack of [[CCDATA tag on some xml responses
-rwxr-xr-x | docs/CHANGELOG | 1 | ||||
-rw-r--r-- | lib/class/album.class.php | 41 | ||||
-rw-r--r-- | lib/class/metadata.class.php | 42 | ||||
-rw-r--r-- | modules/infotools/openstrands.class.php | 8 | ||||
-rw-r--r-- | server/stats.ajax.php | 24 | ||||
-rw-r--r-- | templates/show_album.inc.php | 13 | ||||
-rw-r--r-- | templates/show_objects.inc.php | 7 |
7 files changed, 127 insertions, 9 deletions
diff --git a/docs/CHANGELOG b/docs/CHANGELOG index cd3abbd6..a9edae7a 100755 --- a/docs/CHANGELOG +++ b/docs/CHANGELOG @@ -4,6 +4,7 @@ -------------------------------------------------------------------------- v.3.4-Alpha2 + - Added Find Missing tracks, requires MyStrands - Added ability to show Album art on Browse -> Albums - Added Similar Artists Link, requires MyStrands - Fixed hovering on the static Ratings displays diff --git a/lib/class/album.class.php b/lib/class/album.class.php index b72633e3..b47e6b03 100644 --- a/lib/class/album.class.php +++ b/lib/class/album.class.php @@ -29,6 +29,7 @@ class Album { /* Variables from DB */ public $id; public $name; + public $full_name; // Prefix + Name, genereated by format(); public $year; public $prefix; @@ -48,7 +49,7 @@ class Album { * pull the album or thumb art by default or * get any of the counts. */ - function __construct($album_id = 0) { + public function __construct($album_id='') { if (!$album_id) { return false; } @@ -64,13 +65,32 @@ class Album { } // Little bit of formating here - $this->f_name = trim($info['prefix'] . ' ' . $info['name']); + $this->full_name = trim($info['prefix'] . ' ' . $info['name']); return true; } //constructor /** + * construct_from_array + * This is often used by the metadata class, it fills out an album object from a + * named array, _fake is set to true + */ + public static function construct_from_array($data) { + + $album = new Album(0); + foreach ($data as $key=>$value) { + $album->$key = $value; + } + + // Make sure that we tell em it's fake + $album->_fake = true; + + return $album; + + } // construct_from_array + + /** * _get_info * This is a private function that pulls the album * from the database @@ -157,6 +177,23 @@ class Album { } // has_art /** + * has_track + * This checks to see if this album has a track of the specified title + */ + public function has_track($title) { + + $title = Dba::escape($title); + + $sql = "SELECT `id` FROM `song` WHERE `album`='$this->id' AND `title`='$title'"; + $db_results = Dba::query($sql); + + $data = Dba::fetch_assoc($db_results); + + return $data; + + } // has_track + + /** * format * This is the format function for this object. It sets cleaned up * albumĀ information with the base required diff --git a/lib/class/metadata.class.php b/lib/class/metadata.class.php index 30a34f4b..8f5abf2b 100644 --- a/lib/class/metadata.class.php +++ b/lib/class/metadata.class.php @@ -85,6 +85,48 @@ class metadata { } // recommend_similar + /** + * find_missing_tracks + * This returns an array of song objects using the construct_from_array() that are + * not in the specified album. + */ + public static function find_missing_tracks($album_id) { + + // Build our object + $album = new Album($album_id); + $objects = array(); + + // For now it's only mystrands + OpenStrands::set_auth_token(Config::get('mystrands_developer_key')); + $openstrands = new OpenStrands($GLOBALS['user']->prefs['mystrands_user'],$GLOBALS['user']->prefs['mystrands_pass']); + + if (!$openstrands) { return false; } + + // First find the album on mystrands + $result = $openstrands->search_albums($album->full_name,'1'); + + $mystrands_id = $result['0']['__attributes']['AlbumId']; + + if (!$mystrands_id) { return false; } + + $tracks = $openstrands->lookup_album_tracks($mystrands_id); + + // Recurse the data we've found and check the local album + foreach ($tracks as $track) { + if (!$album->has_track($track['TrackName'])) { + $data['title'] = $track['TrackName']; + $data['track'] = $track['TrackNumber']; + $data['disc'] = $track['DiscNumber']; + $data['artist'] = $track['ArtistName']; + $data['links'] = "<a target=\"_blank\" href=\"" . $track['URI'] . "\">" . get_user_icon('world_link','MyStrands') . "</a>"; + $objects[] = Album::construct_from_array($data); + } + } // end foreach + + return $objects; + + } // find_missing_tracks + } // metadata ?> diff --git a/modules/infotools/openstrands.class.php b/modules/infotools/openstrands.class.php index 51b4dee0..2e4b54da 100644 --- a/modules/infotools/openstrands.class.php +++ b/modules/infotools/openstrands.class.php @@ -66,11 +66,13 @@ class openStrands { */
public function __construct($username,$password) {
+ // Check to see if we've already authenticated
+ if (self::$authenticated) { return true; }
+ if (!self::$auth_token) { echo 'No Auth Token, quiting'; return false; }
+
// Trust them enough to let them try once
self::$authenticated = true;
- if (!self::$auth_token) { echo 'No Auth Token, quiting'; return false; }
-
// Test login with the provided credientials
$auth_data = $this->user_validate($username,$password);
@@ -596,7 +598,7 @@ class openStrands { $tag = $this->_currentTag;
if (strlen($tag) AND $this->_key >= 0) {
- $this->results[$this->_key][$tag] = trim($cdata);
+ $this->results[$this->_key][$tag] .= trim($cdata);
}
diff --git a/server/stats.ajax.php b/server/stats.ajax.php index 5054ce03..1ca6391b 100644 --- a/server/stats.ajax.php +++ b/server/stats.ajax.php @@ -69,6 +69,30 @@ switch ($_REQUEST['action']) { $results['additional_information'] = ob_get_contents(); ob_end_clean(); break; + case 'show_check_album_tracks': + ob_start(); + show_box_top(_('Find Missing Tracks')); + echo "Loading..."; + $ajax_action = Ajax::action('?page=stats&action=check_album_tracks&id=' . $_REQUEST['id'],'show_album_tracks_refresh'); Ajax::run($ajax_action); + show_box_bottom(); + $results['additional_information'] = ob_get_contents(); + ob_end_clean(); + break; + case 'check_album_tracks': + + // Set the headers + $headers = array('title'=>_('Title'),'track'=>_('Track'),'artist'=>_('Artist'),'links'=>_('Links')); + + // Ask the great and wise metadata + $objects = metadata::find_missing_tracks($_REQUEST['id']); + + ob_start(); + show_box_top(_('Find Missing Tracks')); + require_once Config::get('prefix') . '/templates/show_objects.inc.php'; + show_box_bottom(); + $results['additional_information'] = ob_get_contents(); + ob_end_clean(); + break; default: $results['rfc3514'] = '0x1'; break; diff --git a/templates/show_album.inc.php b/templates/show_album.inc.php index f357f35a..7e10e085 100644 --- a/templates/show_album.inc.php +++ b/templates/show_album.inc.php @@ -25,8 +25,8 @@ $ajax_url = Config::get('ajax_url'); // Title for this album $title = scrub_out($album->name) . ' (' . $album->year . ') -- ' . $album->f_artist; ?> -<?php show_box_top($title); ?> -<div style="float:left;display:table-cell;width:140px;"> +<?php show_box_top($title,'info-box'); ?> + <div style="float:left;margin-right:10px;"> <?php if ($album_name != _('Unknown (Orphaned)')) { $aa_url = $web_path . "/image.php?id=" . $album->id . "&type=popup&sid=" . session_id(); @@ -42,7 +42,7 @@ $title = scrub_out($album->name) . ' (' . $album->year . ') -- ' . $album->f_ar </div> </div> <strong><?php echo _('Actions'); ?>:</strong><br /> - <div style="padding-left:5px;"> + <div id="information_actions"> <span class="text-action"><?php echo Ajax::text('?action=basket&type=album&id=' . $album->id,_('Play Album'),'play_full_' . $album->id); ?></span> <span class="text-action"><?php echo Ajax::text('?action=basket&type=album_random&id=' . $album->id,_('Play Random from Album'),'play_random_' . $album->id); ?></span> <?php if ($GLOBALS['user']->has_access('75')) { ?> @@ -55,9 +55,14 @@ $title = scrub_out($album->name) . ' (' . $album->year . ') -- ' . $album->f_ar <?php if (Access::check_function('batch_download')) { ?> <a href="<?php echo $web_path; ?>/batch.php?action=alb&id=<?php echo $album->id; ?>"><?php echo _('Download'); ?></a><br /> <?php } ?> + <?php if (Plugin::is_installed('OpenStrands')) { ?> + <span class="text-action"><?php echo Ajax::text('?page=stats&action=show_check_album_tracks&id=' . $album->id,_('Find Missing Tracks'),'album_missing_tracks'); ?></span> + <?php } ?> </div> - <?php show_box_bottom(); ?> +<div id="additional_information"> + +</div> <?php show_box_top($album->name . ' ' . _('Songs')); $object_ids = $album->get_songs(); diff --git a/templates/show_objects.inc.php b/templates/show_objects.inc.php index cd1445a7..12629919 100644 --- a/templates/show_objects.inc.php +++ b/templates/show_objects.inc.php @@ -37,4 +37,11 @@ <?php require Config::get('prefix') . '/templates/show_object_row.inc.php'; ?> </tr> <?php } ?> +<?php if (!count($objects)) { ?> +<tr> + <td colspan="<?php echo count($headers); ?>"> + <span class="error"><?php echo _('Not Enough Data'); ?></span> + </td> +</tr> +<?php } ?> </table> |