diff --git a/app.go b/app.go index 36d1024..f55e03f 100644 --- a/app.go +++ b/app.go @@ -28,9 +28,9 @@ type App struct { func NewApp() *App { // Create a new hadware manager hardwareManager := hardware.NewHardwareManager() - hardwareManager.RegisterFinder(hardware.NewMIDIFinder(5 * time.Second)) + // hardwareManager.RegisterFinder(hardware.NewMIDIFinder(5 * time.Second)) hardwareManager.RegisterFinder(hardware.NewFTDIFinder(5 * time.Second)) - hardwareManager.RegisterFinder(hardware.NewOS2LFinder()) + // hardwareManager.RegisterFinder(hardware.NewOS2LFinder()) return &App{ hardwareManager: hardwareManager, projectSave: "", diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte index 14f79f3..032ecde 100644 --- a/frontend/src/App.svelte +++ b/frontend/src/App.svelte @@ -32,7 +32,7 @@ return {...peripherals} }) console.log("Hardware has been added to the system"); - generateToast('info', 'bxs-hdd', 'Your ' + peripheralInfo.Name + ' device has been detected') + generateToast('info', 'bxs-hdd', $_("peripheralArrivalToast") + ' ' + peripheralInfo.Name + '') }) // Handle the event when a peripheral is removed from the system @@ -51,7 +51,7 @@ storedPeripherals[peripheralInfo.SerialNumber].isDetected = false return {...storedPeripherals} }) - generateToast('warning', 'bxs-hdd', 'Your ' + peripheralInfo.Name + ' device has been removed') + generateToast('warning', 'bxs-hdd', $_("peripheralRemovalToast") + ' ' + peripheralInfo.Name + '') }) // Set the window title @@ -70,10 +70,10 @@ SaveProject().then((filePath) => { needProjectSave.set(false) console.log("Project has been saved to " + filePath) - generateToast('info', 'bxs-save', 'The project has been saved') + generateToast('info', 'bxs-save', $_("projectSavedToast")) }).catch((error) => { console.error(`Unable to save the project: ${error}`) - generateToast('danger', 'bx-error', 'Unable to save the project: ' + error) + generateToast('danger', 'bx-error', $_("projectSaveErrorToast") + ' ' + error) }) } diff --git a/frontend/src/components/Settings/InputsOutputsContent.svelte b/frontend/src/components/Settings/InputsOutputsContent.svelte index b183ab3..2b12d8e 100644 --- a/frontend/src/components/Settings/InputsOutputsContent.svelte +++ b/frontend/src/components/Settings/InputsOutputsContent.svelte @@ -62,7 +62,7 @@ $needProjectSave = true }).catch((error) => { console.log("Unable to add the peripheral to the project: " + error) - generateToast('danger', 'bx-error', 'Unable to add this device to project') + generateToast('danger', 'bx-error', $_("addPeripheralErrorToast")) }) } @@ -86,7 +86,7 @@ $needProjectSave = true }).catch((error) => { console.log("Unable to remove the peripheral from the project: " + error) - generateToast('danger', 'bx-error', 'Unable to remove this device from project') + generateToast('danger', 'bx-error', $_("removePeripheralErrorToast")) }) } @@ -100,10 +100,10 @@ return {...currentPeriph} }) $needProjectSave = true - generateToast('info', 'bx-signal-5', 'Your OS2L peripheral has been created') + generateToast('info', 'bx-signal-5', $_("os2lPeripheralCreatedToast")) }).catch(error => { console.log("Unable to add the OS2L peripheral: " + error) - generateToast('danger', 'bx-error', 'Unable to create the OS2L peripheral') + generateToast('danger', 'bx-error', $_("os2lPeripheralCreateErrorToast")) }) } diff --git a/frontend/src/components/Settings/Settings.svelte b/frontend/src/components/Settings/Settings.svelte index 167be7b..dfcc601 100644 --- a/frontend/src/components/Settings/Settings.svelte +++ b/frontend/src/components/Settings/Settings.svelte @@ -23,7 +23,7 @@ $projectsList = projects }).catch((error) => { console.error(`Unable to get the projects list: ${error}`) - generateToast('danger', 'bx-error', 'Unable to get the projects list') + generateToast('danger', 'bx-error', $_("projectsLoadErrorToast")) }) } @@ -68,10 +68,10 @@ // Load the new project peripherals loadPeripherals(projectInfo.PeripheralsInfo) needProjectSave.set(false) - generateToast('info', 'bx-folder-open', 'The project ' + projectInfo.ShowInfo.Name + ' was opened') + generateToast('info', 'bx-folder-open', $_("projectOpenedToast") + ' ' + projectInfo.ShowInfo.Name + '') }).catch((error) => { console.error(`Unable to open the project: ${error}`) - generateToast('danger', 'bx-error', 'Unable to open the project') + generateToast('danger', 'bx-error', $_("projectOpenErrorToast")) }) } @@ -82,7 +82,7 @@ // Remove the saved peripherals ofthe current project unsavePeripherals() $needProjectSave = true - generateToast('info', 'bxs-folder-plus', 'The project was created') + generateToast('info', 'bxs-folder-plus', $_("projectCreatedToast")) }) } diff --git a/frontend/src/lang/en.json b/frontend/src/lang/en.json index a97cb8f..f1c1ee8 100644 --- a/frontend/src/lang/en.json +++ b/frontend/src/lang/en.json @@ -34,5 +34,18 @@ "projectHardwareInputsLabel": "INPUTS", "projectHardwareOutputsLabel": "OUTPUTS", "projectHardwareDeleteTooltip": "Delete this peripheral", - "projectHardwareAddTooltip": "Add this peripheral to project" + "projectHardwareAddTooltip": "Add this peripheral to project", + + "peripheralArrivalToast": "Peripheral inserted:", + "peripheralRemovalToast": "Peripheral removed:", + "projectSavedToast": "The project has been saved", + "projectSaveErrorToast": "Unable to save the project:", + "addPeripheralErrorToast": "Unable to add this peripheral to project", + "removePeripheralErrorToast": "Unable to remove this peripheral from project", + "os2lPeripheralCreatedToast": "Your OS2L peripheral has been created", + "os2lPeripheralCreateErrorToast": "Unable to create the OS2L peripheral", + "projectsLoadErrorToast": "Unable to get the projects list", + "projectOpenedToast": "The project was opened:", + "projectOpenErrorToast": "Unable to open the project", + "projectCreatedToast": "The project was created" } diff --git a/hardware/FTDIFinder.go b/hardware/FTDIFinder.go index 279dad2..4d1fc29 100644 --- a/hardware/FTDIFinder.go +++ b/hardware/FTDIFinder.go @@ -196,7 +196,7 @@ func (f *FTDIFinder) scanPeripherals(ctx context.Context) error { // The program output is like '0:1:2' where 0 is the location, 1 is the S/N and 2 is the name peripheralInfo := strings.Split(peripheralString, ":") - log.Debug().Str("file", "FTDIFinder").Str("peripheralName", peripheralInfo[2]).Str("peripheralSN", peripheralInfo[1]).Msg("new FTDI peripheral detected") + log.Trace().Str("file", "FTDIFinder").Str("scannedString", peripheralString).Str("peripheralName", peripheralInfo[2]).Str("peripheralSN", peripheralInfo[1]).Msg("new FTDI peripheral detected") // Convert the location to an integer location, err := strconv.Atoi(peripheralInfo[0]) if err != nil { @@ -208,16 +208,13 @@ func (f *FTDIFinder) scanPeripherals(ctx context.Context) error { if err != nil { return fmt.Errorf("unable to create the FTDI peripheral: %v", err) } + log.Trace().Any("periph", &peripheral).Str("file", "FTDIFinder").Str("peripheralName", peripheralInfo[2]).Msg("has been created") + ftdiPeripherals[peripheralInfo[1]] = peripheral - log.Trace().Str("file", "FTDIFinder").Str("peripheralName", peripheralInfo[2]).Msg("successfully added the FTDI peripheral to the finder") + log.Trace().Any("periph", ftdiPeripherals).Str("file", "FTDIFinder").Str("peripheralName", peripheralInfo[2]).Msg("successfully added the FTDI peripheral to the finder") } - // Compare with the current peripherals to detect arrivals/removals - removedList, addedList := comparePeripherals(f.peripherals, ftdiPeripherals) - // Emit the events - emitPeripheralsEvents(ctx, removedList, PeripheralRemoval) - log.Info().Str("file", "FTDIFinder").Msg("FTDI remove list emitted to the front") - emitPeripheralsEvents(ctx, addedList, PeripheralArrival) - log.Info().Str("file", "FTDIFinder").Msg("FTDI add list emitted to the front") + // Emit the peripherals changes to the front + emitPeripheralsChanges(ctx, f.peripherals, ftdiPeripherals) // Store the new peripherals list f.peripherals = ftdiPeripherals return nil diff --git a/hardware/MIDIFinder.go b/hardware/MIDIFinder.go index 6116d12..4d7a65e 100644 --- a/hardware/MIDIFinder.go +++ b/hardware/MIDIFinder.go @@ -152,11 +152,11 @@ func (f *MIDIFinder) scanPeripherals(ctx context.Context) error { midiPeripherals[sn] = NewMIDIPeripheral(name, location, sn) } // Compare with the current peripherals to detect arrivals/removals - removedList, addedList := comparePeripherals(f.peripherals, midiPeripherals) + // removedList, addedList := comparePeripherals(f.peripherals, midiPeripherals) // Emit the events - emitPeripheralsEvents(ctx, removedList, PeripheralRemoval) + // emitPeripheralsEvents(ctx, removedList, PeripheralRemoval) log.Info().Str("file", "MIDIFinder").Msg("MIDI remove list emitted to the front") - emitPeripheralsEvents(ctx, addedList, PeripheralArrival) + // emitPeripheralsEvents(ctx, addedList, PeripheralArrival) log.Info().Str("file", "MIDIFinder").Msg("MIDI add list emitted to the front") // Store the new peripherals list f.peripherals = midiPeripherals diff --git a/hardware/hardware.go b/hardware/hardware.go index f77033c..f7aeabf 100644 --- a/hardware/hardware.go +++ b/hardware/hardware.go @@ -129,37 +129,23 @@ func (h *HardwareManager) Stop() error { return nil } -// peripheralsList emits a peripheral event -func emitPeripheralsEvents(ctx context.Context, peripheralsList map[string]Peripheral, peripheralEvent PeripheralEvent) { - for _, peripheral := range peripheralsList { - runtime.EventsEmit(ctx, string(peripheralEvent), peripheral.GetInfo()) - log.Trace().Str("file", "hardware").Str("event", string(peripheralEvent)).Msg("emit peripheral event") - } -} +// emitPeripheralsChanges compares the old and new peripherals to determine which ones have been added or removed. +func emitPeripheralsChanges(ctx context.Context, oldPeripherals map[string]Peripheral, newPeripherals map[string]Peripheral) { + log.Trace().Any("oldList", oldPeripherals).Any("newList", newPeripherals).Msg("emitting peripherals changes to the front") -// comparePeripherals compares the peripherals to determine which has been inserted or removed -func comparePeripherals(oldPeripherals map[string]Peripheral, newPeripherals map[string]Peripheral) (map[string]Peripheral, map[string]Peripheral) { - // Duplicate the lists - oldList := make(map[string]Peripheral) - newList := make(map[string]Peripheral) - - for key, value := range oldPeripherals { - oldList[key] = value - } - log.Trace().Str("file", "hardware").Any("oldList", oldList).Msg("peripheral oldList comparison") - for key, value := range newPeripherals { - newList[key] = value - } - log.Trace().Str("file", "hardware").Any("newList", newList).Msg("peripheral newList comparison") - // Remove in these lists all the commons peripherals - for key := range newList { - if _, exists := oldList[key]; exists { - delete(oldList, key) - delete(newList, key) + // Identify removed peripherals: present in the old list but not in the new list + for oldPeriphName := range oldPeripherals { + if _, exists := newPeripherals[oldPeriphName]; !exists { + runtime.EventsEmit(ctx, string(PeripheralRemoval), oldPeripherals[oldPeriphName].GetInfo()) + log.Trace().Str("file", "hardware").Str("event", string(PeripheralRemoval)).Msg("emit peripheral removal event") + } + } + + // Identify added peripherals: present in the new list but not in the old list + for newPeriphName := range newPeripherals { + if _, exists := oldPeripherals[newPeriphName]; !exists { + runtime.EventsEmit(ctx, string(PeripheralArrival), newPeripherals[newPeriphName].GetInfo()) + log.Trace().Str("file", "hardware").Str("event", string(PeripheralArrival)).Msg("emit peripheral arrival event") } } - // Now the old list contains the removed peripherals, and the new list contains the added peripherals - log.Trace().Str("file", "hardware").Any("oldList", oldList).Msg("peripheral oldList computed") - log.Trace().Str("file", "hardware").Any("newList", newList).Msg("peripheral newList computed") - return oldList, newList } diff --git a/hardware/third-party/ftdi/detectFTDI.cpp b/hardware/third-party/ftdi/detectFTDI.cpp index 691cd48..c1e8722 100644 --- a/hardware/third-party/ftdi/detectFTDI.cpp +++ b/hardware/third-party/ftdi/detectFTDI.cpp @@ -8,6 +8,7 @@ int main() { FT_HANDLE ftHandle = nullptr; FT_DEVICE_LIST_INFO_NODE *devInfo; DWORD numDevs; + // create the device information list ftStatus = FT_CreateDeviceInfoList(&numDevs); if (ftStatus != FT_OK) {