diff --git a/src/assets/pulse-multiple.svg b/src/assets/pulse-multiple.svg
new file mode 100644
index 0000000..c487732
--- /dev/null
+++ b/src/assets/pulse-multiple.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qml/presenter/LoadingSpinner.qml b/src/qml/presenter/LoadingSpinner.qml
new file mode 100644
index 0000000..a59b867
--- /dev/null
+++ b/src/qml/presenter/LoadingSpinner.qml
@@ -0,0 +1,80 @@
+import QtQuick 2.15
+import QtQuick.Controls 2.15 as Controls
+import QtQuick.Layouts 1.15
+import QtGraphicalEffects 1.15
+import org.kde.kirigami 2.13 as Kirigami
+import "./" as Presenter
+
+Controls.BusyIndicator {
+ id: root
+ property color color
+ visible: true
+
+ contentItem: Item {
+ implicitWidth: 64
+ implicitHeight: 64
+
+ Item {
+ id: item
+ x: parent.width / 2 - 32
+ y: parent.height / 2 - 32
+ width: 64
+ height: 64
+ opacity: root.running ? 1 : 0
+
+ Behavior on opacity {
+ OpacityAnimator {
+ duration: 250
+ }
+ }
+
+ Repeater {
+ id: repeater
+ model: 1
+
+ Rectangle {
+ id: delegate
+ required property int index
+
+ x: item.width / 2 - width / 2
+ y: item.height / 2 - height / 2
+ implicitWidth: root.width
+ implicitHeight: root.width
+ radius: 500
+ color: root.color
+ opacity: delegate.scale
+ /* visible: root.visible */
+
+ /* Text { */
+ /* text: delegate.scale + " & " + delegate.opacity */
+ /* } */
+
+ PropertyAnimation {
+ target: delegate
+ property: "scale"
+ running: root.visible && root.running
+ from: 0
+ to: 1
+ loops: Animation.Infinite
+ duration: 500 * index
+ easing.type: Easing.OutInExpo
+ easing.amplitude: 2.0
+ }
+
+
+ /* transform: [ */
+ /* Translate { */
+ /* y: -Math.min(item.width, item.height) * 0.5 */
+ /* x: index */
+ /* }, */
+ /* Rotation { */
+ /* angle: delegate.index / repeater.count * 360 */
+ /* origin.x: 5 */
+ /* origin.y: 5 */
+ /* } */
+ /* ] */
+ }
+ }
+ }
+ }
+}
diff --git a/src/qml/presenter/PreviewSlide.qml b/src/qml/presenter/PreviewSlide.qml
index 9b1beda..8e543d2 100644
--- a/src/qml/presenter/PreviewSlide.qml
+++ b/src/qml/presenter/PreviewSlide.qml
@@ -42,6 +42,13 @@ Item {
currentFrame: pdfIndex
}
+ Presenter.LoadingSpinner {
+ id: loadingSpinner
+ color: Kirigami.Theme.highlightColor
+ running: true
+ anchors.fill: parent
+ }
+
FastBlur {
id: imageBlue
anchors.fill: parent
diff --git a/src/resources.qrc b/src/resources.qrc
index db3661a..ad8a5fb 100644
--- a/src/resources.qrc
+++ b/src/resources.qrc
@@ -26,7 +26,9 @@
qml/presenter/RangedSlider.qml
qml/presenter/NewVideo.qml
qml/presenter/TextBackground.qml
+ qml/presenter/LoadingSpinner.qml
assets/parallel.jpg
assets/black.jpg
+ assets/pulse-multiple.svg
diff --git a/src/rust/slide_model.rs b/src/rust/slide_model.rs
index adcd3bf..9499967 100644
--- a/src/rust/slide_model.rs
+++ b/src/rust/slide_model.rs
@@ -331,7 +331,6 @@ impl slide_model::SlideModel {
screenshot.to_str().unwrap()
).insert(0, &QString::from("file://")).to_owned();
slide.video_thumbnail = screenshot_string;
- // let runtime = tokio::runtime::Runtime::new().unwrap();
std::thread::spawn(move || {
let result = ffmpeg::bg_from_video(&path, &screenshot);
match result {