Offline mode (#403)

* offline mode

* fixes, mixpanels, etc

* changes

* prettier

* rev

* actions
This commit is contained in:
Wyatt Verchere
2023-08-04 19:51:46 -07:00
committed by GitHub
parent b772f916b1
commit 6a76811bed
36 changed files with 427 additions and 123 deletions

View File

@@ -31,7 +31,7 @@ import { showProfileInFolder } from '@/helpers/utils.js'
import { useFetch } from '@/helpers/fetch.js'
import { install as pack_install } from '@/helpers/pack.js'
import { useTheming } from '@/store/state.js'
import mixpanel from 'mixpanel-browser'
import { mixpanel_track } from '@/helpers/mixpanel'
const router = useRouter()
@@ -125,7 +125,7 @@ const handleOptionsClick = async (args) => {
switch (args.option) {
case 'play':
await run(args.item.path).catch(handleError)
mixpanel.track('InstanceStart', {
mixpanel_track('InstanceStart', {
loader: args.item.metadata.loader,
game_version: args.item.metadata.game_version,
})
@@ -134,7 +134,7 @@ const handleOptionsClick = async (args) => {
for (const u of await get_uuids_by_profile_path(args.item.path).catch(handleError)) {
await kill_by_uuid(u).catch(handleError)
}
mixpanel.track('InstanceStop', {
mixpanel_track('InstanceStop', {
loader: args.item.metadata.loader,
game_version: args.item.metadata.game_version,
})

View File

@@ -78,7 +78,7 @@ import {
import { get, set } from '@/helpers/settings'
import { WebviewWindow } from '@tauri-apps/api/window'
import { handleError } from '@/store/state.js'
import mixpanel from 'mixpanel-browser'
import { mixpanel_track } from '@/helpers/mixpanel'
defineProps({
mode: {
@@ -127,7 +127,7 @@ async function login() {
await setAccount(loggedIn)
await refreshValues()
await window.close()
mixpanel.track('AccountLogIn')
mixpanel_track('AccountLogIn')
}
const logout = async (id) => {
@@ -139,7 +139,7 @@ const logout = async (id) => {
} else {
emit('change')
}
mixpanel.track('AccountLogOut')
mixpanel_track('AccountLogOut')
}
let showCard = ref(false)

View File

@@ -59,7 +59,7 @@ import { Button, Modal, XIcon, DownloadIcon, DropdownSelect, formatCategory } fr
import { add_project_from_version as installMod } from '@/helpers/profile'
import { ref } from 'vue'
import { handleError, useTheming } from '@/store/state.js'
import mixpanel from 'mixpanel-browser'
import { mixpanel_track } from '@/helpers/mixpanel'
const themeStore = useTheming()
@@ -94,7 +94,7 @@ defineExpose({
incompatibleModal.value.show()
markInstalled = extMarkInstalled
mixpanel.track('ProjectInstallStart', { source: 'ProjectIncompatibilityWarningModal' })
mixpanel_track('ProjectInstallStart', { source: 'ProjectIncompatibilityWarningModal' })
},
})
@@ -105,7 +105,7 @@ const install = async () => {
markInstalled()
incompatibleModal.value.hide()
mixpanel.track('ProjectInstall', {
mixpanel_track('ProjectInstall', {
loader: instance.value.metadata.loader,
game_version: instance.value.metadata.game_version,
id: project.value,

View File

@@ -2,7 +2,7 @@
import { Button, Modal, XIcon, DownloadIcon } from 'omorphia'
import { install as pack_install } from '@/helpers/pack'
import { ref } from 'vue'
import mixpanel from 'mixpanel-browser'
import { mixpanel_track } from '@/helpers/mixpanel'
import { useTheming } from '@/store/theme.js'
import { handleError } from '@/store/state.js'
@@ -24,7 +24,7 @@ defineExpose({
installing.value = false
confirmModal.value.show()
mixpanel.track('PackInstallStart')
mixpanel_track('PackInstallStart')
},
})
@@ -38,7 +38,7 @@ async function install() {
title.value,
icon.value ? icon.value : null
).catch(handleError)
mixpanel.track('PackInstall', {
mixpanel_track('PackInstall', {
id: projectId.value,
version_id: version.value,
title: title.value,

View File

@@ -16,7 +16,7 @@ import { useFetch } from '@/helpers/fetch.js'
import { handleError } from '@/store/state.js'
import { showProfileInFolder } from '@/helpers/utils.js'
import ModInstallModal from '@/components/ui/ModInstallModal.vue'
import mixpanel from 'mixpanel-browser'
import { mixpanel_track } from '@/helpers/mixpanel'
const props = defineProps({
instance: {
@@ -93,7 +93,7 @@ const install = async (e) => {
).catch(handleError)
modLoading.value = false
mixpanel.track('PackInstall', {
mixpanel_track('PackInstall', {
id: props.instance.project_id,
version_id: versions[0].id,
title: props.instance.title,
@@ -125,7 +125,7 @@ const play = async (e, context) => {
modLoading.value = false
playing.value = true
mixpanel.track('InstancePlay', {
mixpanel_track('InstancePlay', {
loader: props.instance.metadata.loader,
game_version: props.instance.metadata.game_version,
source: context,
@@ -145,7 +145,7 @@ const stop = async (e, context) => {
uuids.forEach(async (u) => await kill_by_uuid(u).catch(handleError))
} else await kill_by_uuid(uuid.value).catch(handleError) // If we still have the uuid, just kill it
mixpanel.track('InstanceStop', {
mixpanel_track('InstanceStop', {
loader: props.instance.metadata.loader,
game_version: props.instance.metadata.game_version,
source: context,

View File

@@ -215,7 +215,7 @@ import {
} from '@/helpers/metadata'
import { handleError } from '@/store/notifications.js'
import Multiselect from 'vue-multiselect'
import mixpanel from 'mixpanel-browser'
import { mixpanel_track } from '@/helpers/mixpanel'
import { useTheming } from '@/store/state.js'
import { listen } from '@tauri-apps/api/event'
import { install_from_file } from '@/helpers/pack.js'
@@ -249,7 +249,7 @@ defineExpose({
display_icon.value = null
modal.value.show()
mixpanel.track('InstanceCreateStart', { source: 'CreationModal' })
mixpanel_track('InstanceCreateStart', { source: 'CreationModal' })
},
})
@@ -314,7 +314,7 @@ const create_instance = async () => {
icon.value
).catch(handleError)
mixpanel.track('InstanceCreate', {
mixpanel_track('InstanceCreate', {
profile_name: profile_name.value,
game_version: game_version.value,
loader: loader.value,
@@ -370,7 +370,7 @@ const openFile = async () => {
modal.value.hide()
await install_from_file(newProject).catch(handleError)
mixpanel.track('InstanceCreate', {
mixpanel_track('InstanceCreate', {
source: 'CreationModalFileOpen',
})
}
@@ -379,7 +379,7 @@ listen('tauri://file-drop', async (event) => {
modal.value.hide()
if (event.payload && event.payload.length > 0 && event.payload[0].endsWith('.mrpack')) {
await install_from_file(event.payload[0]).catch(handleError)
mixpanel.track('InstanceCreate', {
mixpanel_track('InstanceCreate', {
source: 'CreationModalFileDrop',
})
}

View File

@@ -44,7 +44,7 @@ import {
get_all_jre,
} from '@/helpers/jre.js'
import { handleError } from '@/store/notifications.js'
import mixpanel from 'mixpanel-browser'
import { mixpanel_track } from '@/helpers/mixpanel'
import { useTheming } from '@/store/theme.js'
const themeStore = useTheming()
@@ -79,7 +79,7 @@ const emit = defineEmits(['submit'])
function setJavaInstall(javaInstall) {
emit('submit', javaInstall)
detectJavaModal.value.hide()
mixpanel.track('JavaAutoDetect', {
mixpanel_track('JavaAutoDetect', {
path: javaInstall.path,
version: javaInstall.version,
})

View File

@@ -49,7 +49,7 @@ import { find_jre_17_jres, get_jre } from '@/helpers/jre.js'
import { ref } from 'vue'
import { open } from '@tauri-apps/api/dialog'
import JavaDetectionModal from '@/components/ui/JavaDetectionModal.vue'
import mixpanel from 'mixpanel-browser'
import { mixpanel_track } from '@/helpers/mixpanel'
import { handleError } from '@/store/state.js'
const props = defineProps({
@@ -88,7 +88,7 @@ async function testJava() {
testingJava.value = false
testingJavaSuccess.value = !!result
mixpanel.track('JavaTest', {
mixpanel_track('JavaTest', {
path: props.modelValue ? props.modelValue.path : '',
success: !!result,
})
@@ -110,7 +110,7 @@ async function handleJavaFileInput() {
architecture: 'x86',
}
mixpanel.track('JavaManualSelect', {
mixpanel_track('JavaManualSelect', {
path: filePath,
version: props.version,
})

View File

@@ -22,7 +22,7 @@ import { open } from '@tauri-apps/api/dialog'
import { create } from '@/helpers/profile'
import { installVersionDependencies } from '@/helpers/utils'
import { handleError } from '@/store/notifications.js'
import mixpanel from 'mixpanel-browser'
import { mixpanel_track } from '@/helpers/mixpanel'
import { useTheming } from '@/store/theme.js'
import { useRouter } from 'vue-router'
import { tauri } from '@tauri-apps/api'
@@ -57,7 +57,7 @@ defineExpose({
profiles.value = await getData()
mixpanel.track('ProjectInstallStart', { source: 'ProjectInstallModal' })
mixpanel_track('ProjectInstallStart', { source: 'ProjectInstallModal' })
},
})
@@ -88,7 +88,7 @@ async function install(instance) {
instance.installedMod = true
instance.installing = false
mixpanel.track('ProjectInstall', {
mixpanel_track('ProjectInstall', {
loader: instance.metadata.loader,
game_version: instance.metadata.game_version,
id: project.value,
@@ -137,7 +137,7 @@ const toggleCreation = () => {
if (!alreadySentCreation.value) {
alreadySentCreation.value = false
mixpanel.track('InstanceCreateStart', { source: 'ProjectInstallModal' })
mixpanel_track('InstanceCreateStart', { source: 'ProjectInstallModal' })
}
}
@@ -186,7 +186,7 @@ const createInstance = async () => {
const instance = await get(id, true)
await installVersionDependencies(instance, versions.value)
mixpanel.track('InstanceCreate', {
mixpanel_track('InstanceCreate', {
profile_name: name.value,
game_version: versions.value[0].game_versions[0],
loader: loader,
@@ -195,7 +195,7 @@ const createInstance = async () => {
source: 'ProjectInstallModal',
})
mixpanel.track('ProjectInstall', {
mixpanel_track('ProjectInstall', {
loader: loader,
game_version: versions.value[0].game_versions[0],
id: project.value,

View File

@@ -9,6 +9,12 @@
>
<DownloadIcon />
</Button>
<div v-if="offline" class="status">
<span class="circle stopped" />
<div class="running-text clickable" @click="refreshInternet()">
<span> Offline </span>
</div>
</div>
<div v-if="selectedProfile" class="status">
<span class="circle running" />
<div ref="profileButton" class="running-text">
@@ -107,12 +113,13 @@ import {
kill_by_uuid as killProfile,
get_uuids_by_profile_path as getProfileProcesses,
} from '@/helpers/process'
import { loading_listener, process_listener } from '@/helpers/events'
import { loading_listener, process_listener, offline_listener } from '@/helpers/events'
import { useRouter } from 'vue-router'
import { progress_bars_list } from '@/helpers/state.js'
import { refreshOffline, isOffline } from '@/helpers/utils.js'
import ProgressBar from '@/components/ui/ProgressBar.vue'
import { handleError } from '@/store/notifications.js'
import mixpanel from 'mixpanel-browser'
import { mixpanel_track } from '@/helpers/mixpanel'
const router = useRouter()
const card = ref(null)
@@ -126,10 +133,20 @@ const showProfiles = ref(false)
const currentProcesses = ref(await getRunningProfiles().catch(handleError))
const selectedProfile = ref(currentProcesses.value[0])
const offline = ref(await isOffline().catch(handleError))
const refreshInternet = async () => {
offline.value = await refreshOffline().catch(handleError)
}
const unlistenProcess = await process_listener(async () => {
await refresh()
})
const unlistenRefresh = await offline_listener(async (b) => {
offline.value = b
await refresh()
})
const refresh = async () => {
currentProcesses.value = await getRunningProfiles().catch(handleError)
if (!currentProcesses.value.includes(selectedProfile.value)) {
@@ -142,7 +159,7 @@ const stop = async (path) => {
const processes = await getProfileProcesses(path ?? selectedProfile.value.path)
await killProfile(processes[0])
mixpanel.track('InstanceStop', {
mixpanel_track('InstanceStop', {
loader: currentProcesses.value[0].metadata.loader,
game_version: currentProcesses.value[0].metadata.game_version,
source: 'AppBar',
@@ -240,6 +257,7 @@ onBeforeUnmount(() => {
window.removeEventListener('click', handleClickOutsideProfile)
unlistenProcess()
unlistenLoading()
unlistenRefresh()
})
</script>

View File

@@ -85,7 +85,7 @@ import { install as packInstall } from '@/helpers/pack.js'
import { installVersionDependencies } from '@/helpers/utils.js'
import { useFetch } from '@/helpers/fetch.js'
import { handleError } from '@/store/notifications.js'
import mixpanel from 'mixpanel-browser'
import { mixpanel_track } from '@/helpers/mixpanel'
dayjs.extend(relativeTime)
const props = defineProps({
@@ -165,7 +165,7 @@ async function install() {
props.project.icon_url
).catch(handleError)
mixpanel.track('PackInstall', {
mixpanel_track('PackInstall', {
id: props.project.project_id,
version_id: queuedVersionData.id,
title: props.project.title,
@@ -196,7 +196,7 @@ async function install() {
await installMod(props.instance.path, queuedVersionData.id).catch(handleError)
await installVersionDependencies(props.instance, queuedVersionData)
mixpanel.track('ProjectInstall', {
mixpanel_track('ProjectInstall', {
loader: props.instance.metadata.loader,
game_version: props.instance.metadata.game_version,
id: props.project.project_id,