From 45505586b56f267e9d83c7b25681ddd920318a86 Mon Sep 17 00:00:00 2001 From: Benedikt Schirrmeister Date: Sun, 2 Apr 2023 10:13:06 -0400 Subject: [PATCH] Added StartPlayAlbumOrTitle --- AmazonSkill/IntentSchema.json | 13 +++++++ AmazonSkill/Model.json | 69 ++++++++++++++++++++++++++++++++++- radio/radio.go | 29 +++++++++++++++ shared/database.go | 7 ++++ sql/create.sql | 36 ++++++++++++++++++ 5 files changed, 153 insertions(+), 1 deletion(-) diff --git a/AmazonSkill/IntentSchema.json b/AmazonSkill/IntentSchema.json index 3ad748e..1cd4059 100644 --- a/AmazonSkill/IntentSchema.json +++ b/AmazonSkill/IntentSchema.json @@ -9,6 +9,19 @@ ], "intent": "StartPlay" }, + { + "slots": [ + { + "name": "{AlbumOrTitle}", + "type": "SEARCHAlbumOrTitle" + }, + { + "name": "{ArtistName}", + "type": "SEARCHArtistName" + } + ], + "intent": "StartPlayAlbumOrTitle" + }, { "intent": "ResumePlay" }, diff --git a/AmazonSkill/Model.json b/AmazonSkill/Model.json index cd34b68..b6b08ea 100644 --- a/AmazonSkill/Model.json +++ b/AmazonSkill/Model.json @@ -24,6 +24,23 @@ "abspiel {Searching}" ] }, + { + "name": "StartPlayAlbumOrTitle", + "slots": [ + { + "name": "AlbumOrTitle", + "type": "SEARCHAlbumOrTitle" + }, + { + "name": "ArtistName", + "type": "SEARCHArtistName" + } + ], + "samples": [ + "spiele {AlbumOrTitle} von {ArtistName}", + "spiel {AlbumOrTitle} von {ArtistName}" + ] + }, { "name": "ResumePlay", "slots": [], @@ -114,8 +131,58 @@ } } ] + }, + { + "name": "SEARCHAlbumOrTitle", + "values": [ + { + "name": { + "value": "Epica" + } + }, + { + "name": { + "value": "Within Temptaion" + } + }, + { + "name": { + "value": "Origa" + } + }, + { + "name": { + "value": "An Cafe" + } + } + ] + }, + { + "name": "SEARCHArtistName", + "values": [ + { + "name": { + "value": "Epica" + } + }, + { + "name": { + "value": "Within Temptaion" + } + }, + { + "name": { + "value": "Origa" + } + }, + { + "name": { + "value": "An Cafe" + } + } + ] } ] } } -} \ No newline at end of file +} diff --git a/radio/radio.go b/radio/radio.go index 482d0da..daf5ebd 100644 --- a/radio/radio.go +++ b/radio/radio.go @@ -277,6 +277,35 @@ func radioHandler(echoReq *alexa.EchoRequest, echoResp *alexa.EchoResponse) { speech := fmt.Sprintf("%s", card) echoResp.OutputSpeechSSML(speech).Card("Network Music Player", card) } + } + case "StartPlayAlbumOrTitle": + log.Printf("StartPlayAlbumOrTitle intent") + SEARCHAlbumOrTitle := strings.TrimSpace(echoReq.Request.Intent.Slots["AlbumOrTitle"].Value) + SEARCHArtistName := strings.TrimSpace(echoReq.Request.Intent.Slots["ArtistName"].Value) + SearchString := SEARCHAlbumOrTitle + " von " + SEARCHArtistName + log.Println("====>", SearchString) + log.Println("====>", SEARCHAlbumOrTitle, SEARCHArtistName) + + if SearchString != "" { + shared.UpdateActualPlayingAlbumOrTitle(echoReq.Context.System.Device.DeviceId, SEARCHAlbumOrTitle, SEARCHArtistName) + nextTrackID := shared.GetNextTrackID(echoReq.Context.System.Device.DeviceId) + nextFileName := shared.GetTrackFileName(nextTrackID) + + if nextFileName != "" { + directive := makeAudioPlayDirective(nextFileName, false, nextTrackID) + log.Println("URL:", directive.AudioItem.Stream.Url) + + card := fmt.Sprintf(getRandomResponse(responses.Searching), SearchString) // ich such ja schon %s raus + speech := fmt.Sprintf("%s", card) + echoResp.OutputSpeechSSML(speech).Card("Network Music Player", card) + + echoResp.Response.Directives = append(echoResp.Response.Directives, directive) + } else { + card := fmt.Sprintf(getRandomResponse(responses.CantFind), SearchString) // Ich konnte für %s absolut nix finden! + speech := fmt.Sprintf("%s", card) + echoResp.OutputSpeechSSML(speech).Card("Network Music Player", card) + } + } else { goto AskUser } diff --git a/shared/database.go b/shared/database.go index 489a02d..f332d90 100644 --- a/shared/database.go +++ b/shared/database.go @@ -173,6 +173,13 @@ func UpdateActualPlaying(deviceID, searching string) { } } +func UpdateActualPlayingAlbumOrTitle(deviceID, searchAlbumOrTitle string, searchArtist string) { + _, err := Database.Exec("CALL spUpdateActualPlayingAlbumOrTitle(?,?,?);", deviceID, searchAlbumOrTitle, searchArtist) + if err != nil { + log.Println("DB Error UpdateActualPlayingAlbumOrTitle:", err) + } +} + func GetNextTrackID(deviceID string) (TrackID int) { isRandom := 0 diff --git a/sql/create.sql b/sql/create.sql index 79f0917..83b5c11 100644 --- a/sql/create.sql +++ b/sql/create.sql @@ -239,6 +239,42 @@ BEGIN END// DELIMITER ; +-- Exportiere Struktur von Prozedur spUpdateActualPlayingAlbumOrTitle +DROP PROCEDURE IF EXISTS `spUpdateActualPlayingAlbumOrTitle`; +DELIMITER // +CREATE PROCEDURE `spUpdateActualPlayingAlbumOrTitle`( + IN `deviceid` VARCHAR(250), + IN `searchAlbumOrTitle` VARCHAR(500), + IN `searchArtist` VARCHAR(500) + +) + READS SQL DATA +BEGIN + IF (SELECT 1 = 1 FROM DeVice WHERE DV_id = deviceid) THEN + BEGIN + SET searchAlbumOrTitle = CONCAT('%', searchAlbumOrTitle, '%'); + SET searchArtist = CONCAT('%', searchArtist, '%'); + DELETE FROM ActualPlaying WHERE AP_DV_id = deviceid; + + DROP TABLE IF EXISTS tmppl; + CREATE TEMPORARY TABLE tmppl (`tmp_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `tmp_TKid` INT(10) UNSIGNED NOT NULL, PRIMARY KEY (`tmp_id`)); + + INSERT INTO tmppl + SELECT null, TracK.TK_id + FROM TracK + LEFT JOIN ArtisT ON TK_AT_id = AT_id + LEFT JOIN AlbuM ON TK_AM_id = AM_id + WHERE TK_Name LIKE searchArtist OR TK_Comment LIKE searchAlbumOrTitle OR AT_Name LIKE searchAlbumOrTitle OR AM_Name LIKE searchAlbumOrTitle + ORDER BY AT_id, AM_Index, AM_id, TK_Index, TK_id; + + INSERT INTO ActualPlaying + SELECT deviceid, tmppl.tmp_TKid, tmppl.tmp_id, 0 FROM tmppl; + END; + END IF; +END// +DELIMITER ; + + -- Exportiere Struktur von Tabelle TracK DROP TABLE IF EXISTS `TracK`; CREATE TABLE IF NOT EXISTS `TracK` (