diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index b7e94f1..4755c32 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -1,7 +1,11 @@ class MessagesController < ApplicationController - def backfill - @message = Message.find(params[:id]) + before_action :set_message, only: [ + :backfill, + :next, + :update_user_count + ] + def backfill url = "https://api-v2.soundcloud.com/explore/Popular+Music?tag=out-of-experiment&limit=100&client_id=#{ENV['SOUNDCLOUD_ID']}" resp = Net::HTTP.get_response(URI.parse(url)) buffer = resp.body @@ -20,15 +24,18 @@ def backfill end end + def create + @message = Message.create message_params + redirect_to @message + end + def index @messages = Message.all.order('lower(title) ASC') end def next - if @message = Message.find_by(id: params[:id]) - if @comment = @message.comments.playing.first - NextUpJob.perform_now(@message.id, @comment.id) - end + if @comment = @message.comments.playing.first + NextUpJob.perform_now(@message.id, @comment.id) end end @@ -60,9 +67,13 @@ def show end end - def create - @message = Message.create message_params - redirect_to @message + def update_user_count + user_count = params[:user_count].presence || 0 + user_count = user_count.to_i + if user_count > @message.most_users_count + @message.update_attributes(most_users_count: user_count) + end + render json: {user_count: @message.most_users_count}, status: :ok end private @@ -70,4 +81,10 @@ def create def message_params params.require(:message).permit(:title) end + + def set_message + unless @message = Message.find_by(id: params[:id]) + render nothing: true, status: :bad_request + end + end end diff --git a/app/models/comment.rb b/app/models/comment.rb index d44c5ed..d0b0dc3 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -23,6 +23,10 @@ def blurred_album_art_url ix_image_url(album_art_url, { blur: 200 }) end + def duration + (self.responses['duration'] / 1000).ceil + end + def palette_url ix_image_url(album_art_url, { palette: 'css', colors: 4, class: 'album', zoom: 100 }) end @@ -34,7 +38,7 @@ def reset! def start_playing(should_push) now = Time.now.utc update_attributes(now_playing: true, aired_at: now) - next_track_at = now + (self.responses['duration'] / 1000).ceil + next_track_at = now + duration NextUpJob.set(wait_until: next_track_at).perform_later(self.message.id, self.id) PusherService.now_playing_track(self) if should_push end diff --git a/app/models/message.rb b/app/models/message.rb index e733500..3e30b41 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -2,7 +2,22 @@ class Message < ActiveRecord::Base belongs_to :user has_many :comments + def mvdj + grouped_track_count = self.comments.group(:user_id).count + sorted_group = grouped_track_count.sort_by { |user_id, count| -count } + User.find_by(id: sorted_group.first) + end + + def played_tracks + self.comments.where.not(aired_at: nil) + end + def queue_count self.comments.enqueued.count end + + def total_played_hours + seconds = played_tracks.reduce(0) { |sum, track| sum + track.duration } + (seconds.to_f / 60.0 / 60.0).round(2) + end end diff --git a/app/views/messages/show.html.erb b/app/views/messages/show.html.erb index f36bff3..66ebd64 100644 --- a/app/views/messages/show.html.erb +++ b/app/views/messages/show.html.erb @@ -149,19 +149,19 @@
| Songs played | 9,001 | +Songs played | <%= @message.played_tracks.count %> |
| Most users in room | A lot | +Most users in room | <%= @message.most_users_count %> |
| Hours of music queued up | So many | +Hours of music queued up | <%= @message.total_played_hours %> |
| Longest streak | Like, days | ||
| MVDJ | Baldwin | +MVDJ | <%= @message.mvdj.full_name %> |