diff --git a/DeskThingServer/src/renderer/src/components/Apps/Web.tsx b/DeskThingServer/src/renderer/src/components/Apps/Web.tsx
index 01d501e2..4fdd2a88 100644
--- a/DeskThingServer/src/renderer/src/components/Apps/Web.tsx
+++ b/DeskThingServer/src/renderer/src/components/Apps/Web.tsx
@@ -1,8 +1,14 @@
import { useEffect, useState } from 'react'
-import { IconLogoGearLoading } from '../icons'
+import { IconLogoLoading } from '../icons'
import githubStore, { GithubRelease, GithubAsset } from '../../store/githubStore'
import ReleaseList from '../ReleaseList'
import RunPreppedApp from './RunPreppedApp'
+interface responseData {
+ status: boolean
+ data: returnData
+ final: boolean
+ error?: string
+}
interface returnData {
appId: string
appName: string
@@ -18,6 +24,7 @@ const Web = (): JSX.Element => {
const [loading, setLoading] = useState(false)
const [appData, setAppData] = useState
(null)
const [error, setError] = useState(null)
+ const [status, setStatus] = useState(null)
useEffect(() => {
const fetchData = async (): Promise => {
@@ -36,15 +43,40 @@ const Web = (): JSX.Element => {
return assets.filter((asset) => asset.name.includes('-app'))
}
+ const handleLogging = async (): Promise => {
+ setLoading(true)
+ const unsubscribe = window.electron.ipcRenderer.on('logging', (_event, reply) => {
+ console.log(reply)
+ if (reply.final) {
+ unsubscribe()
+ setLoading(false)
+ } else {
+ setLoading(true)
+ }
+ if (!reply.status) {
+ setStatus(reply.error || 'Unknown error occurred')
+ unsubscribe()
+ setLoading(false)
+ } else {
+ if (reply.data) {
+ setStatus(reply.data)
+ }
+ }
+ })
+ }
+
const handleAssetClick = async (asset: GithubAsset): Promise => {
// Send the selected asset to Electron backend for extraction
setLoading(true)
try {
window.electron.ipcRenderer.send('extract-app-zip-url', asset.browser_download_url)
- window.electron.ipcRenderer.on('zip-name', (_event, data: returnData) => {
+ handleLogging()
+ window.electron.ipcRenderer.on('zip-name', (_event, response: responseData) => {
setLoading(false)
- setAppData(data)
- console.log(data)
+ if (response.status) {
+ setAppData(response.data)
+ }
+ console.log(response)
})
} catch (error) {
setLoading(false)
@@ -65,10 +97,9 @@ const Web = (): JSX.Element => {
{!appData?.appId ? (
{loading ? (
-
-
-
-
+
+
+ {status &&
{status.trim()}
}
) : error ? (
diff --git a/DeskThingServer/src/renderer/src/components/ContentArea.tsx b/DeskThingServer/src/renderer/src/components/ContentArea.tsx
index c7de1f93..b3cda7dd 100644
--- a/DeskThingServer/src/renderer/src/components/ContentArea.tsx
+++ b/DeskThingServer/src/renderer/src/components/ContentArea.tsx
@@ -1,9 +1,9 @@
import React from 'react'
import AppsList from './Apps'
import Dev from './Dev'
-import Device from './ADB'
+import Adb from './ADB'
+import Device from './Device'
import LogDisplay from './LogDisplay'
-import Loading from './Loading'
type View = 'appsList' | 'adb' | 'logDisplay' | 'preferences' | 'dev' // Define possible views
@@ -17,11 +17,11 @@ const ContentArea: React.FC
= ({ currentView }) => {
case 'appsList':
return
case 'adb':
- return
+ return
case 'logDisplay':
return
case 'preferences':
- return
+ return
case 'dev':
return
default:
diff --git a/DeskThingServer/src/renderer/src/components/Dev/Adb.tsx b/DeskThingServer/src/renderer/src/components/Dev/Adb.tsx
index 3c9a5926..c0849bfc 100644
--- a/DeskThingServer/src/renderer/src/components/Dev/Adb.tsx
+++ b/DeskThingServer/src/renderer/src/components/Dev/Adb.tsx
@@ -1,16 +1,5 @@
import { useState } from 'react'
-import {
- IconCarThing,
- IconDisconnect,
- IconLightbulbOff,
- IconLightbulbOn,
- IconLogoGearLoading,
- IconPlay,
- IconPower,
- IconRefresh,
- IconReload,
- IconX
-} from '../icons'
+import { IconLogoGearLoading, IconPlay, IconRefresh } from '../icons'
const Adb = (): JSX.Element => {
const [type, setType] = useState('')
diff --git a/DeskThingServer/src/renderer/src/components/Dev/Tabs.tsx b/DeskThingServer/src/renderer/src/components/Dev/Tabs.tsx
index e38ed2cb..b435669e 100644
--- a/DeskThingServer/src/renderer/src/components/Dev/Tabs.tsx
+++ b/DeskThingServer/src/renderer/src/components/Dev/Tabs.tsx
@@ -1,4 +1,4 @@
-import React, { useEffect } from 'react'
+import React from 'react'
import { View } from '.'
interface TopbarProps {
@@ -7,32 +7,10 @@ interface TopbarProps {
}
const Tabs: React.FC = ({ setCurrentView, currentView }) => {
- const [connections, setConnections] = React.useState(0)
const handleClick = (view: View): void => {
setCurrentView(view)
}
- const getConnections = (): void => window.electron.ipcRenderer.send('get-connections')
-
- useEffect(() => {
- const handleConnection = (_event, num: number): void => {
- setConnections(num)
- console.log('got connections', num)
- }
-
- console.log('got connections', connections)
- const removeListener = window.electron.ipcRenderer.on('connections', handleConnection)
-
- const timeoutId = setTimeout(() => {
- getConnections()
- }, 1500)
-
- return () => {
- removeListener()
- clearTimeout(timeoutId)
- }
- }, [])
-
return (
diff --git a/DeskThingServer/src/renderer/src/components/Device/Devices.tsx b/DeskThingServer/src/renderer/src/components/Device/Devices.tsx
new file mode 100644
index 00000000..729784ff
--- /dev/null
+++ b/DeskThingServer/src/renderer/src/components/Device/Devices.tsx
@@ -0,0 +1,91 @@
+import { useEffect, useState } from 'react'
+import { IconCarThing } from '../icons'
+import Key from './Key'
+
+export type Button = {
+ name: string
+ description: string
+ source: string
+}
+
+export type key = {
+ id: string
+ source: string
+}
+
+export type ButtonMapping = {
+ [key: string]: Button
+}
+
+type FileStructure = {
+ default: ButtonMapping
+ [key: string]: ButtonMapping | Button[] | key[] | string
+ functions: Button[]
+ keys: key[]
+ version: string
+}
+
+const Device = (): JSX.Element => {
+ const [mapping, setMapping] = useState
({})
+ const [buttons, setButtons] = useState([])
+ const [functions, setFunctions] = useState