diff --git a/Cargo.toml b/Cargo.toml
index 9ee79bb..73e529b 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -7,6 +7,7 @@ edition = "2018"
anyhow = "1.0.33"
diesel = { version = "1.4.5", features = ["sqlite"] }
diesel_migrations = "1.4.0"
+fragile = "1.0.0"
futures = "0.3.6"
futures-channel = "0.3.5"
gettext-rs = "0.5.0"
@@ -14,6 +15,8 @@ gio = "0.9.1"
glib = "0.10.2"
gtk = { version = "0.9.2", features = ["v3_24"] }
gtk-macros = "0.2.0"
+gstreamer = "0.16.4"
+gstreamer-player = "0.16.3"
libhandy = "0.7.0"
pango = "0.9.1"
rand = "0.7.3"
diff --git a/meson.build b/meson.build
index c9281cd..0c4ba05 100644
--- a/meson.build
+++ b/meson.build
@@ -6,6 +6,7 @@ project('musicus', 'rust',
dependency('glib-2.0', version: '>= 2.56')
dependency('gio-2.0', version: '>= 2.56')
+dependency('gstreamer-1.0', version: '>= 1.12')
dependency('gtk+-3.0', version: '>= 3.24.7')
dependency('libhandy-1', version: '>= 1.0.0')
dependency('pango', version: '>= 1.0')
diff --git a/res/musicus.gresource.xml b/res/musicus.gresource.xml
index 6b77e61..b446cce 100644
--- a/res/musicus.gresource.xml
+++ b/res/musicus.gresource.xml
@@ -12,6 +12,7 @@
ui/person_list.ui
ui/person_screen.ui
ui/person_selector.ui
+ ui/player_bar.ui
ui/poe_list.ui
ui/preferences.ui
ui/recording_editor.ui
diff --git a/res/ui/player_bar.ui b/res/ui/player_bar.ui
new file mode 100644
index 0000000..1fe2112
--- /dev/null
+++ b/res/ui/player_bar.ui
@@ -0,0 +1,230 @@
+
+
+
+
+
+
+
diff --git a/res/ui/recording_screen.ui b/res/ui/recording_screen.ui
index 782bd98..eaac798 100644
--- a/res/ui/recording_screen.ui
+++ b/res/ui/recording_screen.ui
@@ -122,6 +122,23 @@
1
+
+
+ Add to playlist
+ True
+ True
+ True
+ end
+
+
+
+ False
+ True
+ 2
+
+
diff --git a/res/ui/window.ui b/res/ui/window.ui
index ca4574f..3bf0610 100644
--- a/res/ui/window.ui
+++ b/res/ui/window.ui
@@ -26,9 +26,9 @@
False
center
center
+ 18
vertical
18
- 18
True
@@ -230,78 +230,90 @@
-
+
True
False
+ vertical
-
-
-
- True
- False
- vertical
-
-
-
- False
+ True
+ True
+ 0
diff --git a/src/backend.rs b/src/backend.rs
index ffa3472..09a9cb1 100644
--- a/src/backend.rs
+++ b/src/backend.rs
@@ -1,4 +1,5 @@
use super::database::*;
+use crate::player::*;
use anyhow::{anyhow, Result};
use futures_channel::oneshot::Sender;
use futures_channel::{mpsc, oneshot};
@@ -50,6 +51,7 @@ pub struct Backend {
action_sender: RefCell