Status CrowdSoundAdminImpl::GetDBStats(ServerContext* context, const GetDBStatsRequest* request, GetDBStatsResponse* response) { skrillex::ResultSet<skrillex::Song> songs; skrillex::ResultSet<skrillex::Artist> artists; skrillex::ResultSet<skrillex::Genre> genres; skrillex::Status s = server_->db_->getSongs(songs); if (s != skrillex::Status::OK()) { return Status(StatusCode::INTERNAL, s.message()); } s = server_->db_->getArtists(artists); if (s != skrillex::Status::OK()) { return Status(StatusCode::INTERNAL, s.message()); } s = server_->db_->getGenres(genres); if (s != skrillex::Status::OK()) { return Status(StatusCode::INTERNAL, s.message()); } response->set_num_songs(songs.size()); response->set_num_artists(artists.size()); response->set_num_genres(genres.size()); return Status::OK; }
Status CrowdSoundAdminImpl::apply(const SetSettingRequest* request, string& val) { if (request->value_case() != SetSettingRequest::ValueCase::kStrVal) { return Status(StatusCode::INVALID_ARGUMENT, "invalid type for key"); } val = request->str_val(); return Status::OK; }
Status PingMe(ServerContext* context, const User* request, PingInfo* response) override { if (request->id().compare("12983479238947")) { response->set_time(1000); } else response->set_time(0); return Status(StatusCode::PERMISSION_DENIED, "whaaat"); }
Status CrowdSoundAdminImpl::SetSetting(ServerContext* context, const SetSettingRequest* request, SetSettingResponse* response) { lock_guard<mutex> lock(server_->settings_guard_); // Why no switch supper :( or any nice way to do this if (request->key() == "filter_buffered") { return apply(request, server_->skrillex_read_options_.filter_buffered); } else if (request->key() == "inactivity_threshold") { return apply(request, server_->skrillex_read_options_.inactivity_threshold); } else if (request->key() == "result_limit") { return apply(request, server_->skrillex_read_options_.result_limit); } // Query Options else if (request->key() == "session_name") { return apply(request, server_->session_name_); } else if (request->key() == "queue_size") { return apply(request, server_->queue_size_); } else if (request->key() == "trending_artists_size") { return apply(request, server_->trending_artists_size_); } else if (request->key() == "skip_threshold") { return apply(request, server_->skip_threshold_); } // Algorithm settings else if (request->key() == "count_weight") { return apply(request, server_->algo_settings_.m_countWeight); } else if (request->key() == "vote_weight") { return apply(request, (int&)server_->algo_settings_.m_voteWeight); } else if (request->key() == "genre_weight") { return apply(request, server_->algo_settings_.m_genreWeight); } else if (request->key() == "artist_weight") { return apply(request, server_->algo_settings_.m_artistWeight); } else if (request->key() == "played_again_mult") { return apply(request, server_->algo_settings_.m_playedAgainMultipler); } else if (request->key() == "min_repeat_window") { return apply(request, server_->algo_settings_.m_minsBeforeCanPlayAgain); } return Status(StatusCode::NOT_FOUND, "key not found"); }
Status CrowdSoundAdminImpl::SkipStatus(ServerContext* context, const SkipStatusRequest* request, SkipStatusResponse* resp) { int votesToSkip = 0; int totalUsers = 0; { lock_guard<recursive_mutex> lock(server_->skip_guard_); votesToSkip = server_->skip_voters_.size(); skrillex::Status status = server_->db_->getSessionUserCount(totalUsers, server_->skrillex_read_options_); if (status != skrillex::Status::OK()) { return Status(StatusCode::INTERNAL, status.message()); } } resp->set_votes_to_skip(votesToSkip); resp->set_total_users(totalUsers); { lock_guard<mutex> lock(server_->settings_guard_); resp->set_threshold(server_->skip_threshold_); } return Status::OK; }