diff --git a/harbour-fernschreiber.pro b/harbour-fernschreiber.pro
index 0a2d286..e751b6f 100644
--- a/harbour-fernschreiber.pro
+++ b/harbour-fernschreiber.pro
@@ -20,6 +20,7 @@ SOURCES += src/harbour-fernschreiber.cpp \
src/tdlibwrapper.cpp
DISTFILES += qml/harbour-fernschreiber.qml \
+ qml/js/functions.js \
qml/pages/CoverPage.qml \
qml/pages/InitializationPage.qml \
qml/pages/OverviewPage.qml \
diff --git a/qml/components/ImageThumbnail.qml b/qml/components/ImageThumbnail.qml
deleted file mode 100644
index 1671b54..0000000
--- a/qml/components/ImageThumbnail.qml
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- Copyright (C) 2020 Sebastian J. Wolf
-
- This file is part of Fernschreiber.
-
- Fernschreiber 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.
-
- Fernschreiber 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 Fernschreiber. If not, see .
-*/
-import QtQuick 2.5
-import QtGraphicalEffects 1.0
-import Sailfish.Silica 1.0
-
-Item {
-
- id: imageThumbnail
-
- property variant imageData;
-
- Image {
-
- Component.onCompleted: {
- if (imageData.local.is_downloading_completed) {
- singleImage.source = imageData.local.path;
- } else {
- tdLibWrapper.downloadFile(imageData.id);
- }
- }
-
- Connections {
- target: tdLibWrapper
- onFileUpdated: {
- if (fileId === imageData.id) {
- console.log("File updated, completed? " + fileInformation.local.is_downloading_completed);
- imageThumbnail.imageData = fileInformation;
- if (imageThumbnail.imageData.local.is_downloading_completed) {
- singleImage.source = imageThumbnail.imageData.local.path;
- }
- }
- }
- }
-
- id: singleImage
- width: parent.width - Theme.paddingSmall
- height: parent.height - Theme.paddingSmall
- anchors.centerIn: parent
-
- fillMode: Image.PreserveAspectCrop
- autoTransform: true
- asynchronous: true
- visible: false
- }
-
- Rectangle {
- id: imageThumbnailMask
- width: parent.width - Theme.paddingSmall
- height: parent.height - Theme.paddingSmall
- color: Theme.primaryColor
- radius: parent.width / 2
- anchors.centerIn: singleImage
- visible: false
- }
-
- OpacityMask {
- id: maskedThumbnail
- source: singleImage
- maskSource: imageThumbnailMask
- anchors.fill: singleImage
- visible: singleImage.status === Image.Ready ? true : false
- opacity: singleImage.status === Image.Ready ? 1 : 0
- Behavior on opacity { NumberAnimation {} }
- }
-
- Image {
- id: imageLoadingBackgroundImage
- source: "../../images/background" + ( Theme.colorScheme ? "-black" : "-white" ) + ".png"
- anchors {
- centerIn: parent
- }
- width: parent.width - 2 * Theme.paddingLarge
- height: parent.height - 2 * Theme.paddingLarge
- visible: singleImage.status !== Image.Ready
-
- fillMode: Image.PreserveAspectFit
- opacity: 0.15
- }
-
-}
diff --git a/qml/components/ProfileThumbnail.qml b/qml/components/ProfileThumbnail.qml
new file mode 100644
index 0000000..c60fe42
--- /dev/null
+++ b/qml/components/ProfileThumbnail.qml
@@ -0,0 +1,126 @@
+/*
+ Copyright (C) 2020 Sebastian J. Wolf
+
+ This file is part of Fernschreiber.
+
+ Fernschreiber 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.
+
+ Fernschreiber 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 Fernschreiber. If not, see .
+*/
+import QtQuick 2.5
+import QtGraphicalEffects 1.0
+import Sailfish.Silica 1.0
+
+Item {
+
+ id: profileThumbnail
+
+ property variant photoData;
+ property string replacementStringHint: "X"
+
+ function getReplacementString() {
+ if (replacementStringHint.length > 2) {
+ // Remove all emoji images
+ var strippedText = replacementStringHint.replace(/\<[^>]+\>/g, "").trim();
+ if (strippedText.length > 0) {
+ var textElements = strippedText.split(" ");
+ if (textElements.length > 1) {
+ return textElements[0].charAt(0) + textElements[textElements.length - 1].charAt(0);
+ } else {
+ return textElements[0].charAt(0);
+ }
+ }
+ }
+ return replacementStringHint;
+ }
+
+ Component.onCompleted: {
+ if (typeof photoData === "object") {
+ if (photoData.local.is_downloading_completed) {
+ singleImage.source = photoData.local.path;
+ } else {
+ tdLibWrapper.downloadFile(photoData.id);
+ }
+ }
+ }
+
+ Connections {
+ target: tdLibWrapper
+ onFileUpdated: {
+ if (fileId === photoData.id) {
+ console.log("File updated, completed? " + fileInformation.local.is_downloading_completed);
+ if (fileInformation.local.is_downloading_completed) {
+ photoData = fileInformation;
+ singleImage.source = photoData.local.path;
+ }
+ }
+ }
+ }
+
+ Image {
+ id: singleImage
+ width: parent.width - Theme.paddingSmall
+ height: parent.height - Theme.paddingSmall
+ anchors.centerIn: parent
+
+ fillMode: Image.PreserveAspectCrop
+ autoTransform: true
+ asynchronous: true
+ visible: false
+ }
+
+ Rectangle {
+ id: profileThumbnailMask
+ width: parent.width - Theme.paddingSmall
+ height: parent.height - Theme.paddingSmall
+ color: Theme.primaryColor
+ radius: parent.width / 2
+ anchors.centerIn: singleImage
+ visible: false
+ }
+
+ OpacityMask {
+ id: maskedThumbnail
+ source: singleImage
+ maskSource: profileThumbnailMask
+ anchors.fill: singleImage
+ visible: singleImage.status === Image.Ready ? true : false
+ opacity: singleImage.status === Image.Ready ? 1 : 0
+ Behavior on opacity { NumberAnimation {} }
+ }
+
+ Item {
+ id: replacementThumbnailItem
+ width: parent.width - Theme.paddingSmall
+ height: parent.height - Theme.paddingSmall
+ visible: singleImage.status !== Image.Ready
+
+ Rectangle {
+ id: replacementThumbnailBackground
+ anchors.fill: parent
+ color: (Theme.colorScheme === Theme.LightOnDark) ? Theme.darkSecondaryColor : Theme.lightSecondaryColor
+ radius: parent.width / 2
+ opacity: 0.8
+ }
+
+ Text {
+ id: replacementThumbnailText
+ anchors.centerIn: replacementThumbnailBackground
+ text: getReplacementString()
+ color: Theme.primaryColor
+ font.bold: true
+ font.pixelSize: Theme.fontSizeLarge
+ }
+
+ }
+
+}
diff --git a/qml/js/functions.js b/qml/js/functions.js
new file mode 100644
index 0000000..1eb9596
--- /dev/null
+++ b/qml/js/functions.js
@@ -0,0 +1,3 @@
+function getUserName(userInformation) {
+ return userInformation.first_name + " " + userInformation.last_name;
+}
diff --git a/qml/pages/AboutPage.qml b/qml/pages/AboutPage.qml
index 2536b7d..087a5b3 100644
--- a/qml/pages/AboutPage.qml
+++ b/qml/pages/AboutPage.qml
@@ -20,6 +20,7 @@ import QtQuick 2.0
import Sailfish.Silica 1.0
import "../components"
import "../js/twemoji.js" as Emoji
+import "../js/functions.js" as Functions
Page {
id: aboutPage
@@ -160,10 +161,11 @@ Page {
}
}
- ImageThumbnail {
- imageData: aboutPage.userInformation.profile_photo.big
+ ProfileThumbnail {
+ photoData: aboutPage.userInformation.profile_photo.small
width: Theme.itemSizeExtraLarge
height: Theme.itemSizeExtraLarge
+ replacementStringHint: aboutPage.userInformation.first_name + " " + aboutPage.userInformation.last_name
anchors {
horizontalCenter: parent.horizontalCenter
}
diff --git a/qml/pages/OverviewPage.qml b/qml/pages/OverviewPage.qml
index b0f5e04..30ef3fb 100644
--- a/qml/pages/OverviewPage.qml
+++ b/qml/pages/OverviewPage.qml
@@ -24,6 +24,7 @@ import Nemo.Notifications 1.0
import WerkWolf.Fernschreiber 1.0
import "../components"
import "../js/twemoji.js" as Emoji
+import "../js/functions.js" as Functions
Page {
id: overviewPage
@@ -198,14 +199,14 @@ Page {
Column {
id: chatListPictureColumn
- width: parent.width / 6
- height: parent.width / 6
+ width: chatListContentColumn.height
+ height: chatListContentColumn.height
spacing: Theme.paddingSmall
- ImageThumbnail {
+ ProfileThumbnail {
id: chatListPictureThumbnail
- visible: display.photo
- imageData: display.photo.small
+ photoData: (typeof display.photo !== "undefined") ? display.photo.small : ""
+ replacementStringHint: chatListNameText.text
width: parent.width
height: parent.width
}
@@ -215,11 +216,9 @@ Page {
id: chatListContentColumn
width: parent.width * 5 / 6 - Theme.horizontalPageMargin
- spacing: Theme.paddingSmall
-
Text {
id: chatListNameText
- text: Emoji.emojify(display.title, Theme.fontSizeMedium)
+ text: display.title !== "" ? Emoji.emojify(display.title, Theme.fontSizeMedium) : qsTr("Unknown")
textFormat: Text.StyledText
font.pixelSize: Theme.fontSizeMedium
color: Theme.primaryColor
diff --git a/translations/harbour-fernschreiber-de.ts b/translations/harbour-fernschreiber-de.ts
index 2a83e07..a09918e 100644
--- a/translations/harbour-fernschreiber-de.ts
+++ b/translations/harbour-fernschreiber-de.ts
@@ -188,5 +188,9 @@
+
+
+
+
diff --git a/translations/harbour-fernschreiber.ts b/translations/harbour-fernschreiber.ts
index 2a83e07..a09918e 100644
--- a/translations/harbour-fernschreiber.ts
+++ b/translations/harbour-fernschreiber.ts
@@ -188,5 +188,9 @@
+
+
+
+