about summary refs log tree commit diff stats
path: root/cadence.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cadence.cpp')
-rw-r--r--cadence.cpp58
1 files changed, 14 insertions, 44 deletions
diff --git a/cadence.cpp b/cadence.cpp index 80e4a05..704f946 100644 --- a/cadence.cpp +++ b/cadence.cpp
@@ -10,7 +10,8 @@
10#include <thread> 10#include <thread>
11#include <random> 11#include <random>
12#include <list> 12#include <list>
13#include "util.h" 13#include <hkutil/string.h>
14#include <hkutil/database.h>
14 15
15const std::vector<std::string> moods = {"party", "chill", "crazy", "happy", "sad", "instrumental", "vocal"}; 16const std::vector<std::string> moods = {"party", "chill", "crazy", "happy", "sad", "instrumental", "vocal"};
16 17
@@ -72,19 +73,9 @@ int main(int argc, char** argv)
72 std::mt19937 random_engine{random_device()}; 73 std::mt19937 random_engine{random_device()};
73 74
74 // Connect to the AcousticBrainz data file. 75 // Connect to the AcousticBrainz data file.
75 sqlite3* ppdb = nullptr; 76 hatkirby::database abdb(
76 77 config["acoustic_datafile"].as<std::string>(),
77 if (sqlite3_open_v2(config["acoustic_datafile"].as<std::string>().c_str(), &ppdb, SQLITE_OPEN_READONLY, NULL) != SQLITE_OK) 78 hatkirby::dbmode::read);
78 {
79 // We still have to free the resources allocated. In the event that
80 // allocation failed, ppdb will be null and sqlite3_close_v2 will just
81 // ignore it.
82 sqlite3_close_v2(ppdb);
83
84 std::cout << "Could not open acoustic datafile." << std::endl;
85
86 return 1;
87 }
88 79
89 for (;;) 80 for (;;)
90 { 81 {
@@ -92,36 +83,15 @@ int main(int argc, char** argv)
92 83
93 std::string mood = moods[std::uniform_int_distribution<int>(0, moods.size()-1)(random_engine)]; 84 std::string mood = moods[std::uniform_int_distribution<int>(0, moods.size()-1)(random_engine)];
94 85
95 std::string songTitle; 86 hatkirby::row song =
96 std::string songArtist; 87 abdb.queryFirst(
97 88 "SELECT title, artist FROM songs WHERE category = ? ORDER BY RANDOM() LIMIT 1",
98 sqlite3_stmt* ppstmt; 89 { mood });
99 std::string query = "SELECT title, artist FROM songs WHERE category = ? ORDER BY RANDOM() LIMIT 1";
100
101 if (sqlite3_prepare_v2(ppdb, query.c_str(), query.length(), &ppstmt, NULL) != SQLITE_OK)
102 {
103 std::cout << "Error reading from acoustic datafile:" << std::endl;
104 std::cout << sqlite3_errmsg(ppdb) << std::endl;
105
106 return 1;
107 }
108
109 sqlite3_bind_text(ppstmt, 1, mood.c_str(), mood.length(), SQLITE_TRANSIENT);
110
111 if (sqlite3_step(ppstmt) == SQLITE_ROW)
112 {
113 songTitle = reinterpret_cast<const char*>(sqlite3_column_blob(ppstmt, 0));
114 songArtist = reinterpret_cast<const char*>(sqlite3_column_blob(ppstmt, 1));
115 } else {
116 std::cout << "Error reading from acoustic datafile:" << std::endl;
117 std::cout << sqlite3_errmsg(ppdb) << std::endl;
118
119 return 1;
120 }
121 90
122 sqlite3_finalize(ppstmt); 91 std::string songTitle = mpark::get<std::string>(song[0]);
92 std::string songArtist = mpark::get<std::string>(song[1]);
123 93
124 std::string action = "{" + cadence::uppercase(mood) + "}"; 94 std::string action = "{" + hatkirby::uppercase(mood) + "}";
125 int tknloc; 95 int tknloc;
126 while ((tknloc = action.find("{")) != std::string::npos) 96 while ((tknloc = action.find("{")) != std::string::npos)
127 { 97 {
@@ -182,13 +152,13 @@ int main(int argc, char** argv)
182 }); 152 });
183 } else if (isupper(token[0]) && !isupper(token[1])) 153 } else if (isupper(token[0]) && !isupper(token[1]))
184 { 154 {
185 auto words = cadence::split<std::list<std::string>>(result, " "); 155 auto words = hatkirby::split<std::list<std::string>>(result, " ");
186 for (auto& word : words) 156 for (auto& word : words)
187 { 157 {
188 word[0] = std::toupper(word[0]); 158 word[0] = std::toupper(word[0]);
189 } 159 }
190 160
191 finalresult = cadence::implode(std::begin(words), std::end(words), " "); 161 finalresult = hatkirby::implode(std::begin(words), std::end(words), " ");
192 } else { 162 } else {
193 finalresult = result; 163 finalresult = result;
194 } 164 }