Skip to content

Commit 3ceaa0c

Browse files
frontend: make internet checks non-binary
1 parent b82a15e commit 3ceaa0c

File tree

8 files changed

+67
-16
lines changed

8 files changed

+67
-16
lines changed

core/frontend/src/components/app/InternetTrayMenu.vue

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
color="white"
2121
:title="tooltip"
2222
>
23-
{{ helper.has_internet ? 'mdi-web' : 'mdi-web-off' }}
23+
{{ icon }}
2424
</v-icon>
2525
</v-card>
2626
</template>
@@ -42,6 +42,7 @@ import Vue from 'vue'
4242
4343
import settings from '@/libs/settings'
4444
import helper from '@/store/helper'
45+
import { InternetConnectionState } from '@/types/helper'
4546
4647
import NetworkInterfaceMenu from './NetworkInterfaceMenu.vue'
4748
@@ -51,13 +52,37 @@ export default Vue.extend({
5152
NetworkInterfaceMenu,
5253
},
5354
data: () => ({
54-
helper,
5555
settings,
5656
show_menu: false,
5757
}),
5858
computed: {
5959
tooltip() {
60-
return helper.has_internet ? 'Vehicle has internet access.' : 'Internet connection is not available.'
60+
switch (helper.has_internet) {
61+
case InternetConnectionState.ONLINE:
62+
return 'Vehicle has internet access.'
63+
case InternetConnectionState.OFFLINE:
64+
return 'Internet connection is not available.'
65+
case InternetConnectionState.LIMITED:
66+
return 'Internet connection is limited.'
67+
case InternetConnectionState.UNKNOWN:
68+
return 'Internet connection status is unknown.'
69+
default:
70+
return 'Internet connection is not available.'
71+
}
72+
},
73+
icon(): string {
74+
switch (helper.has_internet) {
75+
case InternetConnectionState.ONLINE:
76+
return 'mdi-web'
77+
case InternetConnectionState.OFFLINE:
78+
return 'mdi-web-off'
79+
case InternetConnectionState.LIMITED:
80+
return 'mdi-web-minus'
81+
case InternetConnectionState.UNKNOWN:
82+
return 'mdi-web-refresh'
83+
default:
84+
return 'mdi-web-off'
85+
}
6186
},
6287
},
6388
})

