[mb-commits] branch, data-nes, updated. Re-add Controller::Role::Wikipedia to works

MusicBrainz Git Server <[email protected]> Fri, 01 Feb 2013 13:12:21 +0000
Newsgroups gmane.comp.audio.musicbrainz.cvs
Message-ID <E1U1GPl-0005dB-1c@wiley>
The branch, data-nes has been updated
       via  http://git.musicbrainz.org/gitweb/?p=musicbrainz-server/core.git;a=commit;h=2bf3edede949aed341e01d51e9bee6361c993da4 (commit)
      from  http://git.musicbrainz.org/gitweb/?p=musicbrainz-server/core.git;a=commit;h=d2762d22a43038128404459b15b8f108a0133da0 (commit)

Summary of changes:
 lib/MusicBrainz/Server/Controller/Work.pm |    2 +-
 lib/MusicBrainz/Server/Data/NES/URL.pm    |   66 ++++++++++++++++++++++++++++-
 2 files changed, 65 insertions(+), 3 deletions(-)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 2bf3edede949aed341e01d51e9bee6361c993da4
Author: Oliver Charles <[email protected]>
Date:   Fri Feb 1 14:44:46 2013 +0000

    Re-add Controller::Role::Wikipedia to works

diff --git a/lib/MusicBrainz/Server/Controller/Work.pm b/lib/MusicBrainz/Server/Controller/Work.pm
index b2430bd..9defd63 100644
--- a/lib/MusicBrainz/Server/Controller/Work.pm
+++ b/lib/MusicBrainz/Server/Controller/Work.pm
@@ -29,7 +29,7 @@ with 'MusicBrainz::Server::Controller::Role::EditListing';
 with 'MusicBrainz::Server::Controller::Role::Rating';
 with 'MusicBrainz::Server::Controller::Role::Relationship';
 with 'MusicBrainz::Server::Controller::Role::Tag';
-# with 'MusicBrainz::Server::Controller::Role::WikipediaExtract';
+with 'MusicBrainz::Server::Controller::Role::WikipediaExtract';
 
 use aliased 'MusicBrainz::Server::Entity::ArtistCredit';
 
diff --git a/lib/MusicBrainz/Server/Data/NES/URL.pm b/lib/MusicBrainz/Server/Data/NES/URL.pm
index e8a8fad..edebca6 100644
--- a/lib/MusicBrainz/Server/Data/NES/URL.pm
+++ b/lib/MusicBrainz/Server/Data/NES/URL.pm
@@ -2,6 +2,7 @@ package MusicBrainz::Server::Data::NES::URL;
 use Moose;
 use namespace::autoclean;
 
+use Class::Load;
 use MusicBrainz::Server::Entity::Tree::URL;
 use MusicBrainz::Server::Entity::URL;
 
@@ -10,12 +11,73 @@ with 'MusicBrainz::Server::Data::NES::CoreEntity' => {
     root => '/url'
 };
 
