[mb-commits] r9914 - in mb_server/branches/TemplateToolkit: lib/MusicBrainz/Server/Controller root root/artist root/releases

root at musicbrainz.org root at musicbrainz.org
Mon Jun 30 00:32:57 UTC 2008


Author: acid2
Date: 2008-06-30 00:32:57 +0000 (Mon, 30 Jun 2008)
New Revision: 9914

Added:
   mb_server/branches/TemplateToolkit/root/artist/compact.tt
   mb_server/branches/TemplateToolkit/root/artist/full.tt
   mb_server/branches/TemplateToolkit/root/releases/
   mb_server/branches/TemplateToolkit/root/releases/release-box.tt
Removed:
   mb_server/branches/TemplateToolkit/root/artist/show.tt
Modified:
   mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Artist.pm
Log:
Started to add support for the full view, not just compact. This commit is messy as hell cause I've converted most tabs to spaces... sorry

Modified: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Artist.pm
===================================================================
--- mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Artist.pm	2008-06-29 23:27:19 UTC (rev 9913)
+++ mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/Artist.pm	2008-06-30 00:32:57 UTC (rev 9914)
@@ -21,20 +21,23 @@
 
 =cut
 
-sub show : Path Args(1) {
+sub show : Path Args(1)
+{
     my ($self, $c, $mbid) = @_;
 
-    require MusicBrainz;
-    require MusicBrainz::Server::Validation;
-    require MusicBrainz::Server::Artist;
-    require ModDefs;
+    use Encode qw( decode );
+    use MusicBrainz::Server::Artist;
     use MusicBrainz::Server::Release;
+    use MusicBrainz::Server::Validation;
+    use MusicBrainz;
+    use ModDefs;
 
     if($mbid ne "")
     {
-	MusicBrainz::Server::Validation::IsGUID($mbid) or $c->error("Not a valid GUID");
+        MusicBrainz::Server::Validation::IsGUID($mbid) or $c->error("Not a valid GUID");
     }
 
+    # Load the artist
     my $mb = new MusicBrainz;
     $mb->Login();
 
@@ -50,72 +53,70 @@
 
     for my $release (@releases)
     {
-	my ($type, $status) = $release->GetReleaseTypeAndStatus;
+        my ($type, $status) = $release->GetReleaseTypeAndStatus;
 
-	# Construct values to sort on
-	use Encode qw( decode );
+        # Construct values to sort on
+        $release->SetMultipleTrackArtists($release->GetArtist != $release->GetId() ? 1 : 0);
+        $release->{_is_va_} = ($release->GetArtist == &ModDefs::VARTIST_ID or
+                               $release->GetArtist != $release->GetId());
+        $release->{_is_nonalbum_} = ($type == MusicBrainz::Server::Release::RELEASE_ATTR_NONALBUMTRACKS);
+        $release->{_section_key_} = ($release->{_is_va_} . " " . $type);
+        $release->{_name_sort_} = lc decode "utf-8", $release->GetName;
+        $release->{_disc_max_} = 0;
+        $release->{_disc_no_} = 0;
+        $release->{_firstreleasedate_} = ($release->GetFirstReleaseDate || "9999-99-99");
 
-	$release->SetMultipleTrackArtists($release->GetArtist != $release->GetId() ? 1 : 0);
-	$release->{_is_va_} = ($release->GetArtist == &ModDefs::VARTIST_ID or
-			       $release->GetArtist != $release->GetId());
-	$release->{_is_nonalbum_} = ($type == MusicBrainz::Server::Release::RELEASE_ATTR_NONALBUMTRACKS);
-	$release->{_section_key_} = ($release->{_is_va_} . " " . $type);
-	$release->{_name_sort_} = lc decode "utf-8", $release->GetName;
-	$release->{_disc_max_} = 0;
-	$release->{_disc_no_} = 0;
-	$release->{_firstreleasedate_} = ($release->GetFirstReleaseDate || "9999-99-99");
+        CheckAttributes($release);
 
-	CheckAttributes($release);
-	
-	# Attempt to sort "disc x [of y]" correctly
-	if ($release->{_name_sort_} =~
-	    /^(.*)                              # $1 <main title>
-	        (?:[(]disc\ (\d+)               # $2 (disc x
-	            (?:\ of\ (\d+))?            # $3 [of y]
-	            (?::[^()]*                  #    [: <disc title>
-		        (?:[(][^()]*[)][^()]*)* #     [<1 level of nested par.>]
-	            )?                          #    ]
-	            [)]                         #    )
-	        )
-	        (.*)$                           # $4 [<rest of main title>]
-	    /xi)
-	{
-	    $release->{_name_sort_} = "$1 $4";
-	    $release->{_disc_no_} = $2;
-	    $release->{_disc_max_} = $3 || 0;
-	}
+        # Attempt to sort "disc x [of y]" correctly
+        if ($release->{_name_sort_} =~
+            /^(.*)                              # $1 <main title>
+                (?:[(]disc\ (\d+)               # $2 (disc x
+                    (?:\ of\ (\d+))?            # $3 [of y]
+                    (?::[^()]*                  #    [: <disc title>
+                        (?:[(][^()]*[)][^()]*)* #     [<1 level of nested par.>]
+                    )?                          #    ]
+                    [)]                         #    )
+                )
+                (.*)$                           # $4 [<rest of main title>]
+            /xi)
+        {
+            $release->{_name_sort_} = "$1 $4";
+            $release->{_disc_no_} = $2;
+            $release->{_disc_max_} = $3 || 0;
+        }
 
-	# Push onto our list of releases we are actually interested in
-	push @shortList, $release
-	    if ($type == MusicBrainz::Server::Release::RELEASE_ATTR_ALBUM ||
-		$type == MusicBrainz::Server::Release::RELEASE_ATTR_EP ||
-		$type == MusicBrainz::Server::Release::RELEASE_ATTR_COMPILATION ||
-		$type == MusicBrainz::Server::Release::RELEASE_ATTR_SINGLE);
+        # Push onto our list of releases we are actually interested in
+        push @shortList, $release
+            if ($type == MusicBrainz::Server::Release::RELEASE_ATTR_ALBUM ||
+                $type == MusicBrainz::Server::Release::RELEASE_ATTR_EP ||
+                $type == MusicBrainz::Server::Release::RELEASE_ATTR_COMPILATION ||
+                $type == MusicBrainz::Server::Release::RELEASE_ATTR_SINGLE);
     }
 
     if(scalar @shortList)
     {
-	@releases = @shortList;
-	@releases = sort SortAlbums @releases;
+        @releases = @shortList;
+        @releases = sort SortAlbums @releases;
     }
     else
     {
-	$c->error("No releases to show");
+        $c->error("No releases to show");
     }
 
     # Create data structures for the template
     #
     # Artist:
     $c->stash->{artist} = {
-			      name => $artist->GetName,
-			      type => MusicBrainz::Server::Artist::GetTypeName($artist->GetType),
-			      datespan => {
-					      start => $artist->GetBeginDate,
-					      end => $artist->GetEndDate
-					  },
-			      quality => ModDefs::GetQualityText($artist->GetQuality),
-			      resolution => $artist->GetResolution,
-			  };
+        name => $artist->GetName,
+        type => MusicBrainz::Server::Artist::GetTypeName($artist->GetType),
+        datespan => {
+            start => $artist->GetBeginDate,
+            end => $artist->GetEndDate
+        },
+        quality => ModDefs::GetQualityText($artist->GetQuality),
+        resolution => $artist->GetResolution,
+    };
 
     # Releases, sorted into "release groups":
     $c->stash->{groups} = [];
@@ -123,66 +124,72 @@
     my $currentGroup;
     for my $release (@releases)
     {
-	my ($type, $status) = $release->GetReleaseTypeAndStatus;
+        my ($type, $status) = $release->GetReleaseTypeAndStatus;
 
-	# Releases should have sorted into groups, so if $type has changed, we need to create
-	# a new "release group"
-	if(not defined $currentGroup or $currentGroup->{type} != $type)
-	{
-	    $currentGroup = {
-			        name => $release->GetAttributeNamePlural($type),
-			        releases => [],
-			        type => $type
-			    };
+        # Releases should have sorted into groups, so if $type has changed, we need to create
+        # a new "release group"
+        if(not defined $currentGroup or $currentGroup->{type} != $type)
+        {
+            $currentGroup = {
+                name => $release->GetAttributeNamePlural($type),
+                releases => [],
+                type => $type
+            };
 
-	    push @{$c->stash->{groups}}, $currentGroup;
-	}
+            push @{$c->stash->{groups}}, $currentGroup;
+        }
 
-	my $language = {};
-	$language->{script} = defined $release->GetScript ? $release->GetScript->GetName : "";
-	$language->{language} = defined $release->GetLanguage ? $release->GetLanguage->GetName : "";
-	$language->{shortLanguage} = defined $release->GetLanguage ? $release->GetLanguage->GetISOCode3T : "";
+        my $language = {};
+        $language->{script} = defined $release->GetScript ? $release->GetScript->GetName : "";
+        $language->{language} = defined $release->GetLanguage ? $release->GetLanguage->GetName : "";
+        $language->{shortLanguage} = defined $release->GetLanguage ? $release->GetLanguage->GetISOCode3T : "";
 
-	my $rel = {
-		      title => $release->GetName,
-		      id => $release->GetMBId,
-		      trackCount => $release->GetTrackCount,
-		      discIds => $release->GetDiscidCount,
-		      puids => $release->GetPuidCount,
-		      trms => $release->GetTrmidCount,
-		      quality => ModDefs::GetQualityText($release->GetQuality),
-		      language => $language,
-#		      releaseDate => ,
-		  };
+        my $rel = {
+            title => $release->GetName,
+            id => $release->GetMBId,
+            trackCount => $release->GetTrackCount,
+            discIds => $release->GetDiscidCount,
+            puids => $release->GetPuidCount,
+            quality => ModDefs::GetQualityText($release->GetQuality),
+            language => $language,
+#           releaseDate => ,
+        };
 
-	$rel->{attributes} = [];
-	my $attributes = $release->GetAttributes;
-	
-	for my $attr ($attributes)
-	{
-	    push @{$rel->{attributes}}, $release->GetAttributeName($attr);
-	}
+        $rel->{attributes} = [];
+        my $attributes = $release->GetAttributes;
 
-	push @{$currentGroup->{releases}}, $rel;
+        for my $attr ($attributes)
+        {
+            push @{$rel->{attributes}}, $release->GetAttributeName($attr);
+        }
+
+        push @{$currentGroup->{releases}}, $rel;
     }
 
-    $c->error("");
-    $c->stash->{template} = 'artist/show.tt';
+    # Decide how to display the data
+    if ($c->request->params->{full})
+    {
+        $c->stash->{template} = 'artist/full.tt';
+    }
+    else
+    {
+        $c->stash->{template} = 'artist/compact.tt';
+    }
 }
 
 sub CheckAttributes
 {
+    use MusicBrainz::Server::Release;
+
     my ($a) = @_;
 
-    use MusicBrainz::Server::Release;
-
     for my $attr ($a->GetAttributes)
     {
-	$a->{_attr_type} = $attr if ($attr >= MusicBrainz::Server::Release::RELEASE_ATTR_SECTION_TYPE_START &&
-				     $attr <= MusicBrainz::Server::Release::RELEASE_ATTR_SECTION_TYPE_END);
-	$a->{_attr_status} = $attr if ($attr >= MusicBrainz::Server::Release::RELEASE_ATTR_SECTION_STATUS_START &&
-				       $attr <= MusicBrainz::Server::Release::RELEASE_ATTR_SECTION_STATUS_END);
-	$a->{_attr_type} = $attr if ($attr == MusicBrainz::Server::Release::RELEASE_ATTR_NONALBUMTRACKS);
+        $a->{_attr_type} = $attr if ($attr >= MusicBrainz::Server::Release::RELEASE_ATTR_SECTION_TYPE_START &&
+                                     $attr <= MusicBrainz::Server::Release::RELEASE_ATTR_SECTION_TYPE_END);
+        $a->{_attr_status} = $attr if ($attr >= MusicBrainz::Server::Release::RELEASE_ATTR_SECTION_STATUS_START &&
+                                       $attr <= MusicBrainz::Server::Release::RELEASE_ATTR_SECTION_STATUS_END);
+        $a->{_attr_type} = $attr if ($attr == MusicBrainz::Server::Release::RELEASE_ATTR_NONALBUMTRACKS);
     }
 
     # The "actual values", used for display
@@ -190,39 +197,46 @@
     $a->{_actual_attr_status} = $a->{_attr_status};
 
     # Used for sorting
-    $a->{_attr_type} = MusicBrainz::Server::Release::RELEASE_ATTR_SECTION_TYPE_END + 1 if (not defined $a->{_attr_type});
-    $a->{_attr_status} = MusicBrainz::Server::Release::RELEASE_ATTR_SECTION_STATUS_END + 1 if (not defined $a->{_attr_status});
+    $a->{_attr_type} = MusicBrainz::Server::Release::RELEASE_ATTR_SECTION_TYPE_END + 1
+        if (not defined $a->{_attr_type});
+    $a->{_attr_status} = MusicBrainz::Server::Release::RELEASE_ATTR_SECTION_STATUS_END + 1
+        if (not defined $a->{_attr_status});
 };
 
