From 6b4867953756cd851935efe7c10d0cd5a2a0162d Mon Sep 17 00:00:00 2001 From: NeilClack Date: Thu, 18 Jun 2026 08:02:21 -0500 Subject: [PATCH] Add database logic --- internal/page/AudioOptions.go | 51 ++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/internal/page/AudioOptions.go b/internal/page/AudioOptions.go index 018a793..e6c218c 100644 --- a/internal/page/AudioOptions.go +++ b/internal/page/AudioOptions.go @@ -1,13 +1,16 @@ package page import ( + "errors" "fmt" "math" + "path/filepath" "strings" "github.com/go-gl/gl/v3.3-core/gl" "github.com/go-gl/mathgl/mgl32" "github.com/veandco/go-sdl2/sdl" + "gorm.io/gorm" "rhemawavetech.com/rhemawave/internal/colors" "rhemawavetech.com/rhemawave/internal/db" "rhemawavetech.com/rhemawave/internal/fontManager" @@ -17,20 +20,20 @@ import ( ) var AudioFileList = []db.AudioFile{ - {ID: 1, Name: "174 Hz", Path: "174Hz.wav", Selected: false}, - {ID: 2, Name: "396 Hz", Path: "396Hz.wav", Selected: false}, - {ID: 3, Name: "417 Hz", Path: "417Hz.wav", Selected: false}, - {ID: 4, Name: "432 Hz", Path: "432Hz.wav", Selected: false}, - {ID: 5, Name: "639 Hz", Path: "639Hz.wav", Selected: false}, - {ID: 6, Name: "741 Hz", Path: "741Hz.wav", Selected: false}, - {ID: 7, Name: "852 Hz", Path: "852Hz.wav", Selected: false}, - {ID: 8, Name: "963 Hz", Path: "963Hz.wav", Selected: false}, - {ID: 9, Name: "1111 Hz", Path: "1111Hz.wav", Selected: false}, - {ID: 10, Name: "14 Hz Binaural Beat", Path: "14Hz_Binaural.wav", Selected: false}, - {ID: 11, Name: "40 Hz Binaural Beat", Path: "40Hz_Binaural.wav", Selected: false}, - {ID: 12, Name: "Alpha Waves", Path: "AlphaWaves.wav", Selected: false}, - {ID: 13, Name: "Pineal Gland", Path: "PinealGland.wav", Selected: false}, - {ID: 14, Name: "Original Audio", Path: "OriginalAudio.wav", Selected: false}, + {ID: 14, Name: "Original Audio", Path: "OriginalAudio.wav", Selected: false, Order: 1}, + {ID: 1, Name: "174 Hz", Path: "174Hz.wav", Selected: false, Order: 2}, + {ID: 2, Name: "396 Hz", Path: "396Hz.wav", Selected: false, Order: 3}, + {ID: 3, Name: "417 Hz", Path: "417Hz.wav", Selected: false, Order: 4}, + {ID: 4, Name: "432 Hz", Path: "432Hz.wav", Selected: false, Order: 5}, + {ID: 5, Name: "639 Hz", Path: "639Hz.wav", Selected: false, Order: 6}, + {ID: 6, Name: "741 Hz", Path: "741Hz.wav", Selected: false, Order: 7}, + {ID: 7, Name: "852 Hz", Path: "852Hz.wav", Selected: false, Order: 8}, + {ID: 8, Name: "963 Hz", Path: "963Hz.wav", Selected: false, Order: 9}, + {ID: 9, Name: "1111 Hz", Path: "1111Hz.wav", Selected: false, Order: 10}, + {ID: 10, Name: "14 Hz Binaural Beat", Path: "14Hz_Binaural.wav", Selected: false, Order: 11}, + {ID: 11, Name: "40 Hz Binaural Beat", Path: "40Hz_Binaural.wav", Selected: false, Order: 12}, + {ID: 12, Name: "Alpha Waves", Path: "AlphaWaves.wav", Selected: false, Order: 13}, + {ID: 13, Name: "Pineal Gland", Path: "PinealGland.wav", Selected: false, Order: 14}, } const ( @@ -207,6 +210,7 @@ func (p *AudioOptions) buildTrackItems() error { if len(audioFileList) == 0 { audioFileList = AudioFileList + p.Context.DbPtr.Save(&audioFileList) } for i := range p.trackItems { @@ -476,11 +480,26 @@ func (p *AudioOptions) onTrackSelected(index int, entry db.AudioFile) { p.layout() // Create file names and paths - // Set Selected + // Set newly selected entry as Selected entry.Selected = true // Set path if !strings.Contains(entry.Path, ".local/") { - entry.Path = p.Context.CfgPtr.AssetsDir + "audio" + entry.Path + entry.Path = filepath.Join(p.Context.CfgPtr.AssetsDir, "audio/", entry.Path) + } + // Clear previously selected. + var previouslySelectedAudio db.AudioFile + if err := p.Context.DbPtr.Where("Selected = ?", true).First(&previouslySelectedAudio).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + logger.Info("No audio previously selected") + } else { + logger.Error("Unable to fetch previously selected audio from database %s", err) + } + } else { + previouslySelectedAudio.Selected = false + if err = p.Context.DbPtr.Save(&previouslySelectedAudio).Error; err != nil { + logger.Error("Unable to update selected audio: %v", err) + return + } } // Save it to the database if err := p.Context.DbPtr.Save(&entry).Error; err != nil {