route('login'); } $userLogged = User::where('id', '=', Auth::id())->get()->first(); $allNotifications = DB::table('notifications')->orderBy('id', 'desc')->limit('3')->get(); $siteData = SiteContext::current(); $getStreamDetails = DB::table('streamings')->where('port','=',$siteData->stream_port)->get()->first(); return view('radio.settings', ['userLogged' => $userLogged , 'allNotifications' => $allNotifications, 'topHref' => 'radio', 'siteData' => $siteData, 'streamData' => $getStreamDetails, 'devices' => $this->devices()]); } /* Sessions of the logged user, newest first, only with the database driver */ private function devices() { if (config('session.driver') !== 'database') { return collect(); } return DB::table(config('session.table', 'sessions')) ->where('user_id', '=', Auth::id()) ->orderBy('last_activity', 'desc') ->get() ->map(function ($row) { $os = explode('|', getOS($row->user_agent)); $row->os = $os[0]; $row->icon = $os[1] ?? 'fa-solid fa-desktop'; $row->browser = browser_name($row->user_agent); $row->current = $row->id === session()->getId(); $row->seen = \Carbon\Carbon::createFromTimestamp($row->last_activity, config('app.timezone')); return $row; }); } public function revokeSession(Request $request) { if (Auth::check() === false) { Auth::logout(); return redirect()->route('login'); } if ($request->id === session()->getId()) { return response()->json(['status' => false, 'message' => __('radio.devices_cannot_revoke')], 200); } DB::table(config('session.table', 'sessions')) ->where('user_id', '=', Auth::id()) ->where('id', '=', $request->id) ->delete(); return response()->json(['status' => true, 'message' => __('radio.devices_revoked')], 200); } public function doSettings(Request $request) { if (Auth::check() === false) { Auth::logout(); return redirect()->route('login'); } $siteData = SiteContext::current(); $arr_fade_file = array('10','20','30','60','90'); $arr_fade_time = array('0','2','4','6','8','10'); $arr_bitrate = array('32','48','64','96','128','192','256','320'); $allowedSamples = ['44.1', '48.0']; $autodjSample = in_array((string) $request->autodj_sample, $allowedSamples, true) ? (string) $request->autodj_sample : '44.1'; $allowedFadeTypes = ['none', 'simple', 'crossfade']; $allowedPresets = ['off', 'light', 'balanced', 'strong', 'aggressive']; $autodjPreset = in_array($request->autodj_preset, $allowedPresets, true) ? $request->autodj_preset : 'off'; $fadeType = in_array($request->autodj_fade_type, $allowedFadeTypes, true) ? $request->autodj_fade_type : 'none'; DB::table('streamings')->where('port','=',$siteData->stream_port)->update([ 'autodj_preset' => $autodjPreset, 'autodj_sample' => $autodjSample, 'autodj_fade_type' => $fadeType, 'autodj_fade_file' => (in_array($request->autodj_fade_file,$arr_fade_file) ? $request->autodj_fade_file : '20'), 'autodj_fade_time' => (in_array($request->autodj_fade_time,$arr_fade_time) ? $request->autodj_fade_time : '4'), 'autodj_skip' => ($request->autodj_skip == '1' ? '1' : ($request->autodj_skip == '0' ? '0' : '1')), 'autodj_codec' => ($request->autodj_codec == 'mp3' ? 'mp3' : ($request->autodj_codec == 'aac' ? 'aac' : 'mp3')), 'autodj_bitrate' => (in_array($request->autodj_bitrate,$arr_bitrate) ? $request->autodj_bitrate : '64'), 'autodj_channel' => ($request->autodj_channel == '1' ? '1' : ($request->autodj_channel == '0' ? '0' : '1')) ]); DB::table('relays')->where('port','=',$siteData->stream_port)->update([ 'active' => 0, ]); //desliga todos os relays por garantia $getStreamDetails = DB::table('streamings')->where('port','=',$siteData->stream_port)->get()->first(); $getServerDetails = DB::table('servers')->where('id','=',$getStreamDetails->server_id)->get()->first(); $ch = curl_init('https://'.$siteData->stream_server.'.'.env('BASE_SERVER_URL','brascast.com').'/bras_api/data/configs.php?port='.$siteData->stream_port.'&pass='.$getStreamDetails->password.'&preset='.$getStreamDetails->autodj_preset.'&cross_type='.$getStreamDetails->autodj_fade_type.'&reports='.($getStreamDetails->plan_reports ? '1' : '0').'&pl_id='.$getStreamDetails->current_playlist_id.'&cross_file='.(in_array($request->autodj_fade_file,$arr_fade_file) ? $request->autodj_fade_file : '20').'&cross_time='.(in_array($request->autodj_fade_time,$arr_fade_time) ? $request->autodj_fade_time : '4').'&type='.($request->autodj_codec == 'mp3' ? 'mp3' : ($request->autodj_codec == 'aac' ? 'aac' : 'mp3')).'&bitrate='.(in_array($request->autodj_bitrate,$arr_bitrate) ? $request->autodj_bitrate : '64').'&sample='.$autodjSample.'&channels='.($request->autodj_channel == '1' ? '1' : '2').'&plan_listeners='.$getStreamDetails->plan_listeners.'&autodj_port='.$getStreamDetails->autodj_port.'&timezone='.rawurlencode($siteData->timezone)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_USERAGENT, "CURL"); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Hash: 4BEAD0A3736F606092EADB5540B277966C2735F98294BD50547DB391ABB37E99", "Secret: streamingbrascastsrvr" ]); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $result = curl_exec($ch); curl_close($ch); if(!$result){ return response()->json(array('status' => false, 'message' => __('radio.settings_save_error')), 200); } /* Home ouvintes = 30 seg Musica player = 30 seg Cover musica = 1 min */ setLog($siteData->stream_port, 'Configurações salvas', request()->ip()); return response()->json(array('status' => true, 'message' => __('radio.settings_saved')), 200); } }