+my %URL_SPECIALIZATIONS = (
+    '45cat'           => qr{^https?://(?:www.)?45cat.com/}i,
+    'Allmusic'        => qr{^https?://(?:www.)?allmusic.com/}i,
+    'ASIN'            => qr{^https?://(?:www.)?amazon(.*?)(?:\:[0-9]+)?/.*/([0-9B][0-9A-Z]{9})(?:[^0-9A-Z]|$)}i,
+    'BBCMusic'        => qr{^https?://(?:www.)?bbc.co.uk/music/}i,
+    'Canzone'         => qr{^https?://(?:www.)?discografia.dds.it/}i,
+    'CDBaby'          => qr{^https?://(?:www.)?cdbaby.com/}i,
+    'DHHU'            => qr{^https?://(?:www.)?dhhu.dk/}i,
+    'Discogs'         => qr{^https?://(?:www.)?discogs.com/}i,
+    'DiscosDoBrasil'  => qr{^https?://(?:www.)?discosdobrasil.com.br/}i,
+    'Encyclopedisque' => qr{^https?://(?:www.)?encyclopedisque.fr/}i,
+    'ESTERTallinn'    => qr{^https?://tallinn.ester.ee/}i,
+    'ESTERTartu'      => qr{^https?://tartu.ester.ee/}i,
+    'Facebook'        => qr{^https?://(?:www.)?facebook.com/}i,
+    'IBDb'            => qr{^https?://(?:www.)?ibdb.com/}i,
+    'IMDb'            => qr{^https?://(?:www.)?imdb.com/}i,
+    'IMSLP'           => qr{^https?://(?:www.)?imslp.org/wiki/}i,
+    'IOBDb'           => qr{^https?://(?:www.)?lortel.org/}i,
+    'InternetArchive' => qr{^https?://(?:www.)?archive.org/details/}i,
+    'ISRCTW'          => qr{^https?://(?:www.)?isrc.ncl.edu.tw/}i,
+    'Jamendo'         => qr{^https?://(?:www.)?jamendo.com/}i,
+    'LastFM'          => qr{^https?://(?:www.)?last.fm/}i,
+    'Lieder'          => qr{^https?://(?:www.)?recmusic.org/lieder/}i,
+    'LyricWiki'       => qr{^https?://lyrics.wikia.com/}i,
+    'MetalArchives'   => qr{^https?://(?:www.)?metal-archives.com/}i,
+    'MusicMoz'        => qr{^https?://(?:www.)?musicmoz.org/}i,
+    'MusikSammler'    => qr{^https?://(?:www.)?musik-sammler.de/}i,
+    'MySpace'         => qr{^https?://(?:www.)?myspace.com/}i,
+    'OCReMix'         => qr{^https?://(?:www.)?ocremix.org/}i,
+    'Ozon'            => qr{^https?://(?:www.)?ozon.ru/}i,
+    'PsyDB'           => qr{^https?://(?:www.)?psydb.net/}i,
+    'PureVolume'      => qr{^https?://(?:www.)?purevolume.com/}i,
+    'Rateyourmusic'   => qr{^https?://(?:www.)?rateyourmusic.com/}i,
+    'RockInChina'     => qr{^https?://(?:www.)?rockinchina.com/}i,
+    'Rolldabeats'     => qr{^https?://(?:www.)?rolldabeats.com/}i,
+    'SecondHandSongs' => qr{^https?://(?:www.)?secondhandsongs.com/}i,
+    'Songfacts'       => qr{^https?://(?:www.)?songfacts.com/}i,
+    'SoundCloud'      => qr{^https?://(?:www.)?soundcloud.com/}i,
+    'SpiritOfMetal'   => qr{^https?://(?:www.)?spirit-of-metal.com/}i,
+    'Theatricalia'    => qr{^https?://(?:www.)?theatricalia.com/}i,
+    'Trove'           => qr{^https?://(?:www.)?trove.nla.gov.au/}i,
+    'Twitter'         => qr{^https?://(?:www.)?twitter.com/}i,
+    'VGMdb'           => qr{^https?://(?:www.)?vgmdb.net/}i,
+    'Wikipedia'       => qr{^https?://([\w-]{2,})\.wikipedia.org/wiki/}i,
+    'Worldcat'        => qr{^https?://(?:www.)?worldcat.org/}i,
+    'YouTube'         => qr{^https?://(?:www.)?youtube.com/}i,
+);
+
+sub determine_url_class {
+    my $url = shift;
+    for my $class (keys %URL_SPECIALIZATIONS) {
+        my $regex = $URL_SPECIALIZATIONS{$class};
+        next unless $url =~ $regex;
+
+        $class = "MusicBrainz::Server::Entity::URL::$class";
+        Class::Load::load_class($class);
+        return $class if ($url =~ $regex);
+    }
+    return 'MusicBrainz::Server::Entity::URL';
+};
+
 sub find_or_insert {
     my ($self, $edit, $editor, $url) = @_;
     $self->create(
         $edit, $editor,
         MusicBrainz::Server::Entity::Tree::URL->new(
-            url => MusicBrainz::Server::Entity::URL->new(
+            url => determine_url_class($url)->new(
                 url => $url
             )
         )
@@ -33,7 +95,7 @@ sub tree_to_json {
 sub map_core_entity {
     my ($self, $response) = @_;
     my %data = %{ $response->{data} };
-    return MusicBrainz::Server::Entity::URL->new(
+    return determine_url_class($data{url})->new(
         url => $data{url},
 
         gid => $response->{mbid},

-----------------------------------------------------------------------


hooks/post-receive
-- 
mb_server