diff --git a/application/controllers/Components.php b/application/controllers/Components.php index 63d80718..ad74a3f8 100644 --- a/application/controllers/Components.php +++ b/application/controllers/Components.php @@ -22,18 +22,49 @@ class Components extends CI_Controller { $data['user_hamsat_key']=''; } $url = 'https://hams.at/api/alerts/upcoming'; - if ($data['user_hamsat_key'] ?? '' != '') { - $options = array( - 'http' => array( - 'method' => 'GET', - 'header' => "Authorization: Bearer ".$data['user_hamsat_key']."\r\n" - ) - ); - $context = stream_context_create($options); - $json = file_get_contents($url, false, $context); - } else { - $json = file_get_contents($url); + + // Initialize error state + $data['error'] = false; + $data['error_message'] = ''; + + try { + if ($data['user_hamsat_key'] ?? '' != '') { + $options = array( + 'http' => array( + 'method' => 'GET', + 'header' => "Authorization: Bearer ".$data['user_hamsat_key']."\r\n", + 'timeout' => 10 // Add timeout to prevent long hangs + ) + ); + $context = stream_context_create($options); + $json = @file_get_contents($url, false, $context); + } else { + $json = @file_get_contents($url, false, stream_context_create(array( + 'http' => array('timeout' => 10) + ))); + } + + // Check if the request failed + if ($json === false) { + $data['error'] = true; + $data['error_message'] = 'Unable to connect to hams.at service. Please check your internet connection or try again later.'; + $data['rovedata'] = null; + } else { + $decoded_data = json_decode($json, true); + if ($decoded_data === null && json_last_error() !== JSON_ERROR_NONE) { + $data['error'] = true; + $data['error_message'] = 'Invalid response received from hams.at service. Please try again later.'; + $data['rovedata'] = null; + } else { + $data['rovedata'] = $decoded_data; + } + } + } catch (Exception $e) { + $data['error'] = true; + $data['error_message'] = 'An error occurred while fetching satellite data. Please try again later.'; + $data['rovedata'] = null; } + $hkey_opt=$this->user_options_model->get_options('hamsat',array('option_name'=>'hamsat_key','option_key'=>'workable'))->result(); if (count($hkey_opt)>0) { $data['user_hamsat_workable_only'] = $hkey_opt[0]->option_value; @@ -42,7 +73,6 @@ class Components extends CI_Controller { } $this->load->model('stations'); - $data['rovedata'] = json_decode($json, true); $data['gridsquare'] = strtoupper($this->stations->find_gridsquare()); // load view diff --git a/application/views/components/hamsat/table.php b/application/views/components/hamsat/table.php index 00774829..d46b4b47 100644 --- a/application/views/components/hamsat/table.php +++ b/application/views/components/hamsat/table.php @@ -12,12 +12,19 @@
Private feed key empty. Please set the feed key in your profile.
+ + + + + +
+ +
- -
- -
- @@ -152,6 +159,5 @@
- \ No newline at end of file