Esempio n. 1
0
 public function latest()
 {
     $tracks = Track::summary()->userDetails()->listed()->explicitFilter()->published()->with('user', 'genre', 'cover', 'album', 'album.user')->take(10)->get();
     $tracks = $tracks->map(function (Track $track) {
         return Track::mapPublicTrackSummary($track);
     });
     $json = ['total_tracks' => $tracks->count(), 'tracks' => $tracks->toArray()];
     return Response::json($json, 200);
 }
Esempio n. 2
0
 public function getIndex()
 {
     $recentQuery = Track::summary()->with(['genre', 'user', 'cover', 'user.avatar'])->whereIsLatest(true)->listed()->userDetails()->explicitFilter()->published()->orderBy('published_at', 'desc')->take(30);
     $recentTracks = [];
     foreach ($recentQuery->get() as $track) {
         $recentTracks[] = Track::mapPublicTrackSummary($track);
     }
     return Response::json(['recent_tracks' => $recentTracks, 'popular_tracks' => Track::popular(30, Auth::check() && Auth::user()->can_see_explicit_content)], 200);
 }
Esempio n. 3
0
 public function getTracks()
 {
     $query = Favourite::whereUserId(Auth::user()->id)->whereNotNull('track_id')->with(['track' => function ($query) {
         $query->userDetails()->published();
     }, 'track.user', 'track.genre', 'track.cover', 'track.album', 'track.album.user']);
     $tracks = [];
     foreach ($query->get() as $fav) {
         if ($fav->track == null) {
             continue;
         }
         $tracks[] = Track::mapPublicTrackSummary($fav->track);
     }
     return Response::json(["tracks" => $tracks], 200);
 }
Esempio n. 4
0
 public static function mapPublicPlaylistShow(Playlist $playlist)
 {
     $tracks = [];
     foreach ($playlist->tracks as $track) {
         /** @var $track Track */
         $tracks[] = Track::mapPublicTrackSummary($track);
     }
     $formats = [];
     foreach (Track::$Formats as $name => $format) {
         $formats[] = ['name' => $name, 'extension' => $format['extension'], 'url' => $playlist->getDownloadUrl($name), 'size' => Helpers::formatBytes($playlist->getFilesize($name)), 'isCacheable' => in_array($name, Track::$CacheableFormats) ? true : false];
     }
     $comments = [];
     foreach ($playlist->comments as $comment) {
         $comments[] = Comment::mapPublic($comment);
     }
     $data = self::mapPublicPlaylistSummary($playlist);
     $data['tracks'] = $tracks;
     $data['comments'] = $comments;
     $data['formats'] = $formats;
     $data['share'] = ['url' => action('PlaylistsController@getShortlink', ['id' => $playlist->id]), 'tumblrUrl' => 'http://www.tumblr.com/share/link?url=' . urlencode($playlist->url) . '&name=' . urlencode($playlist->title) . '&description=' . urlencode($playlist->description), 'twitterUrl' => 'https://platform.twitter.com/widgets/tweet_button.html?text=' . $playlist->title . ' by ' . $playlist->user->display_name . ' on Pony.fm'];
     return $data;
 }
Esempio n. 5
0
 public static function popular($count, $allowExplicit = false)
 {
     $trackIds = Cache::remember('popular_tracks' . $count . '-' . ($allowExplicit ? 'explicit' : 'safe'), 5, function () use($allowExplicit, $count) {
         $query = static::published()->listed()->join(DB::raw('
                     (    SELECT `track_id`, `created_at`
                         FROM `resource_log_items`
                         WHERE track_id IS NOT NULL AND log_type = 3 AND `created_at` > now() - INTERVAL 1 DAY
                     ) AS ranged_plays'), 'tracks.id', '=', 'ranged_plays.track_id')->groupBy('id')->orderBy('plays', 'desc')->take($count);
         if (!$allowExplicit) {
             $query->whereIsExplicit(false);
         }
         $results = [];
         foreach ($query->get(['*', DB::raw('count(*) as plays')]) as $track) {
             $results[] = $track->id;
         }
         return $results;
     });
     if (!count($trackIds)) {
         return [];
     }
     $tracks = Track::summary()->userDetails()->explicitFilter()->published()->with('user', 'genre', 'cover', 'album', 'album.user')->whereIn('id', $trackIds);
     $processed = [];
     foreach ($tracks->get() as $track) {
         $processed[] = Track::mapPublicTrackSummary($track);
     }
     // Songs that get played more should drop down
     // in the list so they don't hog the top spots.
     array_reverse($processed);
     return $processed;
 }
Esempio n. 6
0
 public function getIndex()
 {
     $page = 1;
     $perPage = 45;
     if (Input::has('page')) {
         $page = Input::get('page');
     }
     $query = Track::summary()->userDetails()->listed()->explicitFilter()->published()->with('user', 'genre', 'cover', 'album', 'album.user');
     $this->applyFilters($query);
     $totalCount = $query->count();
     $query->take($perPage)->skip($perPage * ($page - 1));
     $tracks = [];
     $ids = [];
     foreach ($query->get(['tracks.*']) as $track) {
         $tracks[] = Track::mapPublicTrackSummary($track);
         $ids[] = $track->id;
     }
     return Response::json(["tracks" => $tracks, "current_page" => $page, "total_pages" => ceil($totalCount / $perPage)], 200);
 }
Esempio n. 7
0
 public function getShow($slug)
 {
     $user = User::whereSlug($slug)->whereNull('disabled_at')->userDetails()->with(['comments' => function ($query) {
         $query->with('user');
     }])->first();
     if (!$user) {
         App::abort(404);
     }
     $trackQuery = Track::summary()->published()->explicitFilter()->listed()->with('genre', 'cover', 'user')->userDetails()->whereUserId($user->id)->whereNotNull('published_at')->orderBy('created_at', 'desc')->take(20);
     $latestTracks = [];
     foreach ($trackQuery->get() as $track) {
         $latestTracks[] = Track::mapPublicTrackSummary($track);
     }
     $comments = [];
     foreach ($user->comments as $comment) {
         $comments[] = Comment::mapPublic($comment);
     }
     $userData = ['is_following' => false];
     if ($user->users->count()) {
         $userRow = $user->users[0];
         $userData = ['is_following' => (bool) $userRow->is_followed];
     }
     return Response::json(['artist' => ['id' => (int) $user->id, 'name' => $user->display_name, 'slug' => $user->slug, 'is_archived' => (bool) $user->is_archived, 'avatars' => ['small' => $user->getAvatarUrl(Image::SMALL), 'normal' => $user->getAvatarUrl(Image::NORMAL)], 'created_at' => $user->created_at, 'followers' => [], 'following' => [], 'latest_tracks' => $latestTracks, 'comments' => $comments, 'bio' => $user->bio, 'mlpforums_username' => $user->username, 'message_url' => $user->message_url, 'user_data' => $userData]], 200);
 }