diff --git a/kirigami-icons.qrc b/kirigami-icons.qrc
index ac771c8..9514941 100644
--- a/kirigami-icons.qrc
+++ b/kirigami-icons.qrc
@@ -1,91 +1,91 @@
3rdparty/breeze-icons/icons/index.theme
3rdparty/breeze-icons/icons/actions/22/application-menu.svg
3rdparty/breeze-icons/icons/actions/22/document-decrypt.svg
3rdparty/breeze-icons/icons/actions/22/contact-new.svg
3rdparty/breeze-icons/icons/actions/22/dialog-close.svg
3rdparty/breeze-icons/icons/actions/22/folder-sync.svg
3rdparty/breeze-icons/icons/actions/22/go-next.svg
3rdparty/breeze-icons/icons/actions/22/go-previous.svg
3rdparty/breeze-icons/icons/actions/22/go-up.svg
3rdparty/breeze-icons/icons/actions/22/go-down.svg
3rdparty/breeze-icons/icons/actions/22/handle-left.svg
3rdparty/breeze-icons/icons/actions/22/handle-right.svg
3rdparty/breeze-icons/icons/actions/22/help-about.svg
3rdparty/breeze-icons/icons/actions/22/mail-invitation.svg
3rdparty/breeze-icons/icons/actions/22/overflow-menu.svg
3rdparty/breeze-icons/icons/actions/22/system-shutdown.svg
3rdparty/breeze-icons/icons/actions/22/view-list-icons.svg
3rdparty/breeze-icons/icons/actions/22/go-parent-folder.svg
3rdparty/breeze-icons/icons/places/22/folder.svg
3rdparty/breeze-icons/icons/mimetypes/22/text-x-plain.svg
3rdparty/breeze-icons/icons/actions/22/tab-close.svg
3rdparty/breeze-icons/icons/actions/22/password-show-on.svg
3rdparty/breeze-icons/icons/actions/22/password-show-off.svg
3rdparty/breeze-icons/icons/actions/22/settings-configure.svg
3rdparty/breeze-icons/icons/actions/22/lock.svg
3rdparty/breeze-icons/icons/actions/22/view-barcode.svg
3rdparty/breeze-icons/icons/actions/22/player-volume.svg
3rdparty/breeze-icons/icons/actions/22/im-user-online.svg
3rdparty/breeze-icons/icons/actions/22/im-user-away.svg
3rdparty/breeze-icons/icons/actions/22/im-kick-user.svg
3rdparty/breeze-icons/icons/actions/22/im-ban-kick-user.svg
3rdparty/breeze-icons/icons/actions/22/im-user-offline.svg
3rdparty/breeze-icons/icons/actions/22/im-invisible-user.svg
3rdparty/breeze-icons/icons/actions/22/user-identity.svg
3rdparty/breeze-icons/icons/actions/22/edit-rename.svg
3rdparty/breeze-icons/icons/actions/22/delete.svg
3rdparty/breeze-icons/icons/actions/22/dialog-cancel.svg
- 3rdparty/breeze-icons/icons/actions/22/dialog-ok-apply.svg
+ 3rdparty/breeze-icons/icons/actions/22/dialog-ok.svg
3rdparty/breeze-icons/icons/actions/22/media-record.svg
3rdparty/breeze-icons/icons/actions/22/media-playback-stop.svg
3rdparty/breeze-icons/icons/emotes/22/face-smile.svg
3rdparty/breeze-icons/icons/actions/16/document-send.svg
3rdparty/breeze-icons/icons/actions/16/search.svg
3rdparty/breeze-icons/icons/actions/16/gps.svg
3rdparty/breeze-icons/icons/actions/symbolic/document-send-symbolic.svg
3rdparty/breeze-icons/icons/actions/symbolic/go-next-symbolic.svg
3rdparty/breeze-icons/icons/actions/symbolic/go-previous-symbolic.svg
3rdparty/breeze-icons/icons/actions/symbolic/edit-symbolic.svg
3rdparty/breeze-icons/icons/applets/22/microphone.svg
3rdparty/breeze-icons/icons/devices/symbolic/camera-photo-symbolic.svg
3rdparty/breeze-icons/icons/devices/symbolic/camera-video-symbolic.svg
3rdparty/breeze-icons/icons/mimetypes/64/image-jpeg.svg
3rdparty/breeze-icons/icons/mimetypes/64/video-mp4.svg
3rdparty/breeze-icons/icons/mimetypes/64/x-office-document.svg
3rdparty/breeze-icons/icons/mimetypes/64/audio-mp3.svg
3rdparty/breeze-icons/icons/mimetypes/64/video-x-generic.svg
3rdparty/breeze-icons/icons/mimetypes/64/application-octet-stream.svg
3rdparty/breeze-icons/icons/mimetypes/22/text-x-plain.svg
3rdparty/breeze-icons/icons/mimetypes/22/application-octet-stream.svg
3rdparty/breeze-icons/icons/status/symbolic/audio-volume-muted-symbolic.svg
diff --git a/src/qml/elements/NewMedia.qml b/src/qml/elements/NewMedia.qml
index c5ee00f..917cbeb 100644
--- a/src/qml/elements/NewMedia.qml
+++ b/src/qml/elements/NewMedia.qml
@@ -1,226 +1,226 @@
/*
* Kaidan - A user-friendly XMPP client for every device!
*
* Copyright (C) 2016-2020 Kaidan developers and contributors
* (see the LICENSE file for a full list of copyright authors)
*
* Kaidan is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* In addition, as a special exception, the author of Kaidan gives
* permission to link the code of its release with the OpenSSL
* project's "OpenSSL" library (or with modified versions of it that
* use the same license as the "OpenSSL" library), and distribute the
* linked executables. You must obey the GNU General Public License in
* all respects for all of the code used other than "OpenSSL". If you
* modify this file, you may extend this exception to your version of
* the file, but you are not obligated to do so. If you do not wish to
* do so, delete this exception statement from your version.
*
* Kaidan is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Kaidan. If not, see .
*/
/**
* This element is used in the @see SendMediaSheet to share information about a new media (picture, audio and video) to
* the user. It just displays the camera image in a rectangle.
*/
import QtQuick 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12 as Controls
import QtMultimedia 5.12 as Multimedia
import org.kde.kirigami 2.8 as Kirigami
import im.kaidan.kaidan 1.0
import MediaUtils 0.1
MediaPreview {
id: root
readonly property bool isNewImage: mediaSourceType === Enums.MessageType.MessageImage
readonly property bool isNewAudio: mediaSourceType === Enums.MessageType.MessageAudio
readonly property bool isNewVideo: mediaSourceType === Enums.MessageType.MessageVideo
Layout.preferredHeight: Kirigami.Units.gridUnit * 14
Layout.preferredWidth: Kirigami.Units.gridUnit * 14
Layout.maximumWidth: -1
MediaRecorder {
id: recorder
type: {
switch (root.mediaSourceType) {
case Enums.MessageType.MessageUnknown:
case Enums.MessageType.MessageText:
case Enums.MessageType.MessageFile:
case Enums.MessageType.MessageDocument:
case Enums.MessageType.MessageGeoLocation:
return MediaRecorder.Type.Invalid
case Enums.MessageType.MessageImage:
return MediaRecorder.Type.Image
case Enums.MessageType.MessageAudio:
return MediaRecorder.Type.Audio
case Enums.MessageType.MessageVideo:
return MediaRecorder.Type.Video
}
}
}
ColumnLayout {
anchors {
fill: parent
}
Multimedia.VideoOutput {
source: recorder
focus : visible // to receive focus and capture key events when visible
visible: !previewLoader.visible
Layout.fillWidth: true
Layout.fillHeight: true
Controls.RoundButton {
display: Controls.AbstractButton.IconOnly
checkable: root.isNewVideo
width: parent.width * .2
height: width
enabled: {
return recorder.isReady ||
(recorder.status >= MediaRecorder.Status.StartingStatus
&& recorder.status <= MediaRecorder.Status.FinalizingStatus)
}
icon {
width: parent.width
height: width
name: pressed || checked ? 'media-playback-stop' : 'media-record'
}
anchors {
horizontalCenter: parent.horizontalCenter
bottom: parent.bottom
bottomMargin: -(height / 4)
}
onCheckedChanged: {
if (checked) {
recorder.record()
} else {
recorder.stop()
}
}
onClicked: {
if (root.isNewImage) {
recorder.record()
}
}
onPressAndHold: {
if (root.isNewAudio) {
recorder.record()
}
}
onReleased: {
if (root.isNewAudio) {
recorder.stop()
}
}
}
Controls.Label {
horizontalAlignment: Controls.Label.AlignRight
text: {
if (root.isNewImage) {
return recorder.isReady ? qsTr('Ready') : qsTr('Initializing...')
}
switch (recorder.status) {
case MediaRecorder.Status.UnavailableStatus:
return qsTr('Unavailable')
case MediaRecorder.Status.UnloadedStatus:
case MediaRecorder.Status.LoadingStatus:
case MediaRecorder.Status.LoadedStatus:
return recorder.isReady ? qsTr('Ready') : qsTr('Initializing...')
case MediaRecorder.Status.StartingStatus:
case MediaRecorder.Status.RecordingStatus:
case MediaRecorder.Status.FinalizingStatus:
return qsTr('Recording... %1').arg(MediaUtilsInstance.prettyDuration(recorder.duration))
case MediaRecorder.Status.PausedStatus:
return qsTr('Paused %1').arg(MediaUtilsInstance.prettyDuration(recorder.duration))
}
}
anchors {
left: parent.left
right: parent.right
bottom: parent.bottom
}
}
}
MediaPreviewLoader {
id: previewLoader
mediaSource: recorder.actualLocation
mediaSourceType: root.mediaSourceType
showOpenButton: root.showOpenButton
message: root.message
mediaSheet: root.mediaSheet
visible: mediaSource != '' && recorder.isReady
Layout.fillHeight: true
Layout.fillWidth: true
RowLayout {
visible: root.mediaSource == ''
z: 1
anchors {
left: parent.left
top: parent.top
right: parent.right
}
Controls.ToolButton {
icon.name: 'dialog-cancel'
onClicked: {
recorder.cancel()
}
}
Item {
Layout.fillWidth: true
}
Controls.ToolButton {
- icon.name: 'dialog-ok-apply'
+ icon.name: 'dialog-ok'
onClicked: {
root.mediaSource = previewLoader.mediaSource
}
}
}
}
}
Connections {
target: root.mediaSheet
enabled: target
onRejected: {
recorder.cancel()
}
}
}