Initialize Fernschreiber repository
3
.gitignore
vendored
|
@ -50,3 +50,6 @@ compile_commands.json
|
|||
|
||||
# QtCreator local machine specific files for imported projects
|
||||
*creator.user*
|
||||
|
||||
# TDLib API Secrets
|
||||
tdlibsecrets.h
|
||||
|
|
27
README.md
|
@ -1,2 +1,25 @@
|
|||
# harbour-fernschreiber
|
||||
Fernschreiber is a Telegram client for Sailfish OS
|
||||
# Fernschreiber
|
||||
A Telegram client for Sailfish OS
|
||||
|
||||
## Author
|
||||
Sebastian J. Wolf [sebastian@ygriega.de](mailto:sebastian@ygriega.de)
|
||||
|
||||
## License
|
||||
Licensed under GNU GPLv3
|
||||
|
||||
## Build
|
||||
Simply clone this repository and use the project file `harbour-fernschreiber.pro` to import the sources in your SailfishOS IDE. To build and run Fernschreiber or an application which is based on Fernschreiber, you need to create the file `harbour-fernschreiber/src/tdlibsecrets.h` and enter the required constants in the following format:
|
||||
|
||||
```
|
||||
#ifndef TDLIBSECRETS_H
|
||||
#define TDLIBSECRETS_H
|
||||
const char TDLIB_API_ID[] = "42424242";
|
||||
const char TDLIB_API_HASH[] = "1234567890abcdef1234567890abcdef";
|
||||
#endif // TDLIBSECRETS_H
|
||||
```
|
||||
|
||||
You get the Telegram API ID and hash as soon as you've registered your own application on [https://my.telegram.org](https://my.telegram.org).
|
||||
|
||||
## Credits
|
||||
This project uses
|
||||
- The Telegram Database Library (TDLib) - available on [GitHub.com](https://github.com/tdlib/td). Thanks for making it available under the conditions of the Boost Software License 1.0! Details about the license of TDLib in [its license file](https://github.com/tdlib/td/blob/master/LICENSE_1_0.txt).
|
||||
|
|
6
harbour-fernschreiber.desktop
Normal file
|
@ -0,0 +1,6 @@
|
|||
[Desktop Entry]
|
||||
Type=Application
|
||||
X-Nemo-Application-Type=silica-qt5
|
||||
Icon=harbour-fernschreiber
|
||||
Exec=harbour-fernschreiber
|
||||
Name=Fernschreiber
|
74
harbour-fernschreiber.pro
Normal file
|
@ -0,0 +1,74 @@
|
|||
# NOTICE:
|
||||
#
|
||||
# Application name defined in TARGET has a corresponding QML filename.
|
||||
# If name defined in TARGET is changed, the following needs to be done
|
||||
# to match new name:
|
||||
# - corresponding QML filename must be changed
|
||||
# - desktop icon filename must be changed
|
||||
# - desktop filename must be changed
|
||||
# - icon definition filename in desktop file must be changed
|
||||
# - translation filenames have to be changed
|
||||
|
||||
# The name of your application
|
||||
TARGET = harbour-fernschreiber
|
||||
|
||||
CONFIG += sailfishapp sailfishapp_i18n
|
||||
|
||||
SOURCES += src/harbour-fernschreiber.cpp \
|
||||
src/tdlibwrapper.cpp
|
||||
|
||||
DISTFILES += qml/harbour-fernschreiber.qml \
|
||||
qml/pages/CoverPage.qml \
|
||||
qml/pages/OverviewPage.qml \
|
||||
qml/pages/AboutPage.qml \
|
||||
rpm/harbour-fernschreiber.changes.in \
|
||||
rpm/harbour-fernschreiber.changes.run.in \
|
||||
rpm/harbour-fernschreiber.spec \
|
||||
rpm/harbour-fernschreiber.yaml \
|
||||
translations/*.ts \
|
||||
harbour-fernschreiber.desktop
|
||||
|
||||
SAILFISHAPP_ICONS = 86x86 108x108 128x128 172x172 256x256
|
||||
|
||||
TRANSLATIONS += translations/harbour-fernschreiber-de.ts
|
||||
|
||||
LIBS += -L$$PWD/tdlib/lib/ -ltdjson
|
||||
|
||||
INCLUDEPATH += $$PWD/tdlib/include
|
||||
DEPENDPATH += $$PWD/tdlib/include
|
||||
|
||||
telegram.files = $$PWD/tdlib/lib
|
||||
telegram.path = /usr/share/$${TARGET}
|
||||
|
||||
gui.files = qml
|
||||
gui.path = /usr/share/$${TARGET}
|
||||
|
||||
images.files = images
|
||||
images.path = /usr/share/$${TARGET}
|
||||
|
||||
ICONPATH = /usr/share/icons/hicolor
|
||||
|
||||
86.png.path = $${ICONPATH}/86x86/apps/
|
||||
86.png.files += icons/86x86/harbour-fernschreiber.png
|
||||
|
||||
108.png.path = $${ICONPATH}/108x108/apps/
|
||||
108.png.files += icons/108x108/harbour-fernschreiber.png
|
||||
|
||||
128.png.path = $${ICONPATH}/128x128/apps/
|
||||
128.png.files += icons/128x128/harbour-fernschreiber.png
|
||||
|
||||
172.png.path = $${ICONPATH}/172x172/apps/
|
||||
172.png.files += icons/172x172/harbour-fernschreiber.png
|
||||
|
||||
256.png.path = $${ICONPATH}/256x256/apps/
|
||||
256.png.files += icons/256x256/harbour-fernschreiber.png
|
||||
|
||||
fernschreiber.desktop.path = /usr/share/applications/
|
||||
fernschreiber.desktop.files = harbour-fernschreiber.desktop
|
||||
|
||||
INSTALLS += telegram 86.png 108.png 128.png 172.png 256.png \
|
||||
fernschreiber.desktop gui images
|
||||
|
||||
HEADERS += \
|
||||
src/tdlibsecrets.h \
|
||||
src/tdlibwrapper.h
|
BIN
icons/108x108/harbour-fernschreiber.png
Normal file
After Width: | Height: | Size: 7.4 KiB |
BIN
icons/128x128/harbour-fernschreiber.png
Normal file
After Width: | Height: | Size: 8.7 KiB |
BIN
icons/172x172/harbour-fernschreiber.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
icons/256x256/harbour-fernschreiber.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
icons/86x86/harbour-fernschreiber.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
images/background-black.png
Normal file
After Width: | Height: | Size: 130 KiB |
BIN
images/background-white.png
Normal file
After Width: | Height: | Size: 130 KiB |
BIN
images/fernschreiber.png
Normal file
After Width: | Height: | Size: 191 KiB |
17
qml/harbour-fernschreiber.qml
Normal file
|
@ -0,0 +1,17 @@
|
|||
import QtQuick 2.0
|
||||
import Sailfish.Silica 1.0
|
||||
import "pages"
|
||||
|
||||
ApplicationWindow
|
||||
{
|
||||
id: appWindow
|
||||
|
||||
Component {
|
||||
id: overviewPage
|
||||
OverviewPage {}
|
||||
}
|
||||
|
||||
initialPage: overviewPage
|
||||
cover: Qt.resolvedUrl("pages/CoverPage.qml")
|
||||
allowedOrientations: defaultAllowedOrientations
|
||||
}
|
195
qml/pages/AboutPage.qml
Normal file
|
@ -0,0 +1,195 @@
|
|||
/*
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import QtQuick 2.0
|
||||
import Sailfish.Silica 1.0
|
||||
|
||||
Page {
|
||||
id: aboutPage
|
||||
allowedOrientations: Orientation.All
|
||||
|
||||
SilicaFlickable {
|
||||
id: aboutContainer
|
||||
contentHeight: column.height
|
||||
anchors.fill: parent
|
||||
|
||||
Column {
|
||||
id: column
|
||||
width: aboutPage.width
|
||||
spacing: Theme.paddingLarge
|
||||
|
||||
PageHeader {
|
||||
title: qsTr("About Fernschreiber")
|
||||
}
|
||||
|
||||
Image {
|
||||
id: wunderfitzImage
|
||||
source: "../../images/fernschreiber.png"
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
|
||||
fillMode: Image.PreserveAspectFit
|
||||
width: 2/3 * parent.width
|
||||
|
||||
}
|
||||
|
||||
Label {
|
||||
text: "Fernschreiber 0.1"
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
font.pixelSize: Theme.fontSizeExtraLarge
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
wrapMode: Text.Wrap
|
||||
x: Theme.horizontalPageMargin
|
||||
width: parent.width - ( 2 * Theme.horizontalPageMargin )
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
text: qsTr("A Telegram client for Sailfish OS")
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr("By Sebastian J. Wolf")
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
text: "<a href=\"mailto:sebastian@ygriega.de\">" + qsTr("Send E-Mail") + "</a>"
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
linkColor: Theme.highlightColor
|
||||
|
||||
onLinkActivated: Qt.openUrlExternally("mailto:sebastian@ygriega.de")
|
||||
}
|
||||
|
||||
Separator {
|
||||
width: parent.width
|
||||
color: Theme.primaryColor
|
||||
horizontalAlignment: Qt.AlignHCenter
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr("Licensed under GNU GPLv3")
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
text: "<a href=\"https://github.com/Wunderfitz/harbour-fernschreiber\">" + qsTr("Sources on GitHub") + "</a>"
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
linkColor: Theme.highlightColor
|
||||
|
||||
onLinkActivated: Qt.openUrlExternally("https://github.com/Wunderfitz/harbour-fernschreiber")
|
||||
}
|
||||
|
||||
SectionHeader {
|
||||
text: qsTr("About Telegram")
|
||||
}
|
||||
|
||||
Label {
|
||||
x: Theme.horizontalPageMargin
|
||||
width: parent.width - ( 2 * Theme.horizontalPageMargin )
|
||||
text: qsTr("This product uses the Telegram API but is not endorsed or certified by Telegram")
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
wrapMode: Text.Wrap
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
|
||||
Button {
|
||||
id: flickrTosButton
|
||||
text: qsTr("Terms of Service")
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
onClicked: {
|
||||
Qt.openUrlExternally("https://telegram.org/tos");
|
||||
}
|
||||
}
|
||||
|
||||
Button {
|
||||
id: flickrPrivacyButton
|
||||
text: qsTr("Privacy Policy")
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
onClicked: {
|
||||
Qt.openUrlExternally("https://telegram.orgprivacy")
|
||||
}
|
||||
}
|
||||
|
||||
SectionHeader {
|
||||
text: qsTr("Credits")
|
||||
}
|
||||
|
||||
Label {
|
||||
x: Theme.horizontalPageMargin
|
||||
width: parent.width - ( 2 * Theme.horizontalPageMargin )
|
||||
text: qsTr("This project uses the Telegram Database Library (TDLib). Thanks for making it available under the conditions of the Boost Software License 1.0!")
|
||||
font.pixelSize: Theme.fontSizeExtraSmall
|
||||
wrapMode: Text.Wrap
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
text: "<a href=\"https://github.com/tdlib/td\">" + qsTr("Open Telegram Database Library on GitHub") + "</a>"
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
linkColor: Theme.highlightColor
|
||||
|
||||
onLinkActivated: Qt.openUrlExternally("https://github.com/tdlib/td")
|
||||
}
|
||||
|
||||
Label {
|
||||
id: separatorLabel
|
||||
x: Theme.horizontalPageMargin
|
||||
width: parent.width - ( 2 * Theme.horizontalPageMargin )
|
||||
font.pixelSize: Theme.fontSizeExtraSmall
|
||||
wrapMode: Text.Wrap
|
||||
anchors {
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
|
||||
VerticalScrollDecorator {}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
43
qml/pages/CoverPage.qml
Normal file
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import QtQuick 2.5
|
||||
import Sailfish.Silica 1.0
|
||||
|
||||
CoverBackground {
|
||||
|
||||
id: coverPage
|
||||
|
||||
Image {
|
||||
id: backgroundImage
|
||||
source: "../../images/background" + ( Theme.colorScheme ? "-black" : "-white" ) + ".png"
|
||||
anchors {
|
||||
verticalCenter: parent.verticalCenter
|
||||
|
||||
bottom: parent.bottom
|
||||
bottomMargin: Theme.paddingMedium
|
||||
|
||||
right: parent.right
|
||||
rightMargin: Theme.paddingMedium
|
||||
}
|
||||
|
||||
fillMode: Image.PreserveAspectFit
|
||||
opacity: 0.15
|
||||
}
|
||||
|
||||
}
|
56
qml/pages/OverviewPage.qml
Normal file
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import QtQuick 2.5
|
||||
import QtGraphicalEffects 1.0
|
||||
import QtMultimedia 5.0
|
||||
import Sailfish.Silica 1.0
|
||||
import Nemo.Notifications 1.0
|
||||
|
||||
|
||||
Page {
|
||||
id: overviewPage
|
||||
allowedOrientations: Orientation.All
|
||||
|
||||
SilicaFlickable {
|
||||
id: aboutContainer
|
||||
contentHeight: column.height
|
||||
anchors.fill: parent
|
||||
|
||||
PullDownMenu {
|
||||
MenuItem {
|
||||
text: qsTr("About Fernschreiber")
|
||||
onClicked: pageStack.push(Qt.resolvedUrl("../pages/AboutPage.qml"))
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
id: column
|
||||
width: parent.width
|
||||
spacing: Theme.paddingLarge
|
||||
|
||||
PageHeader {
|
||||
title: qsTr("Welcome to Fernschreiber")
|
||||
}
|
||||
|
||||
VerticalScrollDecorator {}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
18
rpm/harbour-fernschreiber.changes.in
Normal file
|
@ -0,0 +1,18 @@
|
|||
# Rename this file as harbour-fernschreiber.changes to include changelog
|
||||
# entries in your RPM file.
|
||||
#
|
||||
# Add new changelog entries following the format below.
|
||||
# Add newest entries to the top of the list.
|
||||
# Separate entries from eachother with a blank line.
|
||||
#
|
||||
# Alternatively, if your changelog is automatically generated (e.g. with
|
||||
# the git-change-log command provided with Sailfish OS SDK), create a
|
||||
# harbour-fernschreiber.changes.run script to let mb2 run the required commands for you.
|
||||
|
||||
# * date Author's Name <author's email> version-release
|
||||
# - Summary of changes
|
||||
|
||||
* Sun Apr 13 2014 Jack Tar <jack.tar@example.com> 0.0.1-1
|
||||
- Scrubbed the deck
|
||||
- Hoisted the sails
|
||||
|
25
rpm/harbour-fernschreiber.changes.run.in
Normal file
|
@ -0,0 +1,25 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Rename this file as harbour-fernschreiber.changes.run to let mb2 automatically
|
||||
# generate changelog from well formatted Git commit messages and tag
|
||||
# annotations.
|
||||
|
||||
git-change-log
|
||||
|
||||
# Here are some basic examples how to change from the default behavior. Run
|
||||
# git-change-log --help inside the Sailfish OS SDK chroot or build engine to
|
||||
# learn all the options git-change-log accepts.
|
||||
|
||||
# Use a subset of tags
|
||||
#git-change-log --tags refs/tags/my-prefix/*
|
||||
|
||||
# Group entries by minor revision, suppress headlines for patch-level revisions
|
||||
#git-change-log --dense '/[0-9]+.[0-9+$'
|
||||
|
||||
# Trim very old changes
|
||||
#git-change-log --since 2014-04-01
|
||||
#echo '[ Some changelog entries trimmed for brevity ]'
|
||||
|
||||
# Use the subjects (first lines) of tag annotations when no entry would be
|
||||
# included for a revision otherwise
|
||||
#git-change-log --auto-add-annotations
|
69
rpm/harbour-fernschreiber.spec
Normal file
|
@ -0,0 +1,69 @@
|
|||
#
|
||||
# Do NOT Edit the Auto-generated Part!
|
||||
# Generated by: spectacle version 0.27
|
||||
#
|
||||
|
||||
Name: harbour-fernschreiber
|
||||
|
||||
# >> macros
|
||||
%define __provides_exclude_from ^%{_datadir}/.*$
|
||||
%define __requires_exclude ^libtdjson.*$
|
||||
# << macros
|
||||
|
||||
Summary: Fernschreiber is a Telegram client for Sailfish OS
|
||||
Version: 0.1
|
||||
Release: 1
|
||||
Group: Qt/Qt
|
||||
License: LICENSE
|
||||
URL: http://werkwolf.eu/
|
||||
Source0: %{name}-%{version}.tar.bz2
|
||||
Source100: harbour-fernschreiber.yaml
|
||||
Requires: sailfishsilica-qt5 >= 0.10.9
|
||||
BuildRequires: pkgconfig(sailfishapp) >= 1.0.2
|
||||
BuildRequires: pkgconfig(Qt5Core)
|
||||
BuildRequires: pkgconfig(Qt5Qml)
|
||||
BuildRequires: pkgconfig(Qt5Quick)
|
||||
BuildRequires: desktop-file-utils
|
||||
|
||||
%description
|
||||
Fernschreiber is a Telegram client for Sailfish OS
|
||||
|
||||
|
||||
%prep
|
||||
%setup -q -n %{name}-%{version}
|
||||
|
||||
# >> setup
|
||||
# << setup
|
||||
|
||||
%build
|
||||
# >> build pre
|
||||
# << build pre
|
||||
|
||||
%qmake5
|
||||
|
||||
make %{?_smp_mflags}
|
||||
|
||||
# >> build post
|
||||
# << build post
|
||||
|
||||
%install
|
||||
rm -rf %{buildroot}
|
||||
# >> install pre
|
||||
# << install pre
|
||||
%qmake5_install
|
||||
|
||||
# >> install post
|
||||
# << install post
|
||||
|
||||
desktop-file-install --delete-original \
|
||||
--dir %{buildroot}%{_datadir}/applications \
|
||||
%{buildroot}%{_datadir}/applications/*.desktop
|
||||
|
||||
%files
|
||||
%defattr(-,root,root,-)
|
||||
%{_bindir}
|
||||
%{_datadir}/%{name}
|
||||
%{_datadir}/applications/%{name}.desktop
|
||||
%{_datadir}/icons/hicolor/*/apps/%{name}.png
|
||||
# >> files
|
||||
# << files
|
43
rpm/harbour-fernschreiber.yaml
Normal file
|
@ -0,0 +1,43 @@
|
|||
Name: harbour-fernschreiber
|
||||
Summary: Fernschreiber is a Telegram client for Sailfish OS
|
||||
Version: 0.1
|
||||
Release: 1
|
||||
# The contents of the Group field should be one of the groups listed here:
|
||||
# https://github.com/mer-tools/spectacle/blob/master/data/GROUPS
|
||||
Group: Qt/Qt
|
||||
URL: http://werkwolf.eu/
|
||||
License: LICENSE
|
||||
# This must be generated before uploading a package to a remote build service.
|
||||
# Usually this line does not need to be modified.
|
||||
Sources:
|
||||
- '%{name}-%{version}.tar.bz2'
|
||||
Description: |
|
||||
Fernschreiber is a Telegram client for Sailfish OS
|
||||
Configure: none
|
||||
Builder: qmake5
|
||||
|
||||
# This section specifies build dependencies that are resolved using pkgconfig.
|
||||
# This is the preferred way of specifying build dependencies for your package.
|
||||
PkgConfigBR:
|
||||
- sailfishapp >= 1.0.2
|
||||
- Qt5Core
|
||||
- Qt5Qml
|
||||
- Qt5Quick
|
||||
|
||||
# Build dependencies without a pkgconfig setup can be listed here
|
||||
# PkgBR:
|
||||
# - package-needed-to-build
|
||||
|
||||
# Runtime dependencies which are not automatically detected
|
||||
Requires:
|
||||
- sailfishsilica-qt5 >= 0.10.9
|
||||
|
||||
# All installed files
|
||||
Files:
|
||||
- '%{_bindir}'
|
||||
- '%{_datadir}/%{name}'
|
||||
- '%{_datadir}/applications/%{name}.desktop'
|
||||
- '%{_datadir}/icons/hicolor/*/apps/%{name}.png'
|
||||
|
||||
# For more information about yaml and what's supported in Sailfish OS
|
||||
# build system, please see https://wiki.merproject.org/wiki/Spectacle
|
47
src/harbour-fernschreiber.cpp
Normal file
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifdef QT_QML_DEBUG
|
||||
#include <QtQuick>
|
||||
#endif
|
||||
|
||||
#include <sailfishapp.h>
|
||||
#include <QScopedPointer>
|
||||
#include <QQuickView>
|
||||
#include <QtQml>
|
||||
#include <QQmlContext>
|
||||
#include <QQmlEngine>
|
||||
#include <QGuiApplication>
|
||||
|
||||
#include "tdlibwrapper.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QScopedPointer<QGuiApplication> app(SailfishApp::application(argc, argv));
|
||||
QScopedPointer<QQuickView> view(SailfishApp::createView());
|
||||
|
||||
QQmlContext *context = view.data()->rootContext();
|
||||
|
||||
TDLibWrapper tdLibWrapper;
|
||||
context->setContextProperty("tdLibWrapper", &tdLibWrapper);
|
||||
|
||||
view->setSource(SailfishApp::pathTo("qml/harbour-fernschreiber.qml"));
|
||||
view->show();
|
||||
return app->exec();
|
||||
}
|
40
src/tdlibwrapper.cpp
Normal file
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "tdlibwrapper.h"
|
||||
|
||||
TDLibWrapper::TDLibWrapper(QObject *parent) : QObject(parent)
|
||||
{
|
||||
qDebug() << "[TDLibWrapper] Initializing TD Lib...";
|
||||
this->tdLibClient = td_json_client_create();
|
||||
//this->testIt();
|
||||
}
|
||||
|
||||
TDLibWrapper::~TDLibWrapper()
|
||||
{
|
||||
qDebug() << "[TDLibWrapper] Destroying TD Lib...";
|
||||
td_json_client_destroy(this->tdLibClient);
|
||||
}
|
||||
|
||||
void TDLibWrapper::testIt()
|
||||
{
|
||||
qDebug() << "[TDLibWrapper] Test it!";
|
||||
td_json_client_send(this->tdLibClient, "BLUBB");
|
||||
}
|
||||
|
27
src/tdlibwrapper.h
Normal file
|
@ -0,0 +1,27 @@
|
|||
#ifndef TDLIBWRAPPER_H
|
||||
#define TDLIBWRAPPER_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QDebug>
|
||||
#include <td/telegram/td_json_client.h>
|
||||
|
||||
class TDLibWrapper : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit TDLibWrapper(QObject *parent = nullptr);
|
||||
~TDLibWrapper();
|
||||
|
||||
Q_INVOKABLE void testIt();
|
||||
|
||||
signals:
|
||||
|
||||
public slots:
|
||||
|
||||
|
||||
private:
|
||||
void *tdLibClient;
|
||||
|
||||
};
|
||||
|
||||
#endif // TDLIBWRAPPER_H
|
134
tdlib/include/td/telegram/Client.h
Normal file
|
@ -0,0 +1,134 @@
|
|||
//
|
||||
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2020
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
//
|
||||
#pragma once
|
||||
|
||||
///\file
|
||||
|
||||
#include "td/telegram/td_api.h"
|
||||
#include "td/telegram/td_api.hpp"
|
||||
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
|
||||
namespace td {
|
||||
|
||||
/**
|
||||
* Native C++ interface for interaction with TDLib.
|
||||
*
|
||||
* The TDLib instance is created for the lifetime of the Client object.
|
||||
* Requests to TDLib can be sent using the Client::send method from any thread.
|
||||
* New updates and responses to requests can be received using the Client::receive method from any thread,
|
||||
* this function shouldn't be called simultaneously from two different threads. Also note that all updates and
|
||||
* responses to requests should be applied in the same order as they were received, to ensure consistency.
|
||||
* Given this information, it's advisable to call this function from a dedicated thread.
|
||||
* Some service TDLib requests can be executed synchronously from any thread by using the Client::execute method.
|
||||
*
|
||||
* General pattern of usage:
|
||||
* \code
|
||||
* std::shared_ptr<td::Client> client = std::make_shared<td::Client>();
|
||||
* // somehow share the client with other threads, which will be able to send requests via client->send
|
||||
*
|
||||
* const double WAIT_TIMEOUT = 10.0; // seconds
|
||||
* bool is_closed = false; // should be set to true, when updateAuthorizationState with
|
||||
* // authorizationStateClosed is received
|
||||
* while (!is_closed) {
|
||||
* auto response = client->receive(WAIT_TIMEOUT);
|
||||
* if (response.object == nullptr) {
|
||||
* continue;
|
||||
* }
|
||||
*
|
||||
* if (response.id == 0) {
|
||||
* // process response.object as an incoming update of type td_api::Update
|
||||
* } else {
|
||||
* // process response.object as an answer to a sent request with id response.id
|
||||
* }
|
||||
* }
|
||||
* \endcode
|
||||
*/
|
||||
class Client final {
|
||||
public:
|
||||
/**
|
||||
* Creates a new TDLib client.
|
||||
*/
|
||||
Client();
|
||||
|
||||
/**
|
||||
* A request to the TDLib.
|
||||
*/
|
||||
struct Request {
|
||||
/**
|
||||
* Request identifier.
|
||||
* Responses to TDLib requests will have the same id as the corresponding request.
|
||||
* Updates from TDLib will have id == 0, incoming requests are thus disallowed to have id == 0.
|
||||
*/
|
||||
std::uint64_t id;
|
||||
|
||||
/**
|
||||
* TDLib API function representing a request to TDLib.
|
||||
*/
|
||||
td_api::object_ptr<td_api::Function> function;
|
||||
};
|
||||
|
||||
/**
|
||||
* Sends request to TDLib. May be called from any thread.
|
||||
* \param[in] request Request to TDLib.
|
||||
*/
|
||||
void send(Request &&request);
|
||||
|
||||
/**
|
||||
* A response to a request, or an incoming update from TDLib.
|
||||
*/
|
||||
struct Response {
|
||||
/**
|
||||
* TDLib request identifier, which corresponds to the response or 0 for incoming updates from TDLib.
|
||||
*/
|
||||
std::uint64_t id;
|
||||
|
||||
/**
|
||||
* TDLib API object representing a response to a TDLib request or an incoming update.
|
||||
*/
|
||||
td_api::object_ptr<td_api::Object> object;
|
||||
};
|
||||
|
||||
/**
|
||||
* Receives incoming updates and request responses from TDLib. May be called from any thread, but shouldn't be
|
||||
* called simultaneously from two different threads.
|
||||
* \param[in] timeout The maximum number of seconds allowed for this function to wait for new data.
|
||||
* \return An incoming update or request response. The object returned in the response may be a nullptr
|
||||
* if the timeout expires.
|
||||
*/
|
||||
Response receive(double timeout);
|
||||
|
||||
/**
|
||||
* Synchronously executes TDLib requests. Only a few requests can be executed synchronously.
|
||||
* May be called from any thread.
|
||||
* \param[in] request Request to the TDLib.
|
||||
* \return The request response.
|
||||
*/
|
||||
static Response execute(Request &&request);
|
||||
|
||||
/**
|
||||
* Destroys the client and TDLib instance.
|
||||
*/
|
||||
~Client();
|
||||
|
||||
/**
|
||||
* Move constructor.
|
||||
*/
|
||||
Client(Client &&other);
|
||||
|
||||
/**
|
||||
* Move assignment operator.
|
||||
*/
|
||||
Client &operator=(Client &&other);
|
||||
|
||||
private:
|
||||
class Impl;
|
||||
std::unique_ptr<Impl> impl_;
|
||||
};
|
||||
|
||||
} // namespace td
|
85
tdlib/include/td/telegram/Log.h
Normal file
|
@ -0,0 +1,85 @@
|
|||
//
|
||||
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2020
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
//
|
||||
#pragma once
|
||||
|
||||
/**
|
||||
* \file
|
||||
* C++ interface for managing the internal logging of TDLib.
|
||||
* By default TDLib writes logs to stderr or an OS specific log and uses a verbosity level of 5.
|
||||
*/
|
||||
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
|
||||
namespace td {
|
||||
|
||||
/**
|
||||
* Interface for managing the internal logging of TDLib.
|
||||
* By default TDLib writes logs to stderr or an OS specific log and uses a verbosity level of 5.
|
||||
* These functions are deprecated since TDLib 1.4.0 in favor of the td::td_api::setLogVerbosityLevel,
|
||||
* td::td_api::setLogStream and other synchronous requests for managing the intrenal TDLib logging.
|
||||
*/
|
||||
class Log {
|
||||
public:
|
||||
/**
|
||||
* Sets the path to the file to where the internal TDLib log will be written.
|
||||
* By default TDLib writes logs to stderr or an OS specific log.
|
||||
* Use this method to write the log to a file instead.
|
||||
*
|
||||
* \deprecated Use synchronous td::td_api::setLogStream request instead.
|
||||
* \param[in] file_path Path to a file where the internal TDLib log will be written. Use an empty path to
|
||||
* switch back to the default logging behaviour.
|
||||
* \return True on success, or false otherwise, i.e. if the file can't be opened for writing.
|
||||
*/
|
||||
static bool set_file_path(std::string file_path);
|
||||
|
||||
/**
|
||||
* Sets the maximum size of the file to where the internal TDLib log is written before the file will be auto-rotated.
|
||||
* Unused if log is not written to a file. Defaults to 10 MB.
|
||||
*
|
||||
* \deprecated Use synchronous td::td_api::setLogStream request instead.
|
||||
* \param[in] max_file_size The maximum size of the file to where the internal TDLib log is written before the file
|
||||
* will be auto-rotated. Should be positive.
|
||||
*/
|
||||
static void set_max_file_size(std::int64_t max_file_size);
|
||||
|
||||
/**
|
||||
* Sets the verbosity level of the internal logging of TDLib.
|
||||
* By default the TDLib uses a verbosity level of 5 for logging.
|
||||
*
|
||||
* \deprecated Use synchronous td::td_api::setLogVerbosityLevel request instead.
|
||||
* \param[in] new_verbosity_level New value of the verbosity level for logging.
|
||||
* Value 0 corresponds to fatal errors,
|
||||
* value 1 corresponds to errors,
|
||||
* value 2 corresponds to warnings and debug warnings,
|
||||
* value 3 corresponds to informational,
|
||||
* value 4 corresponds to debug,
|
||||
* value 5 corresponds to verbose debug,
|
||||
* value greater than 5 and up to 1024 can be used to enable even more logging.
|
||||
*/
|
||||
static void set_verbosity_level(int new_verbosity_level);
|
||||
|
||||
/**
|
||||
* A type of callback function that will be called when a fatal error happens.
|
||||
*
|
||||
* \param error_message Null-terminated string with a description of a happened fatal error.
|
||||
*/
|
||||
using FatalErrorCallbackPtr = void (*)(const char *error_message);
|
||||
|
||||
/**
|
||||
* Sets the callback that will be called when a fatal error happens.
|
||||
* None of the TDLib methods can be called from the callback.
|
||||
* The TDLib will crash as soon as callback returns.
|
||||
* By default the callback is not set.
|
||||
*
|
||||
* \param[in] callback Callback that will be called when a fatal error happens.
|
||||
* Pass nullptr to remove the callback.
|
||||
*/
|
||||
static void set_fatal_error_callback(FatalErrorCallbackPtr callback);
|
||||
};
|
||||
|
||||
} // namespace td
|
20173
tdlib/include/td/telegram/td_api.h
Normal file
6194
tdlib/include/td/telegram/td_api.hpp
Normal file
99
tdlib/include/td/telegram/td_json_client.h
Normal file
|
@ -0,0 +1,99 @@
|
|||
//
|
||||
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2020
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
//
|
||||
#pragma once
|
||||
|
||||
/**
|
||||
* \file
|
||||
* C interface for interaction with TDLib via JSON-serialized objects.
|
||||
* Can be used to easily integrate TDLib with any programming language which supports calling C functions
|
||||
* and is able to work with JSON.
|
||||
*
|
||||
* The JSON serialization of TDLib API objects is straightforward: all API objects are represented as JSON objects with
|
||||
* the same keys as the API object field names. The object type name is stored in the special field '@type' which is
|
||||
* optional in places where type is uniquely determined by the context.
|
||||
* Fields of Bool type are stored as Boolean, fields of int32, int53, and double types are stored as Number, fields of
|
||||
* int64 and string types are stored as String, fields of bytes type are base64 encoded and then stored as String,
|
||||
* fields of vector type are stored as Array.
|
||||
* The main TDLib interface is asynchronous. To match requests with a corresponding response a field "@extra" can
|
||||
* be added to the request object. The corresponding response will have an "@extra" field with exactly the same value.
|
||||
*
|
||||
* A TDLib client instance should be created through td_json_client_create.
|
||||
* Requests then can be sent using td_json_client_send from any thread.
|
||||
* New updates and request responses can be received through td_json_client_receive from any thread. This function
|
||||
* shouldn't be called simultaneously from two different threads. Also note that all updates and request responses
|
||||
* should be applied in the order they were received to ensure consistency.
|
||||
* Given this information, it's advisable to call this function from a dedicated thread.
|
||||
* Some service TDLib requests can be executed synchronously from any thread by using td_json_client_execute.
|
||||
* The TDLib client instance can be destroyed via td_json_client_destroy.
|
||||
*
|
||||
* General pattern of usage:
|
||||
* \code
|
||||
* void *client = td_json_client_create();
|
||||
* // somehow share the client with other threads, which will be able to send requests via td_json_client_send
|
||||
*
|
||||
* const double WAIT_TIMEOUT = 10.0; // seconds
|
||||
* int is_closed = 0; // should be set to 1, when updateAuthorizationState with authorizationStateClosed is received
|
||||
* while (!is_closed) {
|
||||
* const char *result = td_json_client_receive(client, WAIT_TIMEOUT);
|
||||
* if (result) {
|
||||
* // parse the result as JSON object and process it as an incoming update or an answer to a previously sent request
|
||||
* }
|
||||
* }
|
||||
* td_json_client_destroy(client);
|
||||
* \endcode
|
||||
*/
|
||||
|
||||
#include "td/telegram/tdjson_export.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Creates a new instance of TDLib.
|
||||
* \return Pointer to the created instance of TDLib.
|
||||
*/
|
||||
TDJSON_EXPORT void *td_json_client_create();
|
||||
|
||||
/**
|
||||
* Sends request to the TDLib client. May be called from any thread.
|
||||
* \param[in] client The client.
|
||||
* \param[in] request JSON-serialized null-terminated request to TDLib.
|
||||
*/
|
||||
TDJSON_EXPORT void td_json_client_send(void *client, const char *request);
|
||||
|
||||
/**
|
||||
* Receives incoming updates and request responses from the TDLib client. May be called from any thread, but
|
||||
* shouldn't be called simultaneously from two different threads.
|
||||
* Returned pointer will be deallocated by TDLib during next call to td_json_client_receive or td_json_client_execute
|
||||
* in the same thread, so it can't be used after that.
|
||||
* \param[in] client The client.
|
||||
* \param[in] timeout The maximum number of seconds allowed for this function to wait for new data.
|
||||
* \return JSON-serialized null-terminated incoming update or request response. May be NULL if the timeout expires.
|
||||
*/
|
||||
TDJSON_EXPORT const char *td_json_client_receive(void *client, double timeout);
|
||||
|
||||
/**
|
||||
* Synchronously executes TDLib request. May be called from any thread.
|
||||
* Only a few requests can be executed synchronously.
|
||||
* Returned pointer will be deallocated by TDLib during next call to td_json_client_receive or td_json_client_execute
|
||||
* in the same thread, so it can't be used after that.
|
||||
* \param[in] client The client. Currently ignored for all requests, so NULL can be passed.
|
||||
* \param[in] request JSON-serialized null-terminated request to TDLib.
|
||||
* \return JSON-serialized null-terminated request response. May be NULL if the request can't be parsed.
|
||||
*/
|
||||
TDJSON_EXPORT const char *td_json_client_execute(void *client, const char *request);
|
||||
|
||||
/**
|
||||
* Destroys the TDLib client instance. After this is called the client instance shouldn't be used anymore.
|
||||
* \param[in] client The client.
|
||||
*/
|
||||
TDJSON_EXPORT void td_json_client_destroy(void *client);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
81
tdlib/include/td/telegram/td_log.h
Normal file
|
@ -0,0 +1,81 @@
|
|||
//
|
||||
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2020
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
//
|
||||
#pragma once
|
||||
|
||||
/**
|
||||
* \file
|
||||
* C interface for managing the internal logging of TDLib.
|
||||
* By default TDLib writes logs to stderr or an OS specific log and uses a verbosity level of 5.
|
||||
* These functions are deprecated since TDLib 1.4.0 in favor of the setLogVerbosityLevel, setLogStream and
|
||||
* other synchronous requests for managing the intrenal TDLib logging.
|
||||
*/
|
||||
|
||||
#include "td/telegram/tdjson_export.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Sets the path to the file where the internal TDLib log will be written.
|
||||
* By default TDLib writes logs to stderr or an OS specific log.
|
||||
* Use this method to write the log to a file instead.
|
||||
*
|
||||
* \deprecated Use synchronous setLogStream request instead.
|
||||
* \param[in] file_path Null-terminated path to a file where the internal TDLib log will be written.
|
||||
* Use an empty path to switch back to the default logging behaviour.
|
||||
* \return True 1 on success, or 0 otherwise, i.e. if the file can't be opened for writing.
|
||||
*/
|
||||
TDJSON_DEPRECATED_EXPORT int td_set_log_file_path(const char *file_path);
|
||||
|
||||
/**
|
||||
* Sets the maximum size of the file to where the internal TDLib log is written before the file will be auto-rotated.
|
||||
* Unused if log is not written to a file. Defaults to 10 MB.
|
||||
*
|
||||
* \deprecated Use synchronous setLogStream request instead.
|
||||
* \param[in] max_file_size The maximum size of the file to where the internal TDLib log is written before the file
|
||||
* will be auto-rotated. Should be positive.
|
||||
*/
|
||||
TDJSON_DEPRECATED_EXPORT void td_set_log_max_file_size(long long max_file_size);
|
||||
|
||||
/**
|
||||
* Sets the verbosity level of the internal logging of TDLib.
|
||||
* By default the TDLib uses a log verbosity level of 5.
|
||||
*
|
||||
* \deprecated Use synchronous setLogVerbosityLevel request instead.
|
||||
* \param[in] new_verbosity_level New value of logging verbosity level.
|
||||
* Value 0 corresponds to fatal errors,
|
||||
* value 1 corresponds to errors,
|
||||
* value 2 corresponds to warnings and debug warnings,
|
||||
* value 3 corresponds to informational,
|
||||
* value 4 corresponds to debug,
|
||||
* value 5 corresponds to verbose debug,
|
||||
* value greater than 5 and up to 1024 can be used to enable even more logging.
|
||||
*/
|
||||
TDJSON_DEPRECATED_EXPORT void td_set_log_verbosity_level(int new_verbosity_level);
|
||||
|
||||
/**
|
||||
* A type of callback function that will be called when a fatal error happens.
|
||||
*
|
||||
* \param error_message Null-terminated string with a description of a happened fatal error.
|
||||
*/
|
||||
typedef void (*td_log_fatal_error_callback_ptr)(const char *error_message);
|
||||
|
||||
/**
|
||||
* Sets the callback that will be called when a fatal error happens.
|
||||
* None of the TDLib methods can be called from the callback.
|
||||
* The TDLib will crash as soon as callback returns.
|
||||
* By default the callback is not set.
|
||||
*
|
||||
* \param[in] callback Callback that will be called when a fatal error happens.
|
||||
* Pass NULL to remove the callback.
|
||||
*/
|
||||
TDJSON_EXPORT void td_set_log_fatal_error_callback(td_log_fatal_error_callback_ptr callback);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
42
tdlib/include/td/telegram/tdjson_export.h
Normal file
|
@ -0,0 +1,42 @@
|
|||
|
||||
#ifndef TDJSON_EXPORT_H
|
||||
#define TDJSON_EXPORT_H
|
||||
|
||||
#ifdef TDJSON_STATIC_DEFINE
|
||||
# define TDJSON_EXPORT
|
||||
# define TDJSON_NO_EXPORT
|
||||
#else
|
||||
# ifndef TDJSON_EXPORT
|
||||
# ifdef tdjson_EXPORTS
|
||||
/* We are building this library */
|
||||
# define TDJSON_EXPORT __attribute__((visibility("default")))
|
||||
# else
|
||||
/* We are using this library */
|
||||
# define TDJSON_EXPORT __attribute__((visibility("default")))
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# ifndef TDJSON_NO_EXPORT
|
||||
# define TDJSON_NO_EXPORT __attribute__((visibility("hidden")))
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef TDJSON_DEPRECATED
|
||||
# define TDJSON_DEPRECATED __attribute__ ((__deprecated__))
|
||||
#endif
|
||||
|
||||
#ifndef TDJSON_DEPRECATED_EXPORT
|
||||
# define TDJSON_DEPRECATED_EXPORT TDJSON_EXPORT TDJSON_DEPRECATED
|
||||
#endif
|
||||
|
||||
#ifndef TDJSON_DEPRECATED_NO_EXPORT
|
||||
# define TDJSON_DEPRECATED_NO_EXPORT TDJSON_NO_EXPORT TDJSON_DEPRECATED
|
||||
#endif
|
||||
|
||||
#if 0 /* DEFINE_NO_DEPRECATED */
|
||||
# ifndef TDJSON_NO_DEPRECATED
|
||||
# define TDJSON_NO_DEPRECATED
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#endif /* TDJSON_EXPORT_H */
|
260
tdlib/include/td/tl/TlObject.h
Normal file
|
@ -0,0 +1,260 @@
|
|||
//
|
||||
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2020
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
//
|
||||
#pragma once
|
||||
|
||||
/**
|
||||
* \file
|
||||
* Contains the declarations of a base class for all TL-objects and some helper methods
|
||||
*/
|
||||
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <type_traits>
|
||||
#include <utility>
|
||||
|
||||
namespace td {
|
||||
|
||||
class TlStorerCalcLength;
|
||||
|
||||
class TlStorerUnsafe;
|
||||
|
||||
class TlStorerToString;
|
||||
|
||||
/**
|
||||
* This class is a base class for all TDLib TL-objects.
|
||||
*/
|
||||
class TlObject {
|
||||
public:
|
||||
/**
|
||||
* Returns an identifier, uniquely determining the TL-type of the object.
|
||||
*/
|
||||
virtual std::int32_t get_id() const = 0;
|
||||
|
||||
/**
|
||||
* Appends the object to the storer serializing object, a buffer of fixed length.
|
||||
* \param[in] s Storer to which the object will be appended.
|
||||
*/
|
||||
virtual void store(TlStorerUnsafe &s) const {
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends the object to the storer, calculating the TL-length of the serialized object.
|
||||
* \param[in] s Storer to which the object will be appended.
|
||||
*/
|
||||
virtual void store(TlStorerCalcLength &s) const {
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function for the to_string method. Appends a string representation of the object to the storer.
|
||||
* \param[in] s Storer to which the object string representation will be appended.
|
||||
* \param[in] field_name Object field_name if applicable.
|
||||
*/
|
||||
virtual void store(TlStorerToString &s, const char *field_name) const = 0;
|
||||
|
||||
/**
|
||||
* Default constructor.
|
||||
*/
|
||||
TlObject() = default;
|
||||
|
||||
/**
|
||||
* Deleted copy constructor.
|
||||
*/
|
||||
TlObject(const TlObject &) = delete;
|
||||
|
||||
/**
|
||||
* Deleted copy assignment operator.
|
||||
*/
|
||||
TlObject &operator=(const TlObject &) = delete;
|
||||
|
||||
/**
|
||||
* Default move constructor.
|
||||
*/
|
||||
TlObject(TlObject &&) = default;
|
||||
|
||||
/**
|
||||
* Default move assignment operator.
|
||||
*/
|
||||
TlObject &operator=(TlObject &&) = default;
|
||||
|
||||
/**
|
||||
* Virtual destructor.
|
||||
*/
|
||||
virtual ~TlObject() = default;
|
||||
};
|
||||
|
||||
/**
|
||||
* A smart wrapper to store a pointer to a TL-object.
|
||||
*/
|
||||
namespace tl {
|
||||
|
||||
template <class T>
|
||||
class unique_ptr {
|
||||
public:
|
||||
using pointer = T *;
|
||||
using element_type = T;
|
||||
|
||||
unique_ptr() noexcept = default;
|
||||
unique_ptr(const unique_ptr &other) = delete;
|
||||
unique_ptr &operator=(const unique_ptr &other) = delete;
|
||||
unique_ptr(unique_ptr &&other) noexcept : ptr_(other.release()) {
|
||||
}
|
||||
unique_ptr &operator=(unique_ptr &&other) noexcept {
|
||||
reset(other.release());
|
||||
return *this;
|
||||
}
|
||||
~unique_ptr() {
|
||||
reset();
|
||||
}
|
||||
|
||||
unique_ptr(std::nullptr_t) noexcept {
|
||||
}
|
||||
explicit unique_ptr(T *ptr) noexcept : ptr_(ptr) {
|
||||
}
|
||||
template <class S, class = std::enable_if_t<std::is_base_of<T, S>::value>>
|
||||
unique_ptr(unique_ptr<S> &&other) noexcept : ptr_(static_cast<S *>(other.release())) {
|
||||
}
|
||||
template <class S, class = std::enable_if_t<std::is_base_of<T, S>::value>>
|
||||
unique_ptr &operator=(unique_ptr<S> &&other) noexcept {
|
||||
reset(static_cast<T *>(other.release()));
|
||||
return *this;
|
||||
}
|
||||
void reset(T *new_ptr = nullptr) noexcept {
|
||||
delete ptr_;
|
||||
ptr_ = new_ptr;
|
||||
}
|
||||
T *release() noexcept {
|
||||
auto res = ptr_;
|
||||
ptr_ = nullptr;
|
||||
return res;
|
||||
}
|
||||
T *get() noexcept {
|
||||
return ptr_;
|
||||
}
|
||||
const T *get() const noexcept {
|
||||
return ptr_;
|
||||
}
|
||||
T *operator->() noexcept {
|
||||
return ptr_;
|
||||
}
|
||||
const T *operator->() const noexcept {
|
||||
return ptr_;
|
||||
}
|
||||
T &operator*() noexcept {
|
||||
return *ptr_;
|
||||
}
|
||||
const T &operator*() const noexcept {
|
||||
return *ptr_;
|
||||
}
|
||||
explicit operator bool() const noexcept {
|
||||
return ptr_ != nullptr;
|
||||
}
|
||||
|
||||
private:
|
||||
T *ptr_{nullptr};
|
||||
};
|
||||
|
||||
template <class T>
|
||||
bool operator==(std::nullptr_t, const unique_ptr<T> &p) {
|
||||
return !p;
|
||||
}
|
||||
template <class T>
|
||||
bool operator==(const unique_ptr<T> &p, std::nullptr_t) {
|
||||
return !p;
|
||||
}
|
||||
template <class T>
|
||||
bool operator!=(std::nullptr_t, const unique_ptr<T> &p) {
|
||||
return static_cast<bool>(p);
|
||||
}
|
||||
template <class T>
|
||||
bool operator!=(const unique_ptr<T> &p, std::nullptr_t) {
|
||||
return static_cast<bool>(p);
|
||||
}
|
||||
|
||||
} // namespace tl
|
||||
template <class Type>
|
||||
using tl_object_ptr = tl::unique_ptr<Type>;
|
||||
|
||||
/**
|
||||
* A function to create a dynamically allocated TL-object. Can be treated as an analogue of std::make_unique.
|
||||
* Usage example:
|
||||
* \code
|
||||
* auto get_authorization_state_request = td::make_tl_object<td::td_api::getAuthorizationState>();
|
||||
* auto message_text = td::make_tl_object<td::td_api::formattedText>("Hello, world!!!",
|
||||
* std::vector<td::tl_object_ptr<td::td_api::textEntity>>());
|
||||
* auto send_message_request = td::make_tl_object<td::td_api::sendMessage>(chat_id, 0, nullptr, nullptr,
|
||||
* td::make_tl_object<td::td_api::inputMessageText>(std::move(message_text), false, true));
|
||||
* \endcode
|
||||
*
|
||||
* \tparam Type Type of the TL-object to construct.
|
||||
* \param[in] args Arguments to pass to the object constructor.
|
||||
* \return Wrapped pointer to the created TL-object.
|
||||
*/
|
||||
template <class Type, class... Args>
|
||||
tl_object_ptr<Type> make_tl_object(Args &&... args) {
|
||||
return tl_object_ptr<Type>(new Type(std::forward<Args>(args)...));
|
||||
}
|
||||
|
||||
/**
|
||||
* A function to downcast a wrapped pointer to a TL-object to a pointer to its subclass.
|
||||
* Casting an object to an incorrect type will lead to undefined behaviour.
|
||||
* Examples of usage:
|
||||
* \code
|
||||
* td::tl_object_ptr<td::td_api::callState> call_state = ...;
|
||||
* switch (call_state->get_id()) {
|
||||
* case td::td_api::callStatePending::ID: {
|
||||
* auto state = td::move_tl_object_as<td::td_api::callStatePending>(call_state);
|
||||
* // use state
|
||||
* break;
|
||||
* }
|
||||
* case td::td_api::callStateExchangingKeys::ID: {
|
||||
* // no additional fields, so cast isn't needed
|
||||
* break;
|
||||
* }
|
||||
* case td::td_api::callStateReady::ID: {
|
||||
* auto state = td::move_tl_object_as<td::td_api::callStateReady>(call_state);
|
||||
* // use state
|
||||
* break;
|
||||
* }
|
||||
* case td::td_api::callStateHangingUp::ID: {
|
||||
* // no additional fields, so cast isn't needed
|
||||
* break;
|
||||
* }
|
||||
* case td::td_api::callStateDiscarded::ID: {
|
||||
* auto state = td::move_tl_object_as<td::td_api::callStateDiscarded>(call_state);
|
||||
* // use state
|
||||
* break;
|
||||
* }
|
||||
* case td::td_api::callStateError::ID: {
|
||||
* auto state = td::move_tl_object_as<td::td_api::callStateError>(call_state);
|
||||
* // use state
|
||||
* break;
|
||||
* }
|
||||
* default:
|
||||
* assert(false);
|
||||
* }
|
||||
* \endcode
|
||||
*
|
||||
* \tparam ToT Type of a TL-object to move to.
|
||||
* \tparam FromT Type of a TL-object to move from, this is auto-deduced.
|
||||
* \param[in] from Wrapped pointer to a TL-object.
|
||||
*/
|
||||
template <class ToT, class FromT>
|
||||
tl_object_ptr<ToT> move_tl_object_as(tl_object_ptr<FromT> &from) {
|
||||
return tl_object_ptr<ToT>(static_cast<ToT *>(from.release()));
|
||||
}
|
||||
|
||||
/**
|
||||
* \overload
|
||||
*/
|
||||
template <class ToT, class FromT>
|
||||
tl_object_ptr<ToT> move_tl_object_as(tl_object_ptr<FromT> &&from) {
|
||||
return tl_object_ptr<ToT>(static_cast<ToT *>(from.release()));
|
||||
}
|
||||
|
||||
} // namespace td
|
3
tdlib/lib/cmake/Td/TdConfig.cmake
Normal file
|
@ -0,0 +1,3 @@
|
|||
include(CMakeFindDependencyMacro)
|
||||
#TODO: write all external dependencies
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/TdTargets.cmake")
|
47
tdlib/lib/cmake/Td/TdConfigVersion.cmake
Normal file
|
@ -0,0 +1,47 @@
|
|||
# This is a basic version file for the Config-mode of find_package().
|
||||
# It is used by write_basic_package_version_file() as input file for configure_file()
|
||||
# to create a version-file which can be installed along a config.cmake file.
|
||||
#
|
||||
# The created file sets PACKAGE_VERSION_EXACT if the current version string and
|
||||
# the requested version string are exactly the same and it sets
|
||||
# PACKAGE_VERSION_COMPATIBLE if the current version is equal to the requested version.
|
||||
# The tweak version component is ignored.
|
||||
# The variable CVF_VERSION must be set before calling configure_file().
|
||||
|
||||
|
||||
set(PACKAGE_VERSION "1.6.0")
|
||||
|
||||
if("1.6.0" MATCHES "^([0-9]+\\.[0-9]+\\.[0-9]+)\\.") # strip the tweak version
|
||||
set(CVF_VERSION_NO_TWEAK "${CMAKE_MATCH_1}")
|
||||
else()
|
||||
set(CVF_VERSION_NO_TWEAK "1.6.0")
|
||||
endif()
|
||||
|
||||
if(PACKAGE_FIND_VERSION MATCHES "^([0-9]+\\.[0-9]+\\.[0-9]+)\\.") # strip the tweak version
|
||||
set(REQUESTED_VERSION_NO_TWEAK "${CMAKE_MATCH_1}")
|
||||
else()
|
||||
set(REQUESTED_VERSION_NO_TWEAK "${PACKAGE_FIND_VERSION}")
|
||||
endif()
|
||||
|
||||
if(REQUESTED_VERSION_NO_TWEAK STREQUAL CVF_VERSION_NO_TWEAK)
|
||||
set(PACKAGE_VERSION_COMPATIBLE TRUE)
|
||||
else()
|
||||
set(PACKAGE_VERSION_COMPATIBLE FALSE)
|
||||
endif()
|
||||
|
||||
if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
|
||||
set(PACKAGE_VERSION_EXACT TRUE)
|
||||
endif()
|
||||
|
||||
|
||||
# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
|
||||
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "4" STREQUAL "")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
|
||||
if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "4")
|
||||
math(EXPR installedBits "4 * 8")
|
||||
set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
|
||||
set(PACKAGE_VERSION_UNSUITABLE TRUE)
|
||||
endif()
|
109
tdlib/lib/cmake/Td/TdTargets-release.cmake
Normal file
|
@ -0,0 +1,109 @@
|
|||
#----------------------------------------------------------------
|
||||
# Generated CMake target import file for configuration "Release".
|
||||
#----------------------------------------------------------------
|
||||
|
||||
# Commands may need to know the format version.
|
||||
set(CMAKE_IMPORT_FILE_VERSION 1)
|
||||
|
||||
# Import target "Td::tdutils" for configuration "Release"
|
||||
set_property(TARGET Td::tdutils APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
|
||||
set_target_properties(Td::tdutils PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
|
||||
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libtdutils.a"
|
||||
)
|
||||
|
||||
list(APPEND _IMPORT_CHECK_TARGETS Td::tdutils )
|
||||
list(APPEND _IMPORT_CHECK_FILES_FOR_Td::tdutils "${_IMPORT_PREFIX}/lib/libtdutils.a" )
|
||||
|
||||
# Import target "Td::tdactor" for configuration "Release"
|
||||
set_property(TARGET Td::tdactor APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
|
||||
set_target_properties(Td::tdactor PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
|
||||
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libtdactor.a"
|
||||
)
|
||||
|
||||
list(APPEND _IMPORT_CHECK_TARGETS Td::tdactor )
|
||||
list(APPEND _IMPORT_CHECK_FILES_FOR_Td::tdactor "${_IMPORT_PREFIX}/lib/libtdactor.a" )
|
||||
|
||||
# Import target "Td::tdnet" for configuration "Release"
|
||||
set_property(TARGET Td::tdnet APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
|
||||
set_target_properties(Td::tdnet PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
|
||||
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libtdnet.a"
|
||||
)
|
||||
|
||||
list(APPEND _IMPORT_CHECK_TARGETS Td::tdnet )
|
||||
list(APPEND _IMPORT_CHECK_FILES_FOR_Td::tdnet "${_IMPORT_PREFIX}/lib/libtdnet.a" )
|
||||
|
||||
# Import target "Td::tdsqlite" for configuration "Release"
|
||||
set_property(TARGET Td::tdsqlite APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
|
||||
set_target_properties(Td::tdsqlite PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
|
||||
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libtdsqlite.a"
|
||||
)
|
||||
|
||||
list(APPEND _IMPORT_CHECK_TARGETS Td::tdsqlite )
|
||||
list(APPEND _IMPORT_CHECK_FILES_FOR_Td::tdsqlite "${_IMPORT_PREFIX}/lib/libtdsqlite.a" )
|
||||
|
||||
# Import target "Td::tddb" for configuration "Release"
|
||||
set_property(TARGET Td::tddb APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
|
||||
set_target_properties(Td::tddb PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
|
||||
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libtddb.a"
|
||||
)
|
||||
|
||||
list(APPEND _IMPORT_CHECK_TARGETS Td::tddb )
|
||||
list(APPEND _IMPORT_CHECK_FILES_FOR_Td::tddb "${_IMPORT_PREFIX}/lib/libtddb.a" )
|
||||
|
||||
# Import target "Td::tdjson" for configuration "Release"
|
||||
set_property(TARGET Td::tdjson APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
|
||||
set_target_properties(Td::tdjson PROPERTIES
|
||||
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libtdjson.so.1.6.0"
|
||||
IMPORTED_SONAME_RELEASE "libtdjson.so.1.6.0"
|
||||
)
|
||||
|
||||
list(APPEND _IMPORT_CHECK_TARGETS Td::tdjson )
|
||||
list(APPEND _IMPORT_CHECK_FILES_FOR_Td::tdjson "${_IMPORT_PREFIX}/lib/libtdjson.so.1.6.0" )
|
||||
|
||||
# Import target "Td::tdjson_static" for configuration "Release"
|
||||
set_property(TARGET Td::tdjson_static APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
|
||||
set_target_properties(Td::tdjson_static PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
|
||||
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libtdjson_static.a"
|
||||
)
|
||||
|
||||
list(APPEND _IMPORT_CHECK_TARGETS Td::tdjson_static )
|
||||
list(APPEND _IMPORT_CHECK_FILES_FOR_Td::tdjson_static "${_IMPORT_PREFIX}/lib/libtdjson_static.a" )
|
||||
|
||||
# Import target "Td::tdjson_private" for configuration "Release"
|
||||
set_property(TARGET Td::tdjson_private APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
|
||||
set_target_properties(Td::tdjson_private PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
|
||||
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libtdjson_private.a"
|
||||
)
|
||||
|
||||
list(APPEND _IMPORT_CHECK_TARGETS Td::tdjson_private )
|
||||
list(APPEND _IMPORT_CHECK_FILES_FOR_Td::tdjson_private "${_IMPORT_PREFIX}/lib/libtdjson_private.a" )
|
||||
|
||||
# Import target "Td::tdclient" for configuration "Release"
|
||||
set_property(TARGET Td::tdclient APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
|
||||
set_target_properties(Td::tdclient PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
|
||||
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libtdclient.a"
|
||||
)
|
||||
|
||||
list(APPEND _IMPORT_CHECK_TARGETS Td::tdclient )
|
||||
list(APPEND _IMPORT_CHECK_FILES_FOR_Td::tdclient "${_IMPORT_PREFIX}/lib/libtdclient.a" )
|
||||
|
||||
# Import target "Td::tdcore" for configuration "Release"
|
||||
set_property(TARGET Td::tdcore APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
|
||||
set_target_properties(Td::tdcore PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
|
||||
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libtdcore.a"
|
||||
)
|
||||
|
||||
list(APPEND _IMPORT_CHECK_TARGETS Td::tdcore )
|
||||
list(APPEND _IMPORT_CHECK_FILES_FOR_Td::tdcore "${_IMPORT_PREFIX}/lib/libtdcore.a" )
|
||||
|
||||
# Commands beyond this point should not need to know the version.
|
||||
set(CMAKE_IMPORT_FILE_VERSION)
|
190
tdlib/lib/cmake/Td/TdTargets.cmake
Normal file
|
@ -0,0 +1,190 @@
|
|||
# Generated by CMake
|
||||
|
||||
if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5)
|
||||
message(FATAL_ERROR "CMake >= 2.6.0 required")
|
||||
endif()
|
||||
cmake_policy(PUSH)
|
||||
cmake_policy(VERSION 2.6)
|
||||
#----------------------------------------------------------------
|
||||
# Generated CMake target import file.
|
||||
#----------------------------------------------------------------
|
||||
|
||||
# Commands may need to know the format version.
|
||||
set(CMAKE_IMPORT_FILE_VERSION 1)
|
||||
|
||||
# Protect against multiple inclusion, which would fail when already imported targets are added once more.
|
||||
set(_targetsDefined)
|
||||
set(_targetsNotDefined)
|
||||
set(_expectedTargets)
|
||||
foreach(_expectedTarget Td::tdutils Td::tdactor Td::tdnet Td::tdsqlite Td::tddb Td::tdjson Td::TdJson Td::tdjson_static Td::TdJsonStatic Td::tdjson_private Td::tdclient Td::tdcore Td::TdStatic)
|
||||
list(APPEND _expectedTargets ${_expectedTarget})
|
||||
if(NOT TARGET ${_expectedTarget})
|
||||
list(APPEND _targetsNotDefined ${_expectedTarget})
|
||||
endif()
|
||||
if(TARGET ${_expectedTarget})
|
||||
list(APPEND _targetsDefined ${_expectedTarget})
|
||||
endif()
|
||||
endforeach()
|
||||
if("${_targetsDefined}" STREQUAL "${_expectedTargets}")
|
||||
unset(_targetsDefined)
|
||||
unset(_targetsNotDefined)
|
||||
unset(_expectedTargets)
|
||||
set(CMAKE_IMPORT_FILE_VERSION)
|
||||
cmake_policy(POP)
|
||||
return()
|
||||
endif()
|
||||
if(NOT "${_targetsDefined}" STREQUAL "")
|
||||
message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n")
|
||||
endif()
|
||||
unset(_targetsDefined)
|
||||
unset(_targetsNotDefined)
|
||||
unset(_expectedTargets)
|
||||
|
||||
|
||||
# Compute the installation prefix relative to this file.
|
||||
get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
|
||||
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
|
||||
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
|
||||
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
|
||||
if(_IMPORT_PREFIX STREQUAL "/")
|
||||
set(_IMPORT_PREFIX "")
|
||||
endif()
|
||||
|
||||
# Create imported target Td::tdutils
|
||||
add_library(Td::tdutils STATIC IMPORTED)
|
||||
|
||||
set_target_properties(Td::tdutils PROPERTIES
|
||||
INTERFACE_LINK_LIBRARIES "-pthread;/usr/lib/libcrypto.so;\$<LINK_ONLY:dl>;/usr/lib/libz.so;/usr/lib/libz.so"
|
||||
)
|
||||
|
||||
# Create imported target Td::tdactor
|
||||
add_library(Td::tdactor STATIC IMPORTED)
|
||||
|
||||
set_target_properties(Td::tdactor PROPERTIES
|
||||
INTERFACE_LINK_LIBRARIES "Td::tdutils"
|
||||
)
|
||||
|
||||
# Create imported target Td::tdnet
|
||||
add_library(Td::tdnet STATIC IMPORTED)
|
||||
|
||||
set_target_properties(Td::tdnet PROPERTIES
|
||||
INTERFACE_LINK_LIBRARIES "Td::tdutils;Td::tdactor;\$<LINK_ONLY:dl>;/usr/lib/libz.so;/usr/lib/libssl.so;/usr/lib/libcrypto.so"
|
||||
)
|
||||
|
||||
# Create imported target Td::tdsqlite
|
||||
add_library(Td::tdsqlite STATIC IMPORTED)
|
||||
|
||||
set_target_properties(Td::tdsqlite PROPERTIES
|
||||
INTERFACE_LINK_LIBRARIES "/usr/lib/libcrypto.so;\$<LINK_ONLY:dl>;/usr/lib/libz.so"
|
||||
)
|
||||
|
||||
# Create imported target Td::tddb
|
||||
add_library(Td::tddb STATIC IMPORTED)
|
||||
|
||||
set_target_properties(Td::tddb PROPERTIES
|
||||
INTERFACE_LINK_LIBRARIES "Td::tdactor;Td::tdutils;\$<LINK_ONLY:Td::tdsqlite>"
|
||||
)
|
||||
|
||||
# Create imported target Td::tdjson
|
||||
add_library(Td::tdjson SHARED IMPORTED)
|
||||
|
||||
set_target_properties(Td::tdjson PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
|
||||
)
|
||||
|
||||
# Create imported target Td::TdJson
|
||||
add_library(Td::TdJson INTERFACE IMPORTED)
|
||||
|
||||
set_target_properties(Td::TdJson PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
|
||||
INTERFACE_LINK_LIBRARIES "Td::tdjson"
|
||||
)
|
||||
|
||||
# Create imported target Td::tdjson_static
|
||||
add_library(Td::tdjson_static STATIC IMPORTED)
|
||||
|
||||
set_target_properties(Td::tdjson_static PROPERTIES
|
||||
INTERFACE_COMPILE_DEFINITIONS "TDJSON_STATIC_DEFINE"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
|
||||
INTERFACE_LINK_LIBRARIES "\$<LINK_ONLY:Td::tdjson_private>"
|
||||
)
|
||||
|
||||
# Create imported target Td::TdJsonStatic
|
||||
add_library(Td::TdJsonStatic INTERFACE IMPORTED)
|
||||
|
||||
set_target_properties(Td::TdJsonStatic PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
|
||||
INTERFACE_LINK_LIBRARIES "Td::tdjson_static"
|
||||
)
|
||||
|
||||
# Create imported target Td::tdjson_private
|
||||
add_library(Td::tdjson_private STATIC IMPORTED)
|
||||
|
||||
set_target_properties(Td::tdjson_private PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
|
||||
INTERFACE_LINK_LIBRARIES "Td::tdclient;Td::tdutils"
|
||||
)
|
||||
|
||||
# Create imported target Td::tdclient
|
||||
add_library(Td::tdclient STATIC IMPORTED)
|
||||
|
||||
set_target_properties(Td::tdclient PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
|
||||
INTERFACE_LINK_LIBRARIES "\$<LINK_ONLY:Td::tdcore>"
|
||||
)
|
||||
|
||||
# Create imported target Td::tdcore
|
||||
add_library(Td::tdcore STATIC IMPORTED)
|
||||
|
||||
set_target_properties(Td::tdcore PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
|
||||
INTERFACE_LINK_LIBRARIES "Td::tdactor;Td::tdutils;Td::tdnet;Td::tddb;/usr/lib/libcrypto.so;\$<LINK_ONLY:dl>;/usr/lib/libz.so"
|
||||
)
|
||||
|
||||
# Create imported target Td::TdStatic
|
||||
add_library(Td::TdStatic INTERFACE IMPORTED)
|
||||
|
||||
set_target_properties(Td::TdStatic PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
|
||||
INTERFACE_LINK_LIBRARIES "Td::tdclient"
|
||||
)
|
||||
|
||||
if(CMAKE_VERSION VERSION_LESS 3.0.0)
|
||||
message(FATAL_ERROR "This file relies on consumers using CMake 3.0.0 or greater.")
|
||||
endif()
|
||||
|
||||
# Load information for each installed configuration.
|
||||
get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
|
||||
file(GLOB CONFIG_FILES "${_DIR}/TdTargets-*.cmake")
|
||||
foreach(f ${CONFIG_FILES})
|
||||
include(${f})
|
||||
endforeach()
|
||||
|
||||
# Cleanup temporary variables.
|
||||
set(_IMPORT_PREFIX)
|
||||
|
||||
# Loop over all imported files and verify that they actually exist
|
||||
foreach(target ${_IMPORT_CHECK_TARGETS} )
|
||||
foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
|
||||
if(NOT EXISTS "${file}" )
|
||||
message(FATAL_ERROR "The imported target \"${target}\" references the file
|
||||
\"${file}\"
|
||||
but this file does not exist. Possible reasons include:
|
||||
* The file was deleted, renamed, or moved to another location.
|
||||
* An install or uninstall procedure did not complete successfully.
|
||||
* The installation package was faulty and contained
|
||||
\"${CMAKE_CURRENT_LIST_FILE}\"
|
||||
but not all the files it references.
|
||||
")
|
||||
endif()
|
||||
endforeach()
|
||||
unset(_IMPORT_CHECK_FILES_FOR_${target})
|
||||
endforeach()
|
||||
unset(_IMPORT_CHECK_TARGETS)
|
||||
|
||||
# This file does not depend on other imported targets which have
|
||||
# been exported from the same project but in a separate export set.
|
||||
|
||||
# Commands beyond this point should not need to know the version.
|
||||
set(CMAKE_IMPORT_FILE_VERSION)
|
||||
cmake_policy(POP)
|
70
translations/harbour-fernschreiber-de.ts
Normal file
|
@ -0,0 +1,70 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1">
|
||||
<context>
|
||||
<name>AboutPage</name>
|
||||
<message>
|
||||
<source>About Fernschreiber</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A Telegram client for Sailfish OS</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>By Sebastian J. Wolf</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send E-Mail</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Licensed under GNU GPLv3</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Sources on GitHub</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This product uses the Telegram API but is not endorsed or certified by Telegram</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Terms of Service</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Privacy Policy</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Credits</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This project uses the Telegram Database Library (TDLib). Thanks for making it available under the conditions of the Boost Software License 1.0!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open Telegram Database Library on GitHub</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>About Telegram</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>OverviewPage</name>
|
||||
<message>
|
||||
<source>About Fernschreiber</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Welcome to Fernschreiber</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
70
translations/harbour-fernschreiber.ts
Normal file
|
@ -0,0 +1,70 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1">
|
||||
<context>
|
||||
<name>AboutPage</name>
|
||||
<message>
|
||||
<source>About Fernschreiber</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A Telegram client for Sailfish OS</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>By Sebastian J. Wolf</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send E-Mail</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Licensed under GNU GPLv3</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Sources on GitHub</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This product uses the Telegram API but is not endorsed or certified by Telegram</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Terms of Service</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Privacy Policy</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Credits</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This project uses the Telegram Database Library (TDLib). Thanks for making it available under the conditions of the Boost Software License 1.0!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open Telegram Database Library on GitHub</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>About Telegram</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>OverviewPage</name>
|
||||
<message>
|
||||
<source>About Fernschreiber</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Welcome to Fernschreiber</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|