+=head2 SortAlbums
+
+Sort a list of MusicBrainz::Server::Album objects into the order they are displayed on the
+artist homepage
+
+=cut
+
 sub SortAlbums
 {
-    require MusicBrainz::Server::Release;
+    use MusicBrainz::Server::Release;
 
     # I edited these out of one huge "or"ed conditional as it was a bitch to debug
+    my @predicates = (
+        ($a->{_is_va_} <=> $b->{_is_va_}),
+        ($b->{_is_nonalbum_} <=> $a->{_is_nonalbum_}),
+        ($a->{_attr_type} <=> $b->{_attr_type}),
+        ($a->{_firstreleasedate_} cmp $b->{_firstreleasedate_}),
+        ($a->{_name_sort_} cmp $b->{_name_sort_}),
+        ($a->{_disc_max_} <=> $b->{_disc_max_}),
+        ($a->{_disc_no_} <=> $b->{_disc_no_}),
+        ($a->{_attr_status} <=> $b->{_attr_status}),
+        ($a->{trackcount} cmp $b->{trackcount}),
+        ($b->{trmidcount} cmp $a->{trmidcount}),
+        ($b->{puidcount} cmp $a->{puidcount}),
+        ($a->GetId cmp $b->GetId)
+    );
+    
 
-    my $p1 = $a->{_is_va_} <=> $b->{_is_va_};
-    my $p2 = $b->{_is_nonalbum_} <=> $a->{_is_nonalbum_};
-    my $p3 = $a->{_attr_type} <=> $b->{_attr_type};
+    for my $pred (@predicates)
+    {
+        return $pred if ($pred);
+    }
 
-    $p1 or $p2 or $p3 or
-      
-    ($a->{_firstreleasedate_} cmp $b->{_firstreleasedate_}) or
-
-    ($a->{_name_sort_} cmp $b->{_name_sort_}) or
-
-    ($a->{_disc_max_} <=> $b->{_disc_max_}) or
-
-    ($a->{_disc_no_} <=> $b->{_disc_no_}) or
-
-    ($a->{_attr_status} <=> $b->{_attr_status}) or
-
-    ($a->{trackcount} cmp $b->{trackcount}) or
-
-    ($b->{trmidcount} cmp $a->{trmidcount}) or
-
-    ($b->{puidcount} cmp $a->{puidcount}) or
-
-    ($a->GetId cmp $b->GetId)
+    0;
 };
 
 =head1 AUTHOR

Copied: mb_server/branches/TemplateToolkit/root/artist/compact.tt (from rev 9913, mb_server/branches/TemplateToolkit/root/artist/show.tt)

Added: mb_server/branches/TemplateToolkit/root/artist/full.tt

Deleted: mb_server/branches/TemplateToolkit/root/artist/show.tt

Added: mb_server/branches/TemplateToolkit/root/releases/release-box.tt




More information about the MusicBrainz-commits mailing list