diff --git a/server/boot/db.js b/server/boot/db.js
index 9683a0e..64f8640 100644
--- a/server/boot/db.js
+++ b/server/boot/db.js
@@ -59,7 +59,7 @@ module.exports = function () {
} else {
const userVersion = row.user_version
- if (userVersion === 0) {
+ if (userVersion < 1) {
db.run('ALTER TABLE samples ADD COLUMN fade_in REAL DEFAULT 0')
db.run('ALTER TABLE samples ADD COLUMN loop_points_enabled INTEGER DEFAULT 0')
db.run('ALTER TABLE samples ADD COLUMN loop_start REAL DEFAULT 0')
@@ -67,6 +67,12 @@ module.exports = function () {
db.run('PRAGMA user_version = 1')
}
+
+ if (userVersion < 2) {
+ db.run('ALTER TABLE users ADD COLUMN preferences TEXT DEFAULT "{}"')
+
+ db.run('PRAGMA user_version = 2')
+ }
}
})
})
diff --git a/server/routes/users.js b/server/routes/users.js
index a13029b..7bb8e00 100644
--- a/server/routes/users.js
+++ b/server/routes/users.js
@@ -9,7 +9,11 @@ router.get('/users/current', (req, res) => {
return res.sendStatus(401)
}
- db.get('SELECT is_admin as isAdmin, dark_mode as darkMode, can_upload as canUpload, * FROM users WHERE id = ?', [req.user.id], (err, row) => {
+ db.get(`SELECT
+ is_admin as isAdmin,
+ dark_mode as darkMode,
+ can_upload as canUpload,
+ * FROM users WHERE id = ?`, [req.user.id], (err, row) => {
if (err) {
logger.error(err)
return res.sendStatus(500)
@@ -24,6 +28,7 @@ router.get('/users/current', (req, res) => {
user.isAdmin = row.isAdmin === 1
user.darkMode = row.darkMode === 1
user.canUpload = row.canUpload === 1
+ user.preferences = JSON.parse(row.preferences)
}
res.json({ user: user })
@@ -287,4 +292,23 @@ router.delete('/users/:userId', (req, res) => {
})
})
+router.patch('/users/preferences', (req, res) => {
+ if (!req.user) {
+ return res.sendStatus(401)
+ }
+
+ const preferences = JSON.stringify(req.body.preferences)
+
+ db.serialize(() => {
+ db.run('UPDATE users SET preferences = ? WHERE id = ?', [preferences, req.user.id], (err) => {
+ if (err) {
+ logger.error(err)
+ return res.sendStatus(500)
+ } else {
+ return res.sendStatus(200)
+ }
+ })
+ })
+})
+
module.exports = router
diff --git a/src/components/AccountPage.vue b/src/components/AccountPage.vue
index e43407a..9b0e3c9 100644
--- a/src/components/AccountPage.vue
+++ b/src/components/AccountPage.vue
@@ -8,6 +8,10 @@
+
+ User Management
+
+
ID: {{ currentUser.id }}
@@ -26,7 +30,7 @@
>
+
+ Preferences
+
+
+
+ Dark Mode
+
+
+
+ Accent Color
+
+
+
+
+
+ Apply
+
+
{
if (response.status === 200) {
this.currentUser = response.data.user
+ this.accentColor = this.currentUser.preferences.accentColor
}
})
},
@@ -45,6 +47,14 @@ export default {
this.$http.patch('/users/dark-mode', {
darkMode: this.$vuetify.theme.dark
})
+ },
+ updateAccentColor () {
+ const preferences = { accentColor: this.accentColor }
+ this.$http.patch('/users/preferences', {
+ preferences: preferences
+ })
+ this.$vuetify.theme.themes.dark.primary = this.accentColor
+ this.$vuetify.theme.themes.light.primary = this.accentColor
}
}
}
diff --git a/src/components/appbar.js b/src/components/appbar.js
index f4f5929..fc7779c 100644
--- a/src/components/appbar.js
+++ b/src/components/appbar.js
@@ -6,6 +6,9 @@ export default {
isAdmin: false,
loggedIn: false
}),
+ created () {
+ this.getUserPreferences()
+ },
methods: {
home () {
this.$router.push('/')
@@ -24,7 +27,7 @@ export default {
}
})
},
- getCurrentUser () {
+ checkForAdmin () {
this.loggedIn = false
this.drawyer = true
this.$http.get('/users/current')
@@ -32,12 +35,21 @@ export default {
if (response.status === 200) {
this.loggedIn = true
this.isAdmin = response.data.user.isAdmin
- this.$vuetify.theme.dark = response.data.user.darkMode
}
})
.catch(() => {
this.isAdmin = false
})
+ },
+ getUserPreferences () {
+ this.$http.get('/users/current')
+ .then(response => {
+ if (response.status === 200) {
+ const preferences = response.data.user.preferences
+ this.$vuetify.theme.themes.dark.primary = preferences.accentColor
+ this.$vuetify.theme.themes.light.primary = preferences.accentColor
+ }
+ })
}
}
}
diff --git a/src/components/noise.js b/src/components/noise.js
index 5d152d6..6ae6cac 100644
--- a/src/components/noise.js
+++ b/src/components/noise.js
@@ -489,6 +489,9 @@ export default {
if (response.status === 200) {
this.canUpload = response.data.user.canUpload
this.$vuetify.theme.dark = response.data.user.darkMode
+ const preferences = response.data.user.preferences
+ this.$vuetify.theme.themes.dark.primary = preferences.accentColor
+ this.$vuetify.theme.themes.light.primary = preferences.accentColor
}
})
},
diff --git a/src/plugins/vuetify.js b/src/plugins/vuetify.js
index 29ef87a..01edd6a 100644
--- a/src/plugins/vuetify.js
+++ b/src/plugins/vuetify.js
@@ -1,5 +1,5 @@
import Vue from 'vue'
-import Vuetify from 'vuetify/lib/framework'
+import Vuetify from 'vuetify/lib'
import colors from 'vuetify/lib/util/colors'