core/frontend/src/components/kraken/BackAlleyTab.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,7 @@ import SpinningLogo from '@/components/common/SpinningLogo.vue'
276276
import StoreExtensionCard, { ImgProcessedResult } from '@/components/kraken/cards/StoreExtensionCard.vue'
277277
import { getLatestVersion } from '@/components/kraken/Utils'
278278
import helper from '@/store/helper'
279+
import { InternetConnectionState } from '@/types/helper'
279280
import { ExtensionData, InstalledExtensionData } from '@/types/kraken'
280281
281282
enum AvailableSorts {
@@ -328,7 +329,7 @@ export default Vue.extend({
328329
return this.manifest_is_loading || this.manifest_has_error
329330
},
330331
internet_offline(): boolean {
331-
return !helper.has_internet
332+
return helper.has_internet === InternetConnectionState.OFFLINE
332333
},
333334
show_info_card(): boolean {
334335
return this.is_manifest_invalid || this.internet_offline

core/frontend/src/components/kraken/BazaarTab.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import BrIframe from '@/components/utils/BrIframe.vue'
5656
import { OneMoreTime } from '@/one-more-time'
5757
import bag from '@/store/bag'
5858
import helper from '@/store/helper'
59+
import { InternetConnectionState } from '@/types/helper'
5960
6061
export default Vue.extend({
6162
name: 'BazaarTab',
@@ -76,7 +77,7 @@ export default Vue.extend({
7677
return this.bazaar_url_loading || this.bazaar_url_error !== undefined
7778
},
7879
internet_offline(): boolean {
79-
return !helper.has_internet
80+
return helper.has_internet === InternetConnectionState.OFFLINE
8081
},
8182
major_tom_not_configured(): boolean {
8283
return this.bazaar_url === undefined && !this.internet_offline

core/frontend/src/components/speedtest/InternetSpeedTest.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
width="100%"
1010
absolute
1111
opacity="0.92"
12-
:value="!helper.has_internet"
12+
:value="helper.has_internet === InternetConnectionState.OFFLINE"
1313
>
1414
Waiting for internet connection..
1515
</v-overlay>

core/frontend/src/components/version-chooser/VersionCard.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ import Vue, { PropType } from 'vue'
168168
import settings from '@/libs/settings'
169169
import helper from '@/store/helper'
170170
import { Dictionary } from '@/types/common'
171+
import { InternetConnectionState } from '@/types/helper'
171172
import { DEFAULT_REMOTE_IMAGE } from '@/utils/version_chooser'
172173
173174
import SpinningLogo from '../common/SpinningLogo.vue'
@@ -248,7 +249,8 @@ export default Vue.extend({
248249
return this.image.repository === 'bluerobotics/blueos-core'
249250
},
250251
showBootstrapUpdate(): boolean {
251-
if (!this.bootstrapVersion || !helper.has_internet) {
252+
if (!this.bootstrapVersion || helper.has_internet === InternetConnectionState.OFFLINE
253+
|| helper.has_internet === InternetConnectionState.UNKNOWN) {
252254
return false
253255
}
254256
return this.settings.is_pirate_mode && this.current && !this.updateAvailable && this.isFromBR

core/frontend/src/components/version-chooser/VersionChooser.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ import Notifier from '@/libs/notifier'
201201
import settings from '@/libs/settings'
202202
import helper from '@/store/helper'
203203
import { version_chooser_service } from '@/types/frontend_services'
204+
import { InternetConnectionState } from '@/types/helper'
204205
import {
205206
isServerResponse,
206207
LocalVersionsQuery, Version, VersionsQuery, VersionType,
@@ -270,7 +271,7 @@ export default Vue.extend({
270271
return 'File is required'
271272
},
272273
has_internet(): boolean {
273-
return helper.has_internet
274+
return helper.has_internet !== InternetConnectionState.OFFLINE
274275
},
275276
},
276277
watch: {

core/frontend/src/store/helper.ts

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import Notifier from '@/libs/notifier'
77
import { OneMoreTime } from '@/one-more-time'
88
import store from '@/store'
99
import { helper_service } from '@/types/frontend_services'
10-
import { Service, SpeedTestResult } from '@/types/helper'
10+
import { InternetConnectionState, Service, SpeedTestResult } from '@/types/helper'
1111
import back_axios, { isBackendOffline } from '@/utils/api'
1212

1313
const notifier = new Notifier(helper_service)
@@ -29,7 +29,7 @@ type SiteStatus = Record<string, CheckSiteStatus>
2929
class PingStore extends VuexModule {
3030
API_URL = '/helper/latest'
3131

32-
has_internet = false
32+
has_internet: InternetConnectionState = InternetConnectionState.UNKNOWN
3333

3434
services: Service[] = []
3535

@@ -42,7 +42,7 @@ class PingStore extends VuexModule {
4242
)
4343

4444
@Mutation
45-
setHasInternet(has_internet: boolean): void {
45+
setHasInternet(has_internet: InternetConnectionState): void {
4646
this.has_internet = has_internet
4747
}
4848

@@ -59,13 +59,27 @@ class PingStore extends VuexModule {
5959
timeout: 10000,
6060
})
6161
.then((response) => {
62-
const has_internet = !Object.values(response.data as SiteStatus)
63-
.filter((item) => item.online)
64-
.isEmpty()
65-
66-
this.setHasInternet(has_internet)
62+
const sites = Object.values(response.data as SiteStatus)
63+
const online_sites = sites.filter((item) => item.online)
64+
65+
// If no sites are reachable, we're offline
66+
if (online_sites.length === 0) {
67+
this.setHasInternet(InternetConnectionState.OFFLINE)
68+
return
69+
}
70+
71+
// If all sites are reachable, we're fully online
72+
if (online_sites.length === sites.length) {
73+
this.setHasInternet(InternetConnectionState.ONLINE)
74+
return
75+
}
76+
77+
// If some sites are reachable but not all, we have limited connectivity
78+
this.setHasInternet(InternetConnectionState.LIMITED)
6779
})
6880
.catch((error) => {
81+
// If we can't even reach the backend, we're in an unknown state
82+
this.setHasInternet(InternetConnectionState.UNKNOWN)
6983
notifier.pushBackError('INTERNET_CHECK_FAIL', error)
7084
})
7185
}

core/frontend/src/types/helper.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,10 @@ export interface SpeedTestResult {
6262
share: string | null
6363
client: SpeedtestClient
6464
}
65+
66+
export enum InternetConnectionState {
67+
OFFLINE = 0,
68+
UNKNOWN = 1,
69+
LIMITED = 2,
70+
ONLINE = 3,
71+
}

0 commit comments

Comments
 (0)