Native colors and new message create window
|
|
@ -1,8 +1,8 @@
|
|||
|
||||
## v0.6.8
|
||||
|
||||
* OAuth
|
||||
* New translation: netherland
|
||||
* OAuth2 as signup method
|
||||
* New translation: Dutch
|
||||
|
||||
## v0.6.7
|
||||
|
||||
|
|
@ -210,4 +210,4 @@
|
|||
|
||||
# Translations
|
||||
|
||||
* German, Spanish
|
||||
* German, Spanish
|
||||
|
|
|
|||
|
|
@ -127,7 +127,8 @@ ToDo
|
|||
* [Google Playstore](https://play.google.com/store/apps/details?id=org.qtproject.friendiqa)
|
||||
* Arch User Repository: <https://aur.archlinux.org/packages/friendiqa/>
|
||||
* Flatpak: <https://friendiqa.ma-nic.de/friendiqa.flatpakref>
|
||||
* Flatpak for Mobile Linux: <https://friendiqa.ma-nic.de/friendiqaMobile.flatpakref>
|
||||
|
||||
## License
|
||||
|
||||
Pubished under the [GPL v3](http://gplv3.fsf.org) with the exception of the Openssl library, which is published under OpenSSL License.
|
||||
Pubished under the [GPL v3](http://gplv3.fsf.org) with the exception of the Openssl library, which is published under OpenSSL License.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0"?>
|
||||
<manifest package="org.qtproject.friendiqa" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.6.8" android:versionCode="34" android:installLocation="auto">
|
||||
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="31"/>
|
||||
<!--<uses-sdk android:minSdkVersion="24" android:targetSdkVersion="33"/> -->
|
||||
|
||||
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
|
||||
|
||||
|
|
@ -132,5 +132,9 @@
|
|||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
|
||||
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
|
||||
|
||||
</manifest>
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ buildscript {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.5.2'
|
||||
classpath "com.android.tools.build:gradle:4.1.0"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -25,7 +25,7 @@ dependencies {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
compile 'androidx.appcompat:appcompat:1.1.0'
|
||||
compile 'androidx.appcompat:appcompat:1.4.2'
|
||||
}
|
||||
|
||||
android {
|
||||
|
|
@ -44,8 +44,14 @@ android {
|
|||
|
||||
compileSdkVersion androidCompileSdkVersion.toInteger()
|
||||
|
||||
buildToolsVersion '28.0.3'
|
||||
buildToolsVersion '31.0.0'
|
||||
compileSdkVersion 33
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 26
|
||||
targetSdkVersion 31
|
||||
resConfigs "en"
|
||||
}
|
||||
sourceSets {
|
||||
main {
|
||||
manifest.srcFile 'AndroidManifest.xml'
|
||||
|
|
@ -67,10 +73,6 @@ android {
|
|||
aaptOptions {
|
||||
noCompress 'rcc'
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
resConfigs "en"
|
||||
}
|
||||
}
|
||||
apply from: "androidnative.gradle"
|
||||
setAndroidNativePath("/../androidnative.pri");
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
|
|
|||
|
|
@ -10,15 +10,15 @@ import org.qtproject.qt5.android.QtNative;
|
|||
//import androidnative.friendiqa.FriendiqaQtService;
|
||||
|
||||
public class FriendiqaService extends JobService{
|
||||
private static String TAG = "AndroidNative";
|
||||
private static String TAG = "FriendiqaService";
|
||||
//Log.e(TAG,"Service");
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onStartJob(JobParameters params) {
|
||||
//Log.d(TAG,"Friendiqa JobService");
|
||||
Log.d(TAG,"Friendiqa JobService");
|
||||
Context context = this.getApplicationContext();
|
||||
AndroidNativeService fs = new AndroidNativeService();
|
||||
AndroidNativeService fs = new AndroidNativeService();
|
||||
fs.startQtService(context);
|
||||
jobFinished(params,false);
|
||||
//Intent serviceIntent = new Intent(this, AndroidNativeService.class);
|
||||
|
|
|
|||
|
|
@ -1,62 +0,0 @@
|
|||
import QtQuick 2.2
|
||||
import QtQuick.Window 2.1
|
||||
import QuickAndroid 0.1
|
||||
import QuickAndroid.Styles 0.1
|
||||
import "./theme"
|
||||
|
||||
Page {
|
||||
objectName: "ComponentPage";
|
||||
|
||||
property var pages: [
|
||||
{
|
||||
name: "Image Picker",
|
||||
demo: "imagePicker/ImagePickerDemo.qml",
|
||||
description: "Pick photo via Java language binding"
|
||||
},{
|
||||
name: "Toast",
|
||||
demo: "toast/ToastDemo.qml",
|
||||
description: "Toast Demonstration"
|
||||
},{
|
||||
name: "Notification",
|
||||
demo: "notification/NotificationDemo.qml",
|
||||
description: "Demonstrate how to use SystemDispatcher to send notification"
|
||||
},{
|
||||
name: "Information",
|
||||
demo: "info/InfoDemo.qml",
|
||||
description: "Android System Information"
|
||||
},{
|
||||
name: "Status Bar",
|
||||
demo: "statusbar/StatusBarDemo.qml",
|
||||
description: "Config Status Bar"
|
||||
}
|
||||
|
||||
];
|
||||
|
||||
actionBar: ActionBar {
|
||||
id : actionBar
|
||||
iconSource: A.drawable("ic_menu",Constants.black87)
|
||||
title: "AndroidNative Component List"
|
||||
showIcon: false
|
||||
actionButtonEnabled: false
|
||||
}
|
||||
|
||||
VisualDataModel {
|
||||
id: visualDataModel
|
||||
delegate: ListItem {
|
||||
title: modelData.name
|
||||
subtitle: modelData.description
|
||||
onClicked: {
|
||||
present(Qt.resolvedUrl(modelData.demo));
|
||||
}
|
||||
}
|
||||
|
||||
model: pages;
|
||||
}
|
||||
|
||||
ListView {
|
||||
anchors.fill: parent
|
||||
|
||||
model : visualDataModel
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
AndroidNative Example Program
|
||||
=====================
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
* Qt Android SDK >= 5.6
|
||||
* Android SDK
|
||||
|
||||
Check this article for how to setup Qt and Android SDK:
|
||||
|
||||
[Getting Started with Qt for Android](http://qt-project.org/doc/qt-5/androidgs.html)
|
||||
|
||||
Build Instruction
|
||||
-----------------
|
||||
|
||||
1. Run `qpm install` to get required packages
|
||||
1. Open androidnativeexample.pro by Qt Creator
|
||||
1. Press the "Projects" tab. Make sure the "Android for xxx" kit has been selected
|
||||
1. Plug a Android device to your computer
|
||||
1. Press "Build" -> "Run"
|
||||
1. The program will be deployed to your device. It is so easy!
|
||||
|
||||

|
||||
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<manifest package="androidnative.example" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto">
|
||||
<application android:hardwareAccelerated="true"
|
||||
android:name="org.qtproject.qt5.android.bindings.QtApplication"
|
||||
android:theme="@style/AppTheme"
|
||||
android:label="Android Native Example" android:icon="@drawable/icon">
|
||||
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|locale|fontScale|keyboard|keyboardHidden|navigation"
|
||||
android:name="androidnative.example.ExampleActivity"
|
||||
android:label="Android Native Example"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme"
|
||||
android:launchMode="singleTop">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
<meta-data android:name="android.app.lib_name" android:value="androidnativeexample"/>
|
||||
<meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
|
||||
<meta-data android:name="android.app.repository" android:value="default"/>
|
||||
<meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
|
||||
<meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/>
|
||||
<!-- Deploy Qt libs as part of package -->
|
||||
<meta-data android:name="android.app.bundle_local_qt_libs" android:value="1"/>
|
||||
<meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/>
|
||||
<meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/>
|
||||
<!-- Run with local libs -->
|
||||
<meta-data android:name="android.app.use_local_qt_libs" android:value="1"/>
|
||||
<meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
|
||||
<meta-data android:name="android.app.load_local_libs" android:value="plugins/platforms/android/libqtforandroid.so:lib/libQt5QuickParticles.so"/>
|
||||
<meta-data android:name="android.app.load_local_jars" android:value="jar/QtAndroid.jar:jar/QtAndroidAccessibility.jar:jar/QtAndroid-bundled.jar:jar/QtAndroidAccessibility-bundled.jar"/>
|
||||
<meta-data android:name="android.app.static_init_classes" android:value=""/>
|
||||
<!-- Messages maps -->
|
||||
<meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
|
||||
<meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
|
||||
<meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/>
|
||||
<!-- Messages maps -->
|
||||
|
||||
<!-- Splash screen -->
|
||||
<meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/splash"/>
|
||||
<!-- Splash screen -->
|
||||
</activity>
|
||||
</application>
|
||||
<uses-sdk android:minSdkVersion="18" android:targetSdkVersion="21"/>
|
||||
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
|
||||
|
||||
<!-- The following comment will be replaced upon deployment with default permissions based on the dependencies of the application.
|
||||
Remove the comment if you do not require these default permissions. -->
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
|
||||
|
||||
<!-- The following comment will be replaced upon deployment with default features based on the dependencies of the application.
|
||||
Remove the comment if you do not require these default features. -->
|
||||
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>
|
||||
|
||||
</manifest>
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
|
||||
// Obtain androidPackageSourceDir
|
||||
// androidPackageSourceDir is the absolute path of the folder containing build.gradle and AndroidManifests.xml
|
||||
// This code also works with androiddeployqt.
|
||||
|
||||
import groovy.json.JsonSlurper
|
||||
|
||||
String getAndroidPackageSourceDir() {
|
||||
String res = System.getProperty("user.dir");
|
||||
|
||||
FileTree tree = fileTree(dir: res + "/..").include("android*deployment-settings.json");
|
||||
|
||||
if (tree.getFiles().size() > 0) {
|
||||
def inputFile = tree.getFiles().toArray()[0];
|
||||
def InputJSON = new JsonSlurper().parseText(inputFile.text);
|
||||
res = InputJSON["android-package-source-directory"]
|
||||
} else {
|
||||
println("android*deployment-settings.json not found. Set androidPackageSourceDir to user.dir");
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
String setAndroidNativePath(String path) {
|
||||
String androidPackageSourceDir = getAndroidPackageSourceDir();
|
||||
String androidNativePath = androidPackageSourceDir + path + "/java/src";
|
||||
LinkedHashSet hash = android.sourceSets.main.java.srcDirs;
|
||||
hash.add(androidNativePath);
|
||||
android.sourceSets.main.java.srcDirs = hash;
|
||||
}
|
||||
|
||||
ext {
|
||||
setAndroidNativePath = this.&setAndroidNativePath;
|
||||
}
|
||||
|
|
@ -1,60 +0,0 @@
|
|||
|
||||
buildscript {
|
||||
repositories {
|
||||
jcenter()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:1.3.0'
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
jcenter()
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
dependencies {
|
||||
compile fileTree(dir: 'libs', include: ['*.jar'])
|
||||
}
|
||||
|
||||
android {
|
||||
/*******************************************************
|
||||
* The following variables:
|
||||
* - androidBuildToolsVersion,
|
||||
* - androidCompileSdkVersion
|
||||
* - qt5AndroidDir - holds the path to qt android files
|
||||
* needed to build any Qt application
|
||||
* on Android.
|
||||
*
|
||||
* are defined in gradle.properties file. This file is
|
||||
* updated by QtCreator and androiddeployqt tools.
|
||||
* Changing them manually might break the compilation!
|
||||
*******************************************************/
|
||||
|
||||
compileSdkVersion androidCompileSdkVersion.toInteger()
|
||||
|
||||
buildToolsVersion androidBuildToolsVersion
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
manifest.srcFile 'AndroidManifest.xml'
|
||||
java.srcDirs = [qt5AndroidDir + '/src', 'src', 'java']
|
||||
aidl.srcDirs = [qt5AndroidDir + '/src', 'src', 'aidl']
|
||||
res.srcDirs = [qt5AndroidDir + '/res', 'res']
|
||||
resources.srcDirs = ['src']
|
||||
renderscript.srcDirs = ['src']
|
||||
assets.srcDirs = ['assets']
|
||||
jniLibs.srcDirs = ['libs']
|
||||
}
|
||||
}
|
||||
lintOptions {
|
||||
abortOnError false
|
||||
}
|
||||
}
|
||||
|
||||
apply from: "androidnative.gradle"
|
||||
setAndroidNativePath("/../../..");
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
## This file is automatically generated by QtCreator.
|
||||
#
|
||||
# This file must *NOT* be checked into Version Control Systems,
|
||||
# as it contains information specific to your local configuration.
|
||||
|
||||
androidBuildToolsVersion=25.0.3
|
||||
androidCompileSdkVersion=25
|
||||
buildDir=.build
|
||||
qt5AndroidDir=/home/pankraz/Qt/5.9.1/android_armv7/src/android/java
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
#Thu Feb 16 01:04:18 HKT 2017
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.2-all.zip
|
||||
|
|
@ -1,160 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
##
|
||||
##############################################################################
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS=""
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
warn ( ) {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die ( ) {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
esac
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
# Need this for relative symlinks.
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG=`dirname "$PRG"`"/$link"
|
||||
fi
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >/dev/null
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD="java"
|
||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
MAX_FD="$MAX_FD_LIMIT"
|
||||
fi
|
||||
ulimit -n $MAX_FD
|
||||
if [ $? -ne 0 ] ; then
|
||||
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||
fi
|
||||
else
|
||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||
fi
|
||||
fi
|
||||
|
||||
# For Darwin, add options to specify how the application appears in the dock
|
||||
if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin, switch paths to Windows format before running java
|
||||
if $cygwin ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||
SEP=""
|
||||
for dir in $ROOTDIRSRAW ; do
|
||||
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||
SEP="|"
|
||||
done
|
||||
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||
# Add a user-defined pattern to the cygpath arguments
|
||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||
fi
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
i=0
|
||||
for arg in "$@" ; do
|
||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||
|
||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=$((i+1))
|
||||
done
|
||||
case $i in
|
||||
(0) set -- ;;
|
||||
(1) set -- "$args0" ;;
|
||||
(2) set -- "$args0" "$args1" ;;
|
||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
|
||||
function splitJvmOpts() {
|
||||
JVM_OPTS=("$@")
|
||||
}
|
||||
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
|
||||
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
|
||||
|
||||
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
|
||||
|
|
@ -1,90 +0,0 @@
|
|||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windowz variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
if "%@eval[2+2]" == "4" goto 4NT_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
goto execute
|
||||
|
||||
:4NT_args
|
||||
@rem Get arguments from the 4NT Shell from JP Software
|
||||
set CMD_LINE_ARGS=%$
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
## This file is automatically generated by QtCreator.
|
||||
#
|
||||
# This file must *NOT* be checked into Version Control Systems,
|
||||
# as it contains information specific to your local configuration.
|
||||
|
||||
sdk.dir=/home/pankraz/android-sdk_alt
|
||||
|
Before Width: | Height: | Size: 4.5 KiB |
|
|
@ -1,12 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape android:shape="rectangle" >
|
||||
<solid android:color="#FFFFFFFF"/>
|
||||
</shape>
|
||||
</item>
|
||||
<item>
|
||||
<bitmap android:src="@drawable/icon"
|
||||
android:gravity="center" />
|
||||
</item>
|
||||
</layer-list>
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<style name="AppTheme" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar">
|
||||
<item name="android:windowBackground">@drawable/splash</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources>
|
||||
<array name="qt_sources">
|
||||
<item>https://download.qt-project.org/ministro/android/qt5/qt-5.4</item>
|
||||
</array>
|
||||
|
||||
<!-- The following is handled automatically by the deployment tool. It should
|
||||
not be edited manually. -->
|
||||
|
||||
<array name="bundled_libs">
|
||||
<!-- %%INSERT_EXTRA_LIBS%% -->
|
||||
</array>
|
||||
|
||||
<array name="qt_libs">
|
||||
<!-- %%INSERT_QT_LIBS%% -->
|
||||
</array>
|
||||
|
||||
<array name="bundled_in_lib">
|
||||
<!-- %%INSERT_BUNDLED_IN_LIB%% -->
|
||||
</array>
|
||||
<array name="bundled_in_assets">
|
||||
<!-- %%INSERT_BUNDLED_IN_ASSETS%% -->
|
||||
</array>
|
||||
|
||||
</resources>
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
package androidnative.example;
|
||||
|
||||
import androidnative.AndroidNativeActivity;
|
||||
|
||||
/**
|
||||
* Created by benlau on 8/3/2017.
|
||||
*/
|
||||
|
||||
public class ExampleActivity extends AndroidNativeActivity {
|
||||
public ExampleActivity() {
|
||||
super();
|
||||
|
||||
QT_ANDROID_THEMES = new String[] {""};
|
||||
QT_ANDROID_DEFAULT_THEME = "";
|
||||
}
|
||||
}
|
||||
|
|
@ -1,96 +0,0 @@
|
|||
package androidnative.example;
|
||||
import androidnative.SystemDispatcher;
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationManager;
|
||||
import android.util.Log;
|
||||
import android.os.Handler;
|
||||
import android.app.Activity;
|
||||
import android.view.View;
|
||||
import android.content.Context;
|
||||
import java.util.Map;
|
||||
import org.qtproject.qt5.android.QtNative;
|
||||
|
||||
public class ExampleService {
|
||||
|
||||
static {
|
||||
|
||||
SystemDispatcher.addListener(new SystemDispatcher.Listener() {
|
||||
|
||||
NotificationManager m_notificationManager;
|
||||
Notification.Builder m_builder;
|
||||
|
||||
private void notificationManagerNotify(Map data) {
|
||||
|
||||
final Activity activity = QtNative.activity();
|
||||
final Map messageData = data;
|
||||
|
||||
Runnable runnable = new Runnable () {
|
||||
public void run() {
|
||||
try {
|
||||
String title = (String) messageData.get("title");
|
||||
|
||||
String message = (String) messageData.get("message");
|
||||
|
||||
if (m_notificationManager == null) {
|
||||
m_notificationManager = (NotificationManager) activity.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
m_builder = new Notification.Builder(activity);
|
||||
|
||||
// Small Icon is a must to make notification works.
|
||||
// And that is why you need to inherit QtActivity
|
||||
m_builder.setSmallIcon(R.drawable.icon);
|
||||
}
|
||||
|
||||
m_builder.setContentTitle(title);
|
||||
m_builder.setContentText(message);
|
||||
m_notificationManager.notify(1, m_builder.build());
|
||||
|
||||
// Test function. Remove it later.
|
||||
SystemDispatcher.dispatch("Notifier.notifyFinished");
|
||||
} catch (Exception e) {
|
||||
Log.d("",e.getMessage());
|
||||
}
|
||||
|
||||
};
|
||||
};
|
||||
activity.runOnUiThread(runnable);
|
||||
}
|
||||
|
||||
private void hapticFeedbackPerform(Map data) {
|
||||
|
||||
final Activity activity = QtNative.activity();
|
||||
final Map messageData = data;
|
||||
Runnable runnable = new Runnable () {
|
||||
public void run() {
|
||||
int feedbackConstant = (Integer) messageData.get("feedbackConstant");
|
||||
int flags = (Integer) messageData.get("flags");
|
||||
|
||||
Log.d("",String.format("hapticFeedbackPerform(%d,%d)",feedbackConstant,flags));
|
||||
|
||||
View rootView = activity.getWindow().getDecorView().getRootView();
|
||||
rootView.performHapticFeedback(feedbackConstant, flags);
|
||||
|
||||
// Test function. Remove it later.
|
||||
SystemDispatcher.dispatch("hapticFeedbackPerformFinished");
|
||||
};
|
||||
};
|
||||
activity.runOnUiThread(runnable);
|
||||
}
|
||||
|
||||
public void onDispatched(String name , Map data) {
|
||||
|
||||
if (name.equals("Notifier.notify")) {
|
||||
notificationManagerNotify(data);
|
||||
return;
|
||||
} else if (name.equals("hapticFeedbackPerform")) {
|
||||
hapticFeedbackPerform(data);
|
||||
return;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -1,38 +0,0 @@
|
|||
TEMPLATE = app
|
||||
|
||||
QT += qml quick
|
||||
|
||||
SOURCES += main.cpp \
|
||||
debugwrapper.cpp
|
||||
|
||||
RESOURCES += qml.qrc
|
||||
|
||||
# Additional import path used to resolve QML modules in Qt Creator's code model
|
||||
QML_IMPORT_PATH += ../..
|
||||
|
||||
android {
|
||||
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android-sources
|
||||
}
|
||||
|
||||
# include(vendor/vendor.pri)
|
||||
# Default rules for deployment.
|
||||
include(deployment.pri)
|
||||
include(../../androidnative.pri)
|
||||
include(../../../../../../quickandroid/quickandroid.pri)
|
||||
|
||||
DISTFILES += \
|
||||
android-sources/AndroidManifest.xml \
|
||||
android-sources/src/quickandroid/example/ExampleService.java \
|
||||
README.md \
|
||||
android-sources/gradle/wrapper/gradle-wrapper.jar \
|
||||
android-sources/gradlew \
|
||||
android-sources/res/values/libs.xml \
|
||||
android-sources/build.gradle \
|
||||
android-sources/gradle/wrapper/gradle-wrapper.properties \
|
||||
android-sources/gradlew.bat \
|
||||
android-sources/settings.gradle \
|
||||
android-sources/src/androidnative/example/ExampleService.java
|
||||
|
||||
HEADERS += \
|
||||
../../README.md \
|
||||
debugwrapper.h
|
||||
|
|
@ -1,392 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE QtCreatorProject>
|
||||
<!-- Written by QtCreator 4.4.0, 2017-10-23T22:04:08. -->
|
||||
<qtcreator>
|
||||
<data>
|
||||
<variable>EnvironmentId</variable>
|
||||
<value type="QByteArray">{8825bc46-5cad-4a59-be78-bf9eeaa7217a}</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
||||
<value type="int">0</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
||||
<valuemap type="QVariantMap">
|
||||
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
|
||||
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
|
||||
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
|
||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
|
||||
<value type="QString" key="language">Cpp</value>
|
||||
<valuemap type="QVariantMap" key="value">
|
||||
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
|
||||
</valuemap>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
|
||||
<value type="QString" key="language">QmlJS</value>
|
||||
<valuemap type="QVariantMap" key="value">
|
||||
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
|
||||
</valuemap>
|
||||
</valuemap>
|
||||
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
|
||||
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
|
||||
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
||||
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
||||
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
|
||||
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
|
||||
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
|
||||
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
||||
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
||||
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
||||
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
|
||||
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
|
||||
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
|
||||
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
|
||||
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
||||
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
||||
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
||||
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
||||
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
||||
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
||||
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
||||
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
|
||||
</valuemap>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
||||
<valuemap type="QVariantMap"/>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.Target.0</variable>
|
||||
<valuemap type="QVariantMap">
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Android</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Android</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{8e3757e7-5698-4d0f-9f13-55359b1a832e}</value>
|
||||
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
|
||||
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/pankraz/build/debug</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
|
||||
<value type="QString">-w</value>
|
||||
<value type="QString">-r</value>
|
||||
</valuelist>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.2">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Anwendungsdaten kopieren</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidPackageInstallationStep</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.3">
|
||||
<value type="QString" key="BuildTargetSdk">android-25</value>
|
||||
<value type="QString" key="KeystoreLocation"></value>
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Android-APK erstellen</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QmakeProjectManager.AndroidBuildApkStep</value>
|
||||
<value type="int" key="Qt4ProjectManager.AndroidDeployQtStep.DeployQtAction">2</value>
|
||||
<value type="bool" key="UseGradle">true</value>
|
||||
<value type="bool" key="VerboseOutput">false</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">4</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
|
||||
<value type="QString">-w</value>
|
||||
<value type="QString">-r</value>
|
||||
</valuelist>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Bereinigen</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/pankraz/ownCloud/clientsync/Friendiqa/v0.005/source-android/androidnative.pri/examples/build-androidnativeexample-Android-Release</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
|
||||
<value type="QString">-w</value>
|
||||
<value type="QString">-r</value>
|
||||
</valuelist>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.2">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Anwendungsdaten kopieren</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidPackageInstallationStep</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.3">
|
||||
<value type="QString" key="BuildTargetSdk">android-25</value>
|
||||
<value type="QString" key="KeystoreLocation"></value>
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Android-APK erstellen</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QmakeProjectManager.AndroidBuildApkStep</value>
|
||||
<value type="int" key="Qt4ProjectManager.AndroidDeployQtStep.DeployQtAction">2</value>
|
||||
<value type="bool" key="UseGradle">true</value>
|
||||
<value type="bool" key="VerboseOutput">false</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">4</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
|
||||
<value type="QString">-w</value>
|
||||
<value type="QString">-r</value>
|
||||
</valuelist>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Bereinigen</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/pankraz/ownCloud/clientsync/Friendiqa/v0.005/source-android/androidnative.pri/examples/build-androidnativeexample-Android-Profile</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
|
||||
<value type="QString">-w</value>
|
||||
<value type="QString">-r</value>
|
||||
</valuelist>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.2">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Anwendungsdaten kopieren</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidPackageInstallationStep</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.3">
|
||||
<value type="QString" key="BuildTargetSdk">android-25</value>
|
||||
<value type="QString" key="KeystoreLocation"></value>
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Android-APK erstellen</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QmakeProjectManager.AndroidBuildApkStep</value>
|
||||
<value type="int" key="Qt4ProjectManager.AndroidDeployQtStep.DeployQtAction">2</value>
|
||||
<value type="bool" key="UseGradle">true</value>
|
||||
<value type="bool" key="VerboseOutput">false</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">4</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
|
||||
<value type="QString">-w</value>
|
||||
<value type="QString">-r</value>
|
||||
</valuelist>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Bereinigen</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deployment auf Android-Gerät</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidDeployQtStep</value>
|
||||
<value type="bool" key="UninstallPreviousPackage">false</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deployment</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deployment auf Android-Gerät</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deployment auf Android-Gerät</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidDeployConfiguration2</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings">
|
||||
<value type="QString" key="AndroidDeviceSerialNumber">CB5A22HSB9</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
||||
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
|
||||
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
|
||||
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
|
||||
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
|
||||
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
||||
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
||||
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
||||
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
|
||||
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
||||
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
||||
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
||||
<value type="int">0</value>
|
||||
<value type="int">1</value>
|
||||
<value type="int">2</value>
|
||||
<value type="int">3</value>
|
||||
<value type="int">4</value>
|
||||
<value type="int">5</value>
|
||||
<value type="int">6</value>
|
||||
<value type="int">7</value>
|
||||
<value type="int">8</value>
|
||||
<value type="int">9</value>
|
||||
<value type="int">10</value>
|
||||
<value type="int">11</value>
|
||||
<value type="int">12</value>
|
||||
<value type="int">13</value>
|
||||
<value type="int">14</value>
|
||||
</valuelist>
|
||||
<valuelist type="QVariantList" key="Android.AmStartArgsKey"/>
|
||||
<valuelist type="QVariantList" key="Android.PostFinishShellCmdListKey"/>
|
||||
<valuelist type="QVariantList" key="Android.PreStartShellCmdListKey"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">androidnativeexample</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidRunConfiguration:/home/pankraz/ownCloud/clientsync/Friendiqa/v0.005/source-android/androidnative.pri/examples/androidnativeexample/androidnativeexample.pro</value>
|
||||
<value type="QString" key="QMakeProjectManager.QmakeAndroidRunConfiguration.ProFile">androidnativeexample.pro</value>
|
||||
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
|
||||
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
||||
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
|
||||
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
||||
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
||||
</valuemap>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.TargetCount</variable>
|
||||
<value type="int">1</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
||||
<value type="int">18</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>Version</variable>
|
||||
<value type="int">18</value>
|
||||
</data>
|
||||
</qtcreator>
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
#include "debugwrapper.h"
|
||||
#include "AndroidNative/debug.h"
|
||||
|
||||
DebugWrapper::DebugWrapper(QObject *parent) : QObject(parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
long DebugWrapper::getNativeHeapSize() const
|
||||
{
|
||||
return AndroidNative::Debug::getNativeHeapSize();
|
||||
}
|
||||
|
||||
long DebugWrapper::getNativeHeapAllocatedSize() const
|
||||
{
|
||||
return AndroidNative::Debug::getNativeHeapAllocatedSize();
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
#ifndef DEBUGWRAPPER_H
|
||||
#define DEBUGWRAPPER_H
|
||||
|
||||
#include <QObject>
|
||||
|
||||
class DebugWrapper : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit DebugWrapper(QObject *parent = 0);
|
||||
|
||||
signals:
|
||||
|
||||
public slots:
|
||||
long getNativeHeapSize() const;
|
||||
|
||||
long getNativeHeapAllocatedSize() const;
|
||||
};
|
||||
|
||||
#endif // DEBUGWRAPPER_H
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
android-no-sdk {
|
||||
target.path = /data/user/qt
|
||||
export(target.path)
|
||||
INSTALLS += target
|
||||
} else:android {
|
||||
x86 {
|
||||
target.path = /libs/x86
|
||||
} else: armeabi-v7a {
|
||||
target.path = /libs/armeabi-v7a
|
||||
} else {
|
||||
target.path = /libs/armeabi
|
||||
}
|
||||
export(target.path)
|
||||
INSTALLS += target
|
||||
} else:unix {
|
||||
isEmpty(target.path) {
|
||||
qnx {
|
||||
target.path = /tmp/$${TARGET}/bin
|
||||
} else {
|
||||
target.path = /opt/$${TARGET}/bin
|
||||
}
|
||||
export(target.path)
|
||||
}
|
||||
INSTALLS += target
|
||||
}
|
||||
|
||||
export(INSTALLS)
|
||||
|
|
@ -1,38 +0,0 @@
|
|||
import QtQuick 2.0
|
||||
import QuickAndroid 0.1
|
||||
import QuickAndroid.Styles 0.1
|
||||
import "../theme"
|
||||
|
||||
Page {
|
||||
actionBar: ActionBar {
|
||||
id: actionBar
|
||||
upEnabled: true
|
||||
title: qsTr("Dialog Demo")
|
||||
showTitle: true
|
||||
|
||||
onActionButtonClicked: back();
|
||||
z: 10
|
||||
|
||||
}
|
||||
|
||||
Button {
|
||||
id: label
|
||||
text : "Press to launch dialog"
|
||||
anchors.centerIn: parent
|
||||
onClicked: {
|
||||
dialog.open();
|
||||
}
|
||||
}
|
||||
|
||||
Dialog {
|
||||
id: dialog
|
||||
anchors.centerIn: parent
|
||||
title: "Dialog"
|
||||
Text {
|
||||
text: "Demo"
|
||||
}
|
||||
z: 20
|
||||
|
||||
acceptButtonText: "OK"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,77 +0,0 @@
|
|||
import QtQuick 2.0
|
||||
import QuickAndroid 0.1
|
||||
import AndroidNative 1.0 as AN
|
||||
import "../theme"
|
||||
|
||||
Page {
|
||||
id: demo
|
||||
actionBar: ActionBar {
|
||||
title: "Image Picker Demo"
|
||||
onActionButtonClicked: back();
|
||||
}
|
||||
|
||||
AN.ImagePicker {
|
||||
id: imagePicker;
|
||||
multiple : true
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: Constants.black100
|
||||
|
||||
Image {
|
||||
id: image
|
||||
anchors.fill: parent
|
||||
source: imagePicker.imageUrl
|
||||
fillMode: Image.PreserveAspectFit
|
||||
visible: imagePicker.imageUrls.length <= 1
|
||||
}
|
||||
|
||||
Grid {
|
||||
columns: 3
|
||||
spacing: 0
|
||||
visible: !image.visible
|
||||
|
||||
Repeater {
|
||||
model: imagePicker.imageUrls
|
||||
delegate: Image {
|
||||
width: demo.width / 3
|
||||
height: width / 4 * 3
|
||||
source: modelData
|
||||
asynchronous: true
|
||||
fillMode: Image.PreserveAspectCrop
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: 16 * A.dp
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: 32 * A.dp
|
||||
|
||||
spacing: 16 * A.dp
|
||||
|
||||
FloatingActionButton {
|
||||
iconSource: A.drawable("ic_camera",Constants.black87);
|
||||
size: Constants.small
|
||||
backgroundColor: Constants.white100
|
||||
onClicked: {
|
||||
imagePicker.takePhoto();
|
||||
}
|
||||
}
|
||||
|
||||
FloatingActionButton {
|
||||
iconSource: A.drawable("ic_image",Constants.black87);
|
||||
size: Constants.small
|
||||
backgroundColor: Constants.white100
|
||||
onClicked: {
|
||||
imagePicker.pickImage();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
import QtQuick 2.0
|
||||
import QuickAndroid 0.1
|
||||
import QuickAndroid.Styles 0.1
|
||||
import "../theme"
|
||||
|
||||
Page {
|
||||
id: page
|
||||
actionBar: ActionBar {
|
||||
id: actionBar
|
||||
upEnabled: true
|
||||
title: qsTr("Information")
|
||||
showTitle: true
|
||||
|
||||
onActionButtonClicked: back();
|
||||
z: 10
|
||||
}
|
||||
|
||||
VisualItemModel {
|
||||
id: itemModel
|
||||
|
||||
ListItem {
|
||||
title: "Environment.DIRECTORY_DCIM"
|
||||
subtitle: Environment.DIRECTORY_DCIM
|
||||
interactive: false
|
||||
width: page.width
|
||||
}
|
||||
|
||||
ListItem {
|
||||
title: "Debug.getNativeHeapSize"
|
||||
subtitle: (Debug.getNativeHeapSize() / 1024 / 1024).toFixed(2) + "MB";
|
||||
interactive: false
|
||||
width: page.width
|
||||
}
|
||||
|
||||
ListItem {
|
||||
title: "Debug.getNativeHeapAllocatedSize"
|
||||
subtitle: (Debug.getNativeHeapAllocatedSize() / 1024 / 1024).toFixed(2) + "MB";
|
||||
interactive: false
|
||||
width: page.width
|
||||
}
|
||||
|
||||
ListItem {
|
||||
title: "QThread.idealThreadCount"
|
||||
subtitle: Misc.idealThreadCount;
|
||||
interactive: false
|
||||
width: page.width
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ListView {
|
||||
anchors.fill: parent
|
||||
model: itemModel
|
||||
}
|
||||
}
|
||||
|
|
@ -1,72 +0,0 @@
|
|||
#include <QtCore>
|
||||
#include <QGuiApplication>
|
||||
#include <QQmlApplicationEngine>
|
||||
#include <QQuickView>
|
||||
#include <QQmlContext>
|
||||
#include <QSettings>
|
||||
//#include "qadrawableprovider.h"
|
||||
#include "AndroidNative/systemdispatcher.h"
|
||||
#include "AndroidNative/environment.h"
|
||||
#include "AndroidNative/debug.h"
|
||||
#include "AndroidNative/mediascannerconnection.h"
|
||||
#include "debugwrapper.h"
|
||||
|
||||
using namespace AndroidNative;
|
||||
|
||||
#ifdef Q_OS_ANDROID
|
||||
#include <QtAndroidExtras/QAndroidJniObject>
|
||||
#include <QtAndroidExtras/QAndroidJniEnvironment>
|
||||
|
||||
JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void*) {
|
||||
Q_UNUSED(vm);
|
||||
qDebug("NativeInterface::JNI_OnLoad()");
|
||||
|
||||
// It must call this function within JNI_OnLoad to enable System Dispatcher
|
||||
SystemDispatcher::registerNatives();
|
||||
return JNI_VERSION_1_6;
|
||||
}
|
||||
#endif
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
|
||||
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||
#endif
|
||||
|
||||
QGuiApplication app(argc, argv);
|
||||
app.setApplicationName("Android Native Example");
|
||||
app.setOrganizationDomain("com.github.benlau.androidnative");
|
||||
|
||||
QSettings settings;
|
||||
|
||||
settings.setValue("firstTimeLoading", false);
|
||||
settings.sync();
|
||||
|
||||
QVariantMap env;
|
||||
env["DIRECTORY_DCIM"] = Environment::getExternalStoragePublicDirectory(Environment::DIRECTORY_DCIM);
|
||||
|
||||
QVariantMap misc;
|
||||
misc["idealThreadCount"] = QThread::idealThreadCount();
|
||||
|
||||
MediaScannerConnection::scanFile("");
|
||||
|
||||
SystemDispatcher::instance()->loadClass("androidnative.example.ExampleService");
|
||||
|
||||
QQmlApplicationEngine engine;
|
||||
|
||||
/* QuickAndroid Initialization */
|
||||
engine.addImportPath("qrc:///"); // Add QuickAndroid into the import path
|
||||
engine.rootContext()->setContextProperty("Environment", env);
|
||||
engine.rootContext()->setContextProperty("Misc", misc);
|
||||
engine.rootContext()->setContextProperty("Debug", new DebugWrapper(&engine));
|
||||
|
||||
/* End of QuickAndroid Initialization */
|
||||
|
||||
// Extra features:
|
||||
//QADrawableProvider* provider = new QADrawableProvider();
|
||||
//provider->setBasePath("qrc://res");
|
||||
//engine.addImageProvider("drawable",provider);
|
||||
engine.load(QUrl(QStringLiteral("qrc:///main.qml")));
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
|
|
@ -1,76 +0,0 @@
|
|||
import QtQuick 2.2
|
||||
import QtQuick.Window 2.2
|
||||
import QuickAndroid 0.1
|
||||
import QuickAndroid.Styles 0.1
|
||||
import "./theme"
|
||||
|
||||
Window {
|
||||
id: window;
|
||||
width: 480
|
||||
height: 640
|
||||
|
||||
color: "#FFFFFF"
|
||||
|
||||
visible: false;
|
||||
|
||||
/* Fast Splash Screen Setup Instruction
|
||||
|
||||
1. Create a custom theme (apptheme.qml) and set windowBackground to @drawable/splash.xml (Your splash screen drawable)
|
||||
|
||||
2. Within AndroidManifest.xml, set android.app.splash_screen_drawable to @drawable/splash.xml
|
||||
|
||||
<!-- Splash screen -->
|
||||
<meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/splash"/>
|
||||
<!-- Splash screen -->
|
||||
|
||||
That will show a splash screen while Qt is loading. However, screen flicker will happen when your Window
|
||||
item is shown. To prevent screen flicker completely, you could setup your main.qml accoroding to step 3.
|
||||
|
||||
3. In your main.qml (the one with Window component)
|
||||
|
||||
3.1. Set Window.color to a color which is similar to splash screen / Theme.windowBackground
|
||||
|
||||
3.2. Set visible of Window to false until your content is loaded. (Keep Android splash screen while loading)
|
||||
|
||||
3.3. Use an asynchronous Loader for your content. Set opacity to 0.
|
||||
|
||||
3.4. Once everything is ready, set Window.visible to true and perform a fade-in animation on Loader
|
||||
|
||||
*/
|
||||
|
||||
Loader {
|
||||
id: loader
|
||||
parent: null
|
||||
width: window.width
|
||||
height: window.height
|
||||
asynchronous: true
|
||||
opacity: 0
|
||||
focus: true;
|
||||
|
||||
sourceComponent: PageStack {
|
||||
id: stack
|
||||
objectName: "PageStack";
|
||||
initialPage: Components {
|
||||
|
||||
onPresented: {
|
||||
window.visible = true;
|
||||
A.setTimeout(function() {
|
||||
loader.parent = window.contentItem;
|
||||
loader.opacity = 1;
|
||||
}, 34);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Behavior on opacity {
|
||||
NumberAnimation {
|
||||
duration: 200
|
||||
easing.type: Easing.OutQuad;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
ThemeManager.currentTheme = AppTheme
|
||||
}
|
||||
}
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
import QtQuick 2.2
|
||||
import QtQuick.Window 2.1
|
||||
import QuickAndroid 0.1
|
||||
import QuickAndroid.Styles 0.1
|
||||
import AndroidNative 1.0 as AN
|
||||
import "../theme"
|
||||
|
||||
Page {
|
||||
|
||||
actionBar: ActionBar {
|
||||
id : actionBar
|
||||
title: "Notification"
|
||||
z: 10
|
||||
upEnabled: true
|
||||
onActionButtonClicked: back();
|
||||
}
|
||||
|
||||
Button {
|
||||
id: label
|
||||
text : "Press to send notification"
|
||||
anchors.centerIn: parent
|
||||
onClicked: {
|
||||
AN.SystemDispatcher.dispatch("Notifier.notify",{
|
||||
title: "Quick Android Example",
|
||||
message: "Hello!"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file>main.qml</file>
|
||||
<file>res/drawable-hdpi/icon.png</file>
|
||||
<file>Components.qml</file>
|
||||
<file>res/drawable-xxhdpi/ic_menu.png</file>
|
||||
<file>dialog/DialogDemo.qml</file>
|
||||
<file>notification/NotificationDemo.qml</file>
|
||||
<file>theme/AppTheme.qml</file>
|
||||
<file>theme/qmldir</file>
|
||||
<file>res/drawable-hdpi/ic_android_black_48dp.png</file>
|
||||
<file>res/drawable-xxhdpi/ic_android_black_48dp.png</file>
|
||||
<file>res/drawable-mdpi/ic_android_black_48dp.png</file>
|
||||
<file>res/drawable-xhdpi/ic_android_black_48dp.png</file>
|
||||
<file>res/drawable-xxxhdpi/ic_android_black_48dp.png</file>
|
||||
<file>res/drawable-hdpi/ic_done_black_24dp.png</file>
|
||||
<file>res/drawable-mdpi/ic_done_black_24dp.png</file>
|
||||
<file>res/drawable-xhdpi/ic_done_black_24dp.png</file>
|
||||
<file>res/drawable-xxhdpi/ic_done_black_24dp.png</file>
|
||||
<file>res/drawable-xxxhdpi/ic_done_black_24dp.png</file>
|
||||
<file>theme/ActionBarBackground.qml</file>
|
||||
<file>res/drawable-xxhdpi/ic_keyboard_backspace.png</file>
|
||||
<file>res/drawable-xxhdpi/ic_arrow_back.png</file>
|
||||
<file>res/drawable-xxhdpi/ic_image.png</file>
|
||||
<file>res/drawable-xxhdpi/ic_camera.png</file>
|
||||
<file>imagePicker/ImagePickerDemo.qml</file>
|
||||
<file>info/InfoDemo.qml</file>
|
||||
<file>toast/ToastDemo.qml</file>
|
||||
<file>statusbar/StatusBarDemo.qml</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
{
|
||||
"name": "",
|
||||
"description": "",
|
||||
"dependencies": [
|
||||
"com.github.benlau.quickandroid@0.1.7"
|
||||
],
|
||||
"license": "NONE",
|
||||
"pri_filename": "",
|
||||
"webpage": ""
|
||||
}
|
||||
|
Before Width: | Height: | Size: 519 B |
|
Before Width: | Height: | Size: 177 B |
|
Before Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 343 B |
|
Before Width: | Height: | Size: 130 B |
|
Before Width: | Height: | Size: 641 B |
|
Before Width: | Height: | Size: 188 B |
|
Before Width: | Height: | Size: 975 B |
|
Before Width: | Height: | Size: 287 B |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 227 B |
|
Before Width: | Height: | Size: 1 KiB |
|
Before Width: | Height: | Size: 267 B |
|
Before Width: | Height: | Size: 127 B |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 277 B |
|
|
@ -1,47 +0,0 @@
|
|||
import QtQuick 2.2
|
||||
import QtQuick.Window 2.1
|
||||
import QtQuick.Controls 2.1 as QQC2
|
||||
import QuickAndroid 0.1
|
||||
import QuickAndroid.Styles 0.1
|
||||
import AndroidNative 1.0 as AN
|
||||
import "../theme"
|
||||
|
||||
Page {
|
||||
|
||||
actionBar: ActionBar {
|
||||
id : actionBar
|
||||
title: "Status Bar"
|
||||
z: 10
|
||||
upEnabled: true
|
||||
onActionButtonClicked: back();
|
||||
}
|
||||
|
||||
Column {
|
||||
anchors.centerIn: parent
|
||||
|
||||
QQC2.Switch {
|
||||
text: "Translucent Status Bar"
|
||||
checked: false
|
||||
|
||||
onCheckedChanged: {
|
||||
AN.SystemDispatcher.dispatch("androidnative.Util.setTranslucentStatusBar", {value: checked});
|
||||
}
|
||||
}
|
||||
|
||||
QQC2.Switch {
|
||||
text: "Status Bar Visible"
|
||||
checked: true
|
||||
|
||||
onCheckedChanged: {
|
||||
AN.SystemDispatcher.dispatch("androidnative.Util.setFullScreen", {value: checked});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
AN.SystemDispatcher.loadClass("androidnative.Util");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
import QtQuick 2.0
|
||||
import QuickAndroid 0.1
|
||||
|
||||
Item {
|
||||
|
||||
MaterialShadow {
|
||||
asynchronous: true
|
||||
anchors.fill: parent
|
||||
depth: 1
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
color: "#cddc39" // Lime 500
|
||||
anchors.fill: parent
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
import QtQuick 2.0
|
||||
import QuickAndroid 0.1
|
||||
import QuickAndroid.Styles 0.1
|
||||
pragma Singleton
|
||||
|
||||
Theme {
|
||||
mediumText.textSize: 18 * A.dp
|
||||
smallText.textSize : 14 * A.dp
|
||||
|
||||
colorPrimary: "#cddc39" // Lime 500
|
||||
textColorPrimary: Constants.black87
|
||||
windowBackground: "#eeeeee";
|
||||
|
||||
// The default icon of ActionBar is a "back" image
|
||||
actionBar.iconSource: A.drawable("ic_arrow_back",Constants.black87)
|
||||
|
||||
// Background with shadow
|
||||
actionBar.background: ActionBarBackground {
|
||||
}
|
||||
|
||||
// actionBar.title.textSize is not allowed in QML. You should declare your own TextMaterial and assign directly.
|
||||
// or modify text , smallText , mediumText and largetText
|
||||
actionBar.title : customTextMaterial1;
|
||||
actionBar.iconSourceSize: Qt.size(24 * A.dp , 24 * A.dp)
|
||||
|
||||
// Custom Style object.
|
||||
TextMaterial {
|
||||
id : customTextMaterial1
|
||||
textSize: 18 * A.dp
|
||||
textColor : Constants.black87
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
module theme
|
||||
singleton AppTheme 0.1 AppTheme.qml
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
import QtQuick 2.2
|
||||
import QtQuick.Window 2.1
|
||||
import QuickAndroid 0.1
|
||||
import QuickAndroid.Styles 0.1
|
||||
import AndroidNative 1.0 as AN
|
||||
import "../theme"
|
||||
|
||||
Page {
|
||||
|
||||
actionBar: ActionBar {
|
||||
id : actionBar
|
||||
title: "Toast"
|
||||
z: 10
|
||||
upEnabled: true
|
||||
onActionButtonClicked: back();
|
||||
}
|
||||
|
||||
AN.Toast {
|
||||
id: toast
|
||||
text: "Toast"
|
||||
longDuration: true
|
||||
}
|
||||
|
||||
Button {
|
||||
id: label
|
||||
text : "Press to show toast"
|
||||
anchors.centerIn: parent
|
||||
onClicked: {
|
||||
toast.show();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -10,6 +10,7 @@ import android.content.Context;
|
|||
import android.Manifest.permission;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidnative.AndroidNativeService;
|
||||
|
||||
/** An alternative Activity class for Qt applicaiton.
|
||||
|
||||
|
|
@ -18,7 +19,8 @@ import androidx.core.content.ContextCompat;
|
|||
|
||||
public class AndroidNativeActivity extends org.qtproject.qt5.android.bindings.QtActivity {
|
||||
public static final int MY_PERMISSIONS_REQUEST_READ_STORAGE = 0x245285a8;
|
||||
|
||||
public static final int MY_PERMISSIONS_REQUEST_POST_NOTIFICATIONS = 0x245285a9;
|
||||
private static final String TAG = "AndroidNativeActivity";
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
|
|
@ -29,6 +31,11 @@ public class AndroidNativeActivity extends org.qtproject.qt5.android.bindings.Qt
|
|||
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
|
||||
|
||||
|
||||
AndroidNativeService fs = new AndroidNativeService();
|
||||
fs.startQtService(this);
|
||||
//if (ContextCompat.checkSelfPermission(this,android.Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) {
|
||||
|
||||
// Permission is not granted
|
||||
|
|
@ -75,19 +82,29 @@ public class AndroidNativeActivity extends org.qtproject.qt5.android.bindings.Qt
|
|||
|
||||
|
||||
@Override public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {
|
||||
Log.d(TAG,"onRequestPermissionsResult");
|
||||
switch (requestCode) {
|
||||
case MY_PERMISSIONS_REQUEST_READ_STORAGE: {
|
||||
// If request is cancelled, the result arrays are empty.
|
||||
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
Map message = new HashMap();
|
||||
message.put("multiple",false);
|
||||
SystemDispatcher.dispatch("androidnative.ImagePicker.pickImage",message);
|
||||
} else {
|
||||
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
Map message = new HashMap();
|
||||
message.put("multiple",false);
|
||||
SystemDispatcher.dispatch("androidnative.ImagePicker.pickImage",message);
|
||||
} else {
|
||||
}
|
||||
}
|
||||
case MY_PERMISSIONS_REQUEST_POST_NOTIFICATIONS: {
|
||||
// If request is cancelled, the result arrays are empty.
|
||||
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
Map message = new HashMap();
|
||||
message.put("multiple",false);
|
||||
SystemDispatcher.dispatch("androidnative.Util.setPostNotification",message);
|
||||
} else {
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -20,14 +20,14 @@ public class AndroidNativeService extends QtService
|
|||
private static String TAG = "AndroidNative";
|
||||
|
||||
public void startQtService(Context ctx) {
|
||||
//Log.d(TAG, "QtActivity active "+String.valueOf(QtNative.activity()!=null));
|
||||
Log.d(TAG, "QtActivity active "+String.valueOf(QtNative.activity()!=null));
|
||||
if (QtNative.activity()==null){
|
||||
//Log.d(TAG,"Friendiqasync Stop existing QtService");
|
||||
Log.d(TAG,"Friendiqasync Stop existing QtService");
|
||||
ctx.stopService(new Intent(ctx, AndroidNativeService.class));
|
||||
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
//Log.d(TAG,"Friendiqasync startForegroundService");
|
||||
Log.d(TAG,"Friendiqasync startForegroundService");
|
||||
ctx.startForegroundService(new Intent(ctx, AndroidNativeService.class));
|
||||
} else {
|
||||
ctx.startService(new Intent(ctx, AndroidNativeService.class));
|
||||
|
|
@ -35,7 +35,7 @@ public class AndroidNativeService extends QtService
|
|||
}
|
||||
|
||||
public static void stopQtService(Context ctx) {
|
||||
//Log.d(TAG,"Friendiqasync QtServiceStop");
|
||||
Log.d(TAG,"Friendiqasync QtServiceStop");
|
||||
ctx.stopService(new Intent(ctx, AndroidNativeService.class));
|
||||
}
|
||||
|
||||
|
|
@ -44,11 +44,12 @@ public class AndroidNativeService extends QtService
|
|||
{
|
||||
Context context;
|
||||
context = this.getApplicationContext();
|
||||
Log.d(TAG,"Friendiqa onCreate");
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
|
||||
Intent intent = new Intent(context,FriendiqaActivity.class);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE);
|
||||
String CHANNEL_ID = "channel_02";
|
||||
NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
|
||||
"Sync Channel",
|
||||
|
|
|
|||
|
|
@ -25,6 +25,11 @@ import android.content.Intent;
|
|||
import java.util.Map;
|
||||
import org.qtproject.friendiqa.R;
|
||||
|
||||
import android.content.pm.PackageManager;
|
||||
import android.Manifest;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
public class Util {
|
||||
|
||||
private static final String TAG = "androidnative.Util";
|
||||
|
|
@ -33,7 +38,8 @@ public class Util {
|
|||
public static final String SET_FULL_SCREEN = "androidnative.Util.setFullScreen";
|
||||
public static final String SET_SCHEDULE = "androidnative.Util.setSchedule";
|
||||
public static final String SET_NOTIFICATION = "androidnative.Util.setNotification";
|
||||
|
||||
public static final String SET_POST_NOTIFICATION = "androidnative.Util.setPostNotification";
|
||||
public static final int MY_PERMISSIONS_REQUEST_POST_NOTIFICATIONS = 0x245285a9;
|
||||
|
||||
static {
|
||||
SystemDispatcher.addListener(new SystemDispatcher.Listener() {
|
||||
|
|
@ -46,6 +52,8 @@ public class Util {
|
|||
setSchedule(message);
|
||||
} else if (type.equals(SET_NOTIFICATION)) {
|
||||
setNotification(message);
|
||||
} else if (type.equals(SET_POST_NOTIFICATION)) {
|
||||
setPostNotification(message);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
@ -110,14 +118,14 @@ public class Util {
|
|||
}
|
||||
|
||||
static void setNotification(Map message) {
|
||||
//Log.d(TAG,"setNotification");
|
||||
Log.d(TAG,"setNotification");
|
||||
Context context;
|
||||
//Context appcontext;
|
||||
context = QtNative.service().getApplicationContext();
|
||||
//appcontext = QtNative.activity().getApplicationContext();
|
||||
Intent intent = new Intent(context,FriendiqaActivity.class);
|
||||
//intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE);
|
||||
|
||||
final String textTitle = (String) message.get("title");
|
||||
final String textContent = (String) message.get("message");
|
||||
|
|
@ -171,14 +179,23 @@ public class Util {
|
|||
} else {
|
||||
context = QtNative.activity().getApplicationContext();
|
||||
}
|
||||
|
||||
|
||||
|
||||
//AndroidNativeService fs = new AndroidNativeService();
|
||||
//fs.startQtService(context);
|
||||
|
||||
|
||||
if (value==0){
|
||||
JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
|
||||
jobScheduler.cancelAll();
|
||||
//Log.d(TAG,"Friendiqasync deleting Androidnative jobscheduler");
|
||||
Log.d(TAG,"Friendiqasync deleting Androidnative jobscheduler");
|
||||
} else {
|
||||
//Log.d(TAG,"Friendiqasync schedule Androidnative jobscheduler");
|
||||
Log.d(TAG,"Friendiqasync schedule Androidnative jobscheduler");
|
||||
ComponentName component = new ComponentName(context, FriendiqaService.class);
|
||||
JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
|
||||
|
||||
|
||||
//Log.d(TAG,"Jobinfolist size " + String.valueOf(jobScheduler.getAllPendingJobs().size()));
|
||||
if (jobScheduler.getAllPendingJobs().size()==0){
|
||||
JobInfo.Builder builder = new JobInfo.Builder(2, component)
|
||||
|
|
@ -186,7 +203,7 @@ public class Util {
|
|||
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
|
||||
.setPersisted(true)
|
||||
.setPrefetch(true);
|
||||
//Log.d(TAG,"Friendiqa schedule Androidnative sync schedule"+ (value * ONE_MIN));
|
||||
Log.d(TAG,"1 Friendiqa schedule Androidnative sync schedule"+ (value * ONE_MIN));
|
||||
jobScheduler.schedule(builder.build());
|
||||
} else {
|
||||
for ( JobInfo jobInfo : jobScheduler.getAllPendingJobs() ) {
|
||||
|
|
@ -197,23 +214,42 @@ public class Util {
|
|||
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
|
||||
.setPersisted(true)
|
||||
.setPrefetch(true);
|
||||
//Log.d(TAG,"Friendiqa schedule Androidnative sync schedule"+ (value * ONE_MIN));
|
||||
Log.d(TAG,"2 Friendiqa schedule Androidnative sync schedule"+ (value * ONE_MIN));
|
||||
jobScheduler.schedule(builder.build());
|
||||
}
|
||||
}
|
||||
}
|
||||
//Log.d(TAG,"Active service " + String.valueOf(QtNative.service()!=null));
|
||||
if (QtNative.service() != null){
|
||||
//Log.d(TAG,"Schedule Stopping Friendiqa Androidnative service");
|
||||
ComponentName componentStopper = new ComponentName(context, FriendiqaStopService.class);
|
||||
JobInfo.Builder stopbuilder = new JobInfo.Builder(1, componentStopper)
|
||||
.setMinimumLatency(50)
|
||||
.setOverrideDeadline(100);
|
||||
//if (QtNative.service() != null){
|
||||
// Log.d(TAG,"Schedule Stopping Friendiqa Androidnative service");
|
||||
// ComponentName componentStopper = new ComponentName(context, FriendiqaStopService.class);
|
||||
// JobInfo.Builder stopbuilder = new JobInfo.Builder(1, componentStopper)
|
||||
// .setMinimumLatency(50)
|
||||
// .setOverrideDeadline(100);
|
||||
|
||||
JobScheduler jobStopScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
|
||||
jobStopScheduler.schedule(stopbuilder.build());
|
||||
}
|
||||
// JobScheduler jobStopScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
|
||||
// jobStopScheduler.schedule(stopbuilder.build());
|
||||
//}
|
||||
}
|
||||
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
|
||||
notificationManager.cancelAll();
|
||||
//context.stopService(new Intent(context, AndroidNativeService.class));
|
||||
}
|
||||
|
||||
static void setPostNotification(Map message) {
|
||||
Log.d(TAG,"setPostNotification");
|
||||
Context context;
|
||||
if (QtNative.activity() == null){
|
||||
context = QtNative.service().getApplicationContext();
|
||||
} else {
|
||||
context = QtNative.activity().getApplicationContext();
|
||||
}
|
||||
Activity activity = org.qtproject.qt5.android.QtNative.activity();
|
||||
Log.d(TAG,String.valueOf(ContextCompat.checkSelfPermission(context,Manifest.permission.POST_NOTIFICATIONS)));
|
||||
if (ContextCompat.checkSelfPermission(context,Manifest.permission.POST_NOTIFICATIONS)!= PackageManager.PERMISSION_GRANTED) {
|
||||
// Permission is not granted
|
||||
Log.d(TAG,String.valueOf(PackageManager.PERMISSION_GRANTED));
|
||||
ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.POST_NOTIFICATIONS},MY_PERMISSIONS_REQUEST_POST_NOTIFICATIONS);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
/home/pankraz/ownCloud/clientsync/Friendiqa/v0.6/source-linux/common/oauth.cpp
|
||||
../../source-linux/common/oauth.cpp
|
||||
|
|
@ -1 +1 @@
|
|||
/home/pankraz/ownCloud/clientsync/Friendiqa/v0.6/source-linux/common/oauth.h
|
||||
../../source-linux/common/oauth.h
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
cmake_minimum_required(VERSION 3.1.0)
|
||||
cmake_minimum_required(VERSION 3.16.0)
|
||||
|
||||
project(friendiqa VERSION 0.6 LANGUAGES CXX)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
|
|
@ -13,35 +13,38 @@ if(CMAKE_VERSION VERSION_LESS "3.7.0")
|
|||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
endif()
|
||||
|
||||
find_package(Qt5 COMPONENTS Widgets Quick Sql DBus NetworkAuth REQUIRED)
|
||||
find_package(Qt6 REQUIRED COMPONENTS Core Widgets Quick QuickControls2 Sql DBus NetworkAuth REQUIRED)
|
||||
|
||||
qt_standard_project_setup()
|
||||
|
||||
set(MOC_SOURCES common/uploadableimage.h
|
||||
common/xhr.h
|
||||
common/filesystem.h
|
||||
common/remoteauthasyncimageprovider.h
|
||||
common/updatenews.h
|
||||
common/alarm.h
|
||||
common/oauth.h)
|
||||
common/oauth.h
|
||||
common/documenthandler.h)
|
||||
|
||||
set(SOURCES common/friendiqa.cpp
|
||||
common/uploadableimage.cpp
|
||||
common/xhr.cpp
|
||||
common/filesystem.cpp
|
||||
common/remoteauthasyncimageprovider.cpp
|
||||
common/updatenews.cpp
|
||||
common/alarmlinux.cpp
|
||||
common/oauth.cpp)
|
||||
common/oauth.cpp
|
||||
common/documenthandler.cpp)
|
||||
|
||||
include_directories(common)
|
||||
|
||||
add_executable(friendiqa ${SOURCES} ${MOC_SOURCES} application.qrc)
|
||||
qt_add_executable(friendiqa ${SOURCES} ${MOC_SOURCES} application.qrc)
|
||||
|
||||
target_link_libraries(friendiqa Qt::Core)
|
||||
target_link_libraries(friendiqa Qt::Widgets)
|
||||
target_link_libraries(friendiqa Qt::Quick)
|
||||
target_link_libraries(friendiqa Qt::Sql)
|
||||
target_link_libraries(friendiqa Qt::DBus)
|
||||
target_link_libraries(friendiqa Qt::NetworkAuth)
|
||||
target_link_libraries(friendiqa PRIVATE Qt6::Core)
|
||||
target_link_libraries(friendiqa PRIVATE Qt6::Widgets)
|
||||
target_link_libraries(friendiqa PRIVATE Qt6::Quick)
|
||||
target_link_libraries(friendiqa PRIVATE Qt6::QuickControls2)
|
||||
target_link_libraries(friendiqa PRIVATE Qt6::Sql)
|
||||
target_link_libraries(friendiqa PRIVATE Qt6::DBus)
|
||||
target_link_libraries(friendiqa PRIVATE Qt6::NetworkAuth)
|
||||
|
||||
install(TARGETS friendiqa DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
install(FILES images/de.manic.Friendiqa.desktop DESTINATION share/applications)
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ void ALARM::setAlarm(int interval)
|
|||
QVariantMap message;
|
||||
message["value"] = interval;
|
||||
AndroidNative::SystemDispatcher::instance()->loadClass("androidnative.Util");
|
||||
AndroidNative::SystemDispatcher::instance()->dispatch("androidnative.Util.setPostNotification", message);
|
||||
AndroidNative::SystemDispatcher::instance()->dispatch("androidnative.Util.setSchedule", message);
|
||||
AndroidNative::SystemDispatcher::instance()->dispatch("androidnative.Util.stopService", message);
|
||||
}
|
||||
|
|
|
|||
262
source-linux/common/documenthandler.cpp
Normal file
|
|
@ -0,0 +1,262 @@
|
|||
// This file is part of Friendiqa
|
||||
// https://github.com/lubuwest/Friendiqa
|
||||
// Copyright (C) 2020 Marco R. <thomasschmidt45@gmx.net>
|
||||
//
|
||||
// This program 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 copyright holders give
|
||||
// permission to link the code of portions of this program with the
|
||||
// OpenSSL library under certain conditions as described in each
|
||||
// individual source file, and distribute linked combinations including
|
||||
// the two.
|
||||
//
|
||||
// You must obey the GNU General Public License in all respects for all
|
||||
// of the code used other than OpenSSL. If you modify file(s) with this
|
||||
// exception, you may extend this exception to your version of the
|
||||
// file(s), but you are not obligated to do so. If you do not wish to do
|
||||
// so, delete this exception statement from your version. If you delete
|
||||
// this exception statement from all source files in the program, then
|
||||
// also delete it here.
|
||||
//
|
||||
// This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <QQuickTextDocument>
|
||||
#include <QTextCharFormat>
|
||||
#include <QStringDecoder>
|
||||
#include <QTextDocument>
|
||||
#include <QTextDocumentFragment>
|
||||
#include <QTextList>
|
||||
#include <QDebug>
|
||||
#include "documenthandler.h"
|
||||
|
||||
DocumentHandler::DocumentHandler(QObject *parent)
|
||||
: QObject(parent)
|
||||
, m_document(nullptr)
|
||||
, m_cursorPosition(-1)
|
||||
, m_selectionStart(0)
|
||||
, m_selectionEnd(0)
|
||||
{
|
||||
}
|
||||
|
||||
QQuickTextDocument *DocumentHandler::document() const
|
||||
{
|
||||
return m_document;
|
||||
}
|
||||
|
||||
void DocumentHandler::setDocument(QQuickTextDocument *document)
|
||||
{
|
||||
if (document == m_document)
|
||||
return;
|
||||
|
||||
if (m_document)
|
||||
disconnect(m_document->textDocument(), &QTextDocument::modificationChanged, this, &DocumentHandler::modifiedChanged);
|
||||
m_document = document;
|
||||
if (m_document)
|
||||
connect(m_document->textDocument(), &QTextDocument::modificationChanged, this, &DocumentHandler::modifiedChanged);
|
||||
emit documentChanged();
|
||||
}
|
||||
|
||||
int DocumentHandler::cursorPosition() const
|
||||
{
|
||||
return m_cursorPosition;
|
||||
}
|
||||
|
||||
void DocumentHandler::setCursorPosition(int position)
|
||||
{
|
||||
if (position == m_cursorPosition)
|
||||
return;
|
||||
|
||||
m_cursorPosition = position;
|
||||
emit cursorPositionChanged();
|
||||
}
|
||||
|
||||
int DocumentHandler::selectionStart() const
|
||||
{
|
||||
return m_selectionStart;
|
||||
}
|
||||
|
||||
void DocumentHandler::setSelectionStart(int position)
|
||||
{
|
||||
if (position == m_selectionStart)
|
||||
return;
|
||||
|
||||
m_selectionStart = position;
|
||||
emit selectionStartChanged();
|
||||
}
|
||||
|
||||
int DocumentHandler::selectionEnd() const
|
||||
{
|
||||
return m_selectionEnd;
|
||||
}
|
||||
|
||||
void DocumentHandler::setSelectionEnd(int position)
|
||||
{
|
||||
if (position == m_selectionEnd)
|
||||
return;
|
||||
|
||||
m_selectionEnd = position;
|
||||
emit selectionEndChanged();
|
||||
}
|
||||
|
||||
QTextCursor DocumentHandler::textCursor() const
|
||||
{
|
||||
QTextDocument *doc = textDocument();
|
||||
if (!doc)
|
||||
return QTextCursor();
|
||||
QTextCursor cursor = QTextCursor(doc);
|
||||
if (m_selectionStart != m_selectionEnd) {
|
||||
cursor.setPosition(m_selectionStart);
|
||||
cursor.setPosition(m_selectionEnd, QTextCursor::KeepAnchor);
|
||||
} else {
|
||||
cursor.setPosition(m_cursorPosition);
|
||||
}
|
||||
return cursor;
|
||||
}
|
||||
|
||||
QTextDocument *DocumentHandler::textDocument() const
|
||||
{
|
||||
if (!m_document)
|
||||
return nullptr;
|
||||
|
||||
return m_document->textDocument();
|
||||
}
|
||||
|
||||
void DocumentHandler::mergeFormatOnWordOrSelection(const QTextCharFormat &format)
|
||||
{
|
||||
QTextCursor cursor = textCursor();
|
||||
if (!cursor.hasSelection())
|
||||
cursor.select(QTextCursor::WordUnderCursor);
|
||||
cursor.mergeCharFormat(format);
|
||||
}
|
||||
|
||||
bool DocumentHandler::modified() const
|
||||
{
|
||||
return m_document && m_document->textDocument()->isModified();
|
||||
}
|
||||
|
||||
void DocumentHandler::setModified(bool m)
|
||||
{
|
||||
if (m_document)
|
||||
m_document->textDocument()->setModified(m);
|
||||
}
|
||||
|
||||
QFont DocumentHandler::font() const
|
||||
{
|
||||
QTextCursor cursor = textCursor();
|
||||
if (cursor.isNull())
|
||||
return m_document->textDocument()->defaultFont();
|
||||
QTextCharFormat format = cursor.charFormat();
|
||||
return format.font();
|
||||
}
|
||||
|
||||
void DocumentHandler::setFont(const QFont & font){
|
||||
|
||||
QTextCursor cursor = textCursor();
|
||||
if (!cursor.isNull() && cursor.charFormat().font() == font)
|
||||
return;
|
||||
|
||||
QTextCharFormat format;
|
||||
format.setFont(font);
|
||||
mergeFormatOnWordOrSelection(format);
|
||||
|
||||
emit fontChanged();
|
||||
}
|
||||
|
||||
bool DocumentHandler::bold() const
|
||||
{
|
||||
const QTextCursor cursor = textCursor();
|
||||
if (cursor.isNull())
|
||||
return m_document->textDocument()->defaultFont().bold();
|
||||
return cursor.charFormat().font().bold();
|
||||
}
|
||||
|
||||
void DocumentHandler::setBold(bool bold)
|
||||
{
|
||||
const QTextCursor cursor = textCursor();
|
||||
if (!cursor.isNull() && cursor.charFormat().font().bold() == bold)
|
||||
return;
|
||||
|
||||
QFont font = cursor.charFormat().font();
|
||||
font.setBold(bold);
|
||||
QTextCharFormat format;
|
||||
format.setFont(font);
|
||||
mergeFormatOnWordOrSelection(format);
|
||||
|
||||
emit boldChanged();
|
||||
}
|
||||
|
||||
bool DocumentHandler::italic() const
|
||||
{
|
||||
const QTextCursor cursor = textCursor();
|
||||
if (cursor.isNull())
|
||||
return m_document->textDocument()->defaultFont().italic();
|
||||
return cursor.charFormat().font().italic();
|
||||
}
|
||||
|
||||
void DocumentHandler::setItalic(bool italic)
|
||||
{
|
||||
const QTextCursor cursor = textCursor();
|
||||
if (!cursor.isNull() && cursor.charFormat().font().italic() == italic)
|
||||
return;
|
||||
|
||||
QFont font = cursor.charFormat().font();
|
||||
font.setItalic(italic);
|
||||
QTextCharFormat format;
|
||||
format.setFont(font);
|
||||
mergeFormatOnWordOrSelection(format);
|
||||
|
||||
emit italicChanged();
|
||||
}
|
||||
|
||||
bool DocumentHandler::liststyle() const
|
||||
{
|
||||
const QTextCursor cursor = textCursor();
|
||||
if (cursor.isNull())
|
||||
return false;
|
||||
return bool(cursor.currentList());
|
||||
}
|
||||
|
||||
void DocumentHandler::setListstyle(bool liststyle)
|
||||
{
|
||||
QTextCursor cursor = textCursor();
|
||||
if (!cursor.isNull() && !liststyle){
|
||||
cursor.currentList()->remove(cursor.block());
|
||||
emit liststyleChanged();
|
||||
}else{
|
||||
cursor.createList(QTextListFormat::ListDisc);
|
||||
emit liststyleChanged();
|
||||
}
|
||||
}
|
||||
|
||||
bool DocumentHandler::codeblock() const
|
||||
{
|
||||
const QTextCursor cursor = textCursor();
|
||||
if (cursor.isNull())
|
||||
return false;
|
||||
qDebug()<< QTextDocumentFragment(cursor).toPlainText();
|
||||
return bool(QTextDocumentFragment(cursor).toMarkdown().contains("```"));
|
||||
}
|
||||
|
||||
void DocumentHandler::setCodeblock(bool codeblock)
|
||||
{
|
||||
QTextCursor cursor = textCursor();
|
||||
if (!cursor.isNull() && !codeblock){
|
||||
qDebug()<< "!codeblock ```\n" + QTextDocumentFragment(cursor).toMarkdown() + "\n```";
|
||||
cursor.insertMarkdown("```\n" + QTextDocumentFragment(cursor).toMarkdown() + "\n```");
|
||||
emit codeblockChanged();
|
||||
}
|
||||
else{
|
||||
qDebug()<< "```\n" + QTextDocumentFragment(cursor).toMarkdown() + "\n```";
|
||||
cursor.insertMarkdown(QTextDocumentFragment(cursor).toMarkdown().remove("```"));
|
||||
emit codeblockChanged();
|
||||
}
|
||||
}
|
||||
114
source-linux/common/documenthandler.h
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
// This file is part of Friendiqa
|
||||
// https://github.com/lubuwest/Friendiqa
|
||||
// Copyright (C) 2020 Marco R. <thomasschmidt45@gmx.net>
|
||||
//
|
||||
// This program 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 copyright holders give
|
||||
// permission to link the code of portions of this program with the
|
||||
// OpenSSL library under certain conditions as described in each
|
||||
// individual source file, and distribute linked combinations including
|
||||
// the two.
|
||||
//
|
||||
// You must obey the GNU General Public License in all respects for all
|
||||
// of the code used other than OpenSSL. If you modify file(s) with this
|
||||
// exception, you may extend this exception to your version of the
|
||||
// file(s), but you are not obligated to do so. If you do not wish to do
|
||||
// so, delete this exception statement from your version. If you delete
|
||||
// this exception statement from all source files in the program, then
|
||||
// also delete it here.
|
||||
//
|
||||
// This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#ifndef DOCUMENTHANDLER_H
|
||||
#define DOCUMENTHANDLER_H
|
||||
|
||||
//#include <QFont>
|
||||
#include <QObject>
|
||||
#include <QTextCursor>
|
||||
#include <QTextDocument>
|
||||
#include <QQuickTextDocument>
|
||||
//QT_BEGIN_NAMESPACE
|
||||
//class QTextDocument;
|
||||
//class QQuickTextDocument;
|
||||
//QT_END_NAMESPACE
|
||||
|
||||
class DocumentHandler : public QObject{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(QQuickTextDocument *document READ document WRITE setDocument NOTIFY documentChanged)
|
||||
Q_PROPERTY(int cursorPosition READ cursorPosition WRITE setCursorPosition NOTIFY cursorPositionChanged)
|
||||
Q_PROPERTY(int selectionStart READ selectionStart WRITE setSelectionStart NOTIFY selectionStartChanged)
|
||||
Q_PROPERTY(int selectionEnd READ selectionEnd WRITE setSelectionEnd NOTIFY selectionEndChanged)
|
||||
Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged)
|
||||
Q_PROPERTY(bool bold READ bold WRITE setBold NOTIFY boldChanged)
|
||||
Q_PROPERTY(bool italic READ italic WRITE setItalic NOTIFY italicChanged)
|
||||
Q_PROPERTY(bool liststyle READ liststyle WRITE setListstyle NOTIFY liststyleChanged)
|
||||
Q_PROPERTY(bool codeblock READ codeblock WRITE setCodeblock NOTIFY codeblockChanged)
|
||||
Q_PROPERTY(bool modified READ modified WRITE setModified NOTIFY modifiedChanged)
|
||||
|
||||
public:
|
||||
explicit DocumentHandler(QObject *parent = nullptr);
|
||||
|
||||
QQuickTextDocument *document() const;
|
||||
void setDocument(QQuickTextDocument *document);
|
||||
|
||||
int cursorPosition() const;
|
||||
void setCursorPosition(int position);
|
||||
|
||||
int selectionStart() const;
|
||||
void setSelectionStart(int position);
|
||||
|
||||
int selectionEnd() const;
|
||||
void setSelectionEnd(int position);
|
||||
|
||||
QFont font() const;
|
||||
void setFont(const QFont & font);
|
||||
|
||||
bool bold() const;
|
||||
void setBold(bool bold);
|
||||
|
||||
bool italic() const;
|
||||
void setItalic(bool italic);
|
||||
|
||||
bool liststyle() const;
|
||||
void setListstyle(bool liststyle);
|
||||
|
||||
bool modified() const;
|
||||
void setModified(bool m);
|
||||
|
||||
bool codeblock() const;
|
||||
void setCodeblock(bool codeblock);
|
||||
|
||||
signals:
|
||||
void documentChanged();
|
||||
void cursorPositionChanged();
|
||||
void selectionStartChanged();
|
||||
void selectionEndChanged();
|
||||
void fontChanged();
|
||||
void boldChanged();
|
||||
void italicChanged();
|
||||
void liststyleChanged();
|
||||
void codeblockChanged();
|
||||
void error(const QString &message);
|
||||
void modifiedChanged();
|
||||
|
||||
private:
|
||||
QTextCursor textCursor() const;
|
||||
QTextDocument *textDocument() const;
|
||||
void mergeFormatOnWordOrSelection(const QTextCharFormat &format);
|
||||
QQuickTextDocument *m_document;
|
||||
int m_cursorPosition;
|
||||
int m_selectionStart;
|
||||
int m_selectionEnd;
|
||||
};
|
||||
|
||||
#endif // DOCUMENTHANDLER_H
|
||||
|
|
@ -177,7 +177,13 @@ void FILESYSTEM::setAutostart(bool autostart) {
|
|||
|
||||
QString FILESYSTEM::osType() const
|
||||
{
|
||||
return QSysInfo::productType();
|
||||
QString m_osType;
|
||||
if(QSysInfo::productType()==QString("android")){
|
||||
m_osType="Android";
|
||||
}else{
|
||||
m_osType="Linux";
|
||||
}
|
||||
return m_osType;
|
||||
}
|
||||
|
||||
QString FILESYSTEM::hostname() const
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
|
||||
#include <QApplication>
|
||||
#include <QtQml/QQmlEngine>
|
||||
#include <QtQml/qqml.h>
|
||||
//#include <QtWebEngine>
|
||||
//#include <QAndroidService>
|
||||
//#include <QtAndroid>
|
||||
|
|
@ -38,9 +39,10 @@
|
|||
#include "xhr.h"
|
||||
#include "updatenews.h"
|
||||
#include "filesystem.h"
|
||||
#include "remoteauthasyncimageprovider.h"
|
||||
//#include "remoteauthasyncimageprovider.h"
|
||||
#include "alarm.h"
|
||||
#include "oauth.h"
|
||||
#include "documenthandler.h"
|
||||
//#include "AndroidNative/systemdispatcher.h"
|
||||
//#include "AndroidNative/environment.h"
|
||||
//#include "AndroidNative/debug.h"
|
||||
|
|
@ -48,6 +50,7 @@
|
|||
//#include <QQuickWidget>
|
||||
#include <QSystemTrayIcon>
|
||||
#include <QQmlContext>
|
||||
#include <QQuickStyle>
|
||||
|
||||
// Declare a user-defined data type to work with an icon in QML
|
||||
Q_DECLARE_METATYPE(QSystemTrayIcon::ActivationReason)
|
||||
|
|
@ -59,11 +62,11 @@ Q_DECLARE_METATYPE(QSystemTrayIcon::ActivationReason)
|
|||
#include <QtAndroidExtras/QAndroidJniEnvironment>
|
||||
JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void*) {
|
||||
Q_UNUSED(vm);
|
||||
qDebug("NativeInterface::JNI_OnLoad()"); // It must call this function within JNI_OnLoad to enable System Dispatcher
|
||||
qDebug("NativeInterface::JNI_OnLoad()"); // It must call this function within JNI_OnLoad to enable System Dispatcher
|
||||
|
||||
AndroidNative::SystemDispatcher::registerNatives();
|
||||
return JNI_VERSION_1_6;
|
||||
}
|
||||
AndroidNative::SystemDispatcher::registerNatives();
|
||||
return JNI_VERSION_1_6;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
|
@ -83,45 +86,47 @@ int main(int argc, char *argv[]) {
|
|||
//return app.exec();
|
||||
}
|
||||
else{
|
||||
//QtWebEngine::initialize();
|
||||
QApplication app(argc, argv);
|
||||
QQmlApplicationEngine view;
|
||||
//QQuickView view;
|
||||
//view.setResizeMode(QQuickView::SizeRootObjectToView);
|
||||
app.setWindowIcon(QIcon(":/images/Friendiqa.ico"));
|
||||
QTranslator qtTranslator;
|
||||
qtTranslator.load("friendiqa-" + QLocale::system().name(),":/translations");
|
||||
app.installTranslator(&qtTranslator);
|
||||
RemoteAuthAsyncImageProvider *imageProvider = new RemoteAuthAsyncImageProvider;
|
||||
view.addImageProvider("remoteauthimage",imageProvider);
|
||||
view.rootContext()->setContextProperty("remoteauth", imageProvider);
|
||||
XHR* xhr = XHR::instance();
|
||||
view.rootContext()->setContextProperty("xhr", xhr);
|
||||
FILESYSTEM* filesystem = FILESYSTEM::instance();
|
||||
if (qstrcmp(argv[1],"-background")==0){
|
||||
filesystem->setVisibility(false);
|
||||
} else{filesystem->setVisibility(true);}
|
||||
//QtWebEngine::initialize();
|
||||
QGuiApplication::setApplicationName("Friendiqa");
|
||||
QGuiApplication::setOrganizationName("Friendiqa");
|
||||
QApplication app(argc, argv);
|
||||
QQmlApplicationEngine view;
|
||||
//view.setResizeMode(QQuickView::SizeRootObjectToView);
|
||||
app.setWindowIcon(QIcon(":/images/Friendiqa.ico"));
|
||||
QTranslator qtTranslator;
|
||||
qtTranslator.load("friendiqa-" + QLocale::system().name(),":/translations");
|
||||
app.installTranslator(&qtTranslator);
|
||||
// RemoteAuthAsyncImageProvider *imageProvider = new RemoteAuthAsyncImageProvider;
|
||||
// view.addImageProvider("remoteauthimage",imageProvider);
|
||||
// view.rootContext()->setContextProperty("remoteauth", imageProvider);
|
||||
XHR* xhr = XHR::instance();
|
||||
view.rootContext()->setContextProperty("xhr", xhr);
|
||||
FILESYSTEM* filesystem = FILESYSTEM::instance();
|
||||
if (qstrcmp(argv[1],"-background")==0){
|
||||
filesystem->setVisibility(false);
|
||||
} else{filesystem->setVisibility(true);}
|
||||
|
||||
view.rootContext()->setContextProperty("filesystem", filesystem);
|
||||
ALARM* alarm = ALARM::instance();
|
||||
view.rootContext()->setContextProperty("alarm", alarm);
|
||||
UPDATENEWS* updatenews = UPDATENEWS::instance();
|
||||
view.rootContext()->setContextProperty("updatenews", updatenews);
|
||||
view.rootContext()->setContextProperty("filesystem", filesystem);
|
||||
ALARM* alarm = ALARM::instance();
|
||||
view.rootContext()->setContextProperty("alarm", alarm);
|
||||
UPDATENEWS* updatenews = UPDATENEWS::instance();
|
||||
view.rootContext()->setContextProperty("updatenews", updatenews);
|
||||
updatenews->setDatabase();
|
||||
OAuthWrapper* oauth2 = OAuthWrapper::instance();
|
||||
view.rootContext()->setContextProperty("oauth2", oauth2);
|
||||
qmlRegisterType<DocumentHandler>("io.qt.examples.texteditor", 1, 0, "DocumentHandler");
|
||||
qmlRegisterType<QSystemTrayIcon>("QSystemTrayIcon", 1, 0, "QSystemTrayIcon");
|
||||
qRegisterMetaType<QSystemTrayIcon::ActivationReason>("ActivationReason");
|
||||
view.rootContext()->setContextProperty("iconTrayBlack", QIcon(QPixmap(":/images/friendica-tray-black.svg")));
|
||||
view.rootContext()->setContextProperty("iconTrayWhite", QIcon(QPixmap(":/images/friendica-tray-white.svg")));
|
||||
|
||||
OAuthWrapper* oauth2 = OAuthWrapper::instance();
|
||||
view.rootContext()->setContextProperty("oauth2", oauth2);
|
||||
|
||||
qmlRegisterType<QSystemTrayIcon>("QSystemTrayIcon", 1, 0, "QSystemTrayIcon");
|
||||
qRegisterMetaType<QSystemTrayIcon::ActivationReason>("ActivationReason");
|
||||
view.rootContext()->setContextProperty("iconTray", QIcon(":/images/Friendica_monochrome.png"));
|
||||
view.rootContext()->setContextProperty("iconTrayAvailable", QSystemTrayIcon::isSystemTrayAvailable());
|
||||
|
||||
view.load(QUrl("qrc:/qml/friendiqa.qml"));
|
||||
//view.show();
|
||||
|
||||
view.connect(view.rootContext()->engine(), SIGNAL(quit()), &app, SLOT(quit()));
|
||||
return app.exec();
|
||||
view.rootContext()->setContextProperty("iconTrayAvailable", QSystemTrayIcon::isSystemTrayAvailable());
|
||||
if(updatenews->getStyle() != 0){
|
||||
QQuickStyle::setStyle("Material");
|
||||
}
|
||||
view.load(QUrl("qrc:/qml/friendiqa.qml"));
|
||||
view.connect(view.rootContext()->engine(), SIGNAL(quit()), &app, SLOT(quit()));
|
||||
return app.exec();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -89,6 +89,17 @@ void UPDATENEWS::setDatabase()
|
|||
}
|
||||
}
|
||||
|
||||
int UPDATENEWS::getStyle()
|
||||
{
|
||||
QSqlQuery syncquery("SELECT * FROM globaloptions",m_db);
|
||||
while (syncquery.next()){
|
||||
if (syncquery.value(0).toString()=="view_darkmode"){
|
||||
return syncquery.value(1).toInt();
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
QJsonArray UPDATENEWS::getAccounts(QString filtername, QString filtervalue){
|
||||
QString filterstring="";
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ signals:
|
|||
public slots:
|
||||
void setSyncAll(bool syncAll);
|
||||
void setDatabase();
|
||||
int getStyle();
|
||||
void login();
|
||||
void timeline();
|
||||
void replies();
|
||||
|
|
|
|||
|
|
@ -227,7 +227,7 @@ void XHR::download()
|
|||
//connect(reply,SIGNAL(downloadProgress(qint64,qint64)), this,SLOT(updateDownloadProgress(qint64,qint64)));
|
||||
connect(reply, &QNetworkReply::finished,this, &XHR::onRequestFinished);
|
||||
connect(reply, &QNetworkReply::sslErrors, this, &XHR::onSSLError);
|
||||
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError)));
|
||||
connect(reply, SIGNAL(errorOccurred(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError)));
|
||||
}
|
||||
|
||||
void XHR::get()
|
||||
|
|
@ -254,7 +254,7 @@ void XHR::get()
|
|||
reply = manager.get(request);
|
||||
connect(reply, &QNetworkReply::finished, this, &XHR::onReplySuccess);
|
||||
//connect(reply,SIGNAL(downloadProgress(qint64,qint64)), this,SLOT(updateDownloadProgress(qint64,qint64)));
|
||||
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError)));
|
||||
connect(reply, SIGNAL(errorOccurred(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError)));
|
||||
connect(reply, &QNetworkReply::readyRead, this, &XHR::onReadyRead);
|
||||
connect(reply, &QNetworkReply::sslErrors, this, &XHR::onSSLError);
|
||||
}
|
||||
|
|
@ -312,7 +312,7 @@ void XHR::post()
|
|||
reply = manager.post(request, multiPart);
|
||||
qDebug() << "\t request sent";
|
||||
connect(reply, &QNetworkReply::finished, this, &XHR::onReplySuccess);
|
||||
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError)));
|
||||
connect(reply, SIGNAL(errorOccurred(QNetworkReply::NetworkError)), this, SLOT(onReplyError(QNetworkReply::NetworkError)));
|
||||
connect(reply, &QNetworkReply::readyRead, this, &XHR::onReadyRead);
|
||||
connect(reply, &QNetworkReply::sslErrors, this, &XHR::onSSLError);
|
||||
}
|
||||
|
|
|
|||
707
source-linux/images/friendica-tray-black.svg
Normal file
|
|
@ -0,0 +1,707 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="de-DE" class="theme-forgejo-auto">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Friendiqa/friendica-tray-black.svg an master - Friendiqa - Friendica</title>
|
||||
<link rel="manifest" href="data:application/json;base64,eyJuYW1lIjoiRnJpZW5kaWNhIiwic2hvcnRfbmFtZSI6IkZyaWVuZGljYSIsInN0YXJ0X3VybCI6Imh0dHBzOi8vZ2l0LmZyaWVuZGkuY2EvIiwiaWNvbnMiOlt7InNyYyI6Imh0dHBzOi8vZ2l0LmZyaWVuZGkuY2EvYXNzZXRzL2ltZy9sb2dvLnBuZyIsInR5cGUiOiJpbWFnZS9wbmciLCJzaXplcyI6IjUxMng1MTIifSx7InNyYyI6Imh0dHBzOi8vZ2l0LmZyaWVuZGkuY2EvYXNzZXRzL2ltZy9sb2dvLnN2ZyIsInR5cGUiOiJpbWFnZS9zdmcreG1sIiwic2l6ZXMiOiI1MTJ4NTEyIn1dfQ==">
|
||||
<meta name="theme-color" content="#6cc644">
|
||||
<meta name="default-theme" content="forgejo-auto">
|
||||
<meta name="author" content="MorsMortium">
|
||||
<meta name="description" content="Friendiqa - Qt/QML App for Friendiqa ">
|
||||
<meta name="keywords" content="git,forge,forgejo">
|
||||
<meta name="referrer" content="no-referrer">
|
||||
|
||||
|
||||
<link rel="alternate" type="application/atom+xml" title="" href="/MorsMortium/Friendiqa.atom">
|
||||
<link rel="alternate" type="application/rss+xml" title="" href="/MorsMortium/Friendiqa.rss">
|
||||
|
||||
<link rel="icon" href="/assets/img/favicon.svg" type="image/svg+xml">
|
||||
<link rel="alternate icon" href="/assets/img/favicon.png" type="image/png">
|
||||
<link rel="stylesheet" href="/assets/css/index.css?v=1.19.0~2">
|
||||
|
||||
<script>
|
||||
window.addEventListener('error', function(e) {window._globalHandlerErrors=window._globalHandlerErrors||[]; window._globalHandlerErrors.push(e);});
|
||||
window.config = {
|
||||
appUrl: 'https:\/\/git.friendi.ca\/',
|
||||
appSubUrl: '',
|
||||
assetVersionEncoded: encodeURIComponent('1.19.0~2'),
|
||||
assetUrlPrefix: '\/assets',
|
||||
runModeIsProd: true ,
|
||||
customEmojis: {"codeberg":":codeberg:","forgejo":":forgejo:","git":":git:","gitea":":gitea:","github":":github:","gitlab":":gitlab:","gogs":":gogs:"},
|
||||
useServiceWorker: false ,
|
||||
csrfToken: 'j3AMY83WEMWZdgwpxwqbuqbFxoE6MTY4NzcwMzA1ODE4MzkyMDQyOQ',
|
||||
pageData: {},
|
||||
requireTribute: null ,
|
||||
notificationSettings: {"EventSourceUpdateTime":10000,"MaxTimeout":60000,"MinTimeout":10000,"TimeoutStep":10000},
|
||||
enableTimeTracking: true ,
|
||||
|
||||
mermaidMaxSourceCharacters: 5000 ,
|
||||
|
||||
i18n: {
|
||||
copy_success: 'Kopiert!',
|
||||
copy_error: 'Kopieren fehlgeschlagen',
|
||||
error_occurred: 'Ein Fehler ist aufgetreten',
|
||||
network_error: 'Netzwerkfehler',
|
||||
},
|
||||
};
|
||||
|
||||
window.config.pageData = window.config.pageData || {};
|
||||
</script>
|
||||
<script src="/assets/js/webcomponents.js?v=1.19.0~2"></script>
|
||||
|
||||
<noscript>
|
||||
<style>
|
||||
.dropdown:hover > .menu { display: block; }
|
||||
.ui.secondary.menu .dropdown.item > .menu { margin-top: 0; }
|
||||
</style>
|
||||
</noscript>
|
||||
|
||||
|
||||
<meta property="og:title" content="Friendiqa">
|
||||
<meta property="og:url" content="https://git.friendi.ca/MorsMortium/Friendiqa">
|
||||
|
||||
<meta property="og:description" content="Qt/QML App for Friendiqa ">
|
||||
|
||||
|
||||
<meta property="og:type" content="object">
|
||||
|
||||
<meta property="og:image" content="https://git.friendi.ca/avatars/082870e8cbbfe310f1eb7f6c3e2253f1">
|
||||
|
||||
|
||||
<meta property="og:site_name" content="Friendica">
|
||||
|
||||
<link rel="stylesheet" href="/assets/css/theme-forgejo-auto.css?v=1.19.0~2">
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<div class="full height">
|
||||
<noscript>Diese Webseite funktioniert besser mit JavaScript.</noscript>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="ui top secondary stackable main menu following bar light no-vertical-tabs">
|
||||
<nav class="ui container" id="navbar" aria-label="Navigation Bar">
|
||||
|
||||
|
||||
<div class="item brand gt-sb">
|
||||
<a href="/" aria-label="Startseite">
|
||||
<img width="30" height="30" src="/assets/img/logo.svg" alt="Logo" aria-hidden="true">
|
||||
</a>
|
||||
<div class="gt-df gt-ac">
|
||||
|
||||
<button class="ui icon button mobile-only" id="navbar-expand-toggle">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-three-bars" width="16" height="16" aria-hidden="true"><path d="M1 2.75A.75.75 0 0 1 1.75 2h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 2.75Zm0 5A.75.75 0 0 1 1.75 7h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 7.75ZM1.75 12h12.5a.75.75 0 0 1 0 1.5H1.75a.75.75 0 0 1 0-1.5Z"/></svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<a class="item " href="/explore/repos">Erkunden</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="item" target="_blank" rel="noopener noreferrer" href="https://forgejo.org/docs/latest/">Hilfe</a>
|
||||
<div class="right stackable menu">
|
||||
|
||||
<a class="item" href="/user/sign_up">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-person" width="16" height="16" aria-hidden="true"><path d="M10.561 8.073a6.005 6.005 0 0 1 3.432 5.142.75.75 0 1 1-1.498.07 4.5 4.5 0 0 0-8.99 0 .75.75 0 0 1-1.498-.07 6.004 6.004 0 0 1 3.431-5.142 3.999 3.999 0 1 1 5.123 0ZM10.5 5a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"/></svg> Registrieren
|
||||
</a>
|
||||
|
||||
<a class="item" rel="nofollow" href="/user/login?redirect_to=%2fMorsMortium%2fFriendiqa%2fsrc%2fbranch%2fmaster%2fsource-linux%2fimages%2ffriendica-tray-black.svg">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-sign-in" width="16" height="16" aria-hidden="true"><path d="M2 2.75C2 1.784 2.784 1 3.75 1h2.5a.75.75 0 0 1 0 1.5h-2.5a.25.25 0 0 0-.25.25v10.5c0 .138.112.25.25.25h2.5a.75.75 0 0 1 0 1.5h-2.5A1.75 1.75 0 0 1 2 13.25Zm6.56 4.5h5.69a.75.75 0 0 1 0 1.5H8.56l1.97 1.97a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L6.22 8.53a.75.75 0 0 1 0-1.06l3.25-3.25a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734Z"/></svg> Anmelden
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div role="main" aria-label="Friendiqa/friendica-tray-black.svg an master" class="page-content repository file list ">
|
||||
<div class="header-wrapper">
|
||||
|
||||
<div class="ui container">
|
||||
<div class="repo-header">
|
||||
<div class="repo-title-wrap gt-df gt-fc">
|
||||
<div class="repo-title" role="heading" aria-level="1">
|
||||
|
||||
|
||||
<div class="repo-icon gt-mr-3">
|
||||
|
||||
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-repo-forked" width="32" height="32" aria-hidden="true"><path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"/></svg>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<a href="/MorsMortium">MorsMortium</a>
|
||||
<div class="gt-mx-2">/</div>
|
||||
<a href="/MorsMortium/Friendiqa">Friendiqa</a>
|
||||
|
||||
<a href="/MorsMortium/Friendiqa.rss"><i class="ui grey icon tooltip gt-ml-3" data-content="RSS Feed" data-position="top center"><svg viewBox="0 0 16 16" class="svg octicon-rss" width="18" height="18" aria-hidden="true"><path d="M2.002 2.725a.75.75 0 0 1 .797-.699C8.79 2.42 13.58 7.21 13.974 13.201a.75.75 0 0 1-1.497.098 10.502 10.502 0 0 0-9.776-9.776.747.747 0 0 1-.7-.798ZM2.84 7.05h-.002a7.002 7.002 0 0 1 6.113 6.111.75.75 0 0 1-1.49.178 5.503 5.503 0 0 0-4.8-4.8.75.75 0 0 1 .179-1.489ZM2 13a1 1 0 1 1 2 0 1 1 0 0 1-2 0Z"/></svg></i></a>
|
||||
|
||||
<div class="labels gt-df gt-ac gt-fw">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="fork-flag">geforkt von <a href="/lubuwest/Friendiqa">lubuwest/Friendiqa</a></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="repo-buttons">
|
||||
|
||||
<form method="post" action="/MorsMortium/Friendiqa/action/watch?redirect_to=%2fMorsMortium%2fFriendiqa%2fsrc%2fbranch%2fmaster%2fsource-linux%2fimages%2ffriendica-tray-black.svg">
|
||||
<input type="hidden" name="_csrf" value="j3AMY83WEMWZdgwpxwqbuqbFxoE6MTY4NzcwMzA1ODE4MzkyMDQyOQ">
|
||||
<div class="ui labeled button tooltip" data-content="Melde dich an, um dieses Repository zu beobachten." data-position="top center">
|
||||
<button type="submit" class="ui compact small basic button" disabled>
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-eye" width="16" height="16" aria-hidden="true"><path d="M8 2c1.981 0 3.671.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.62 1.62 0 0 1 0 1.798c-.45.678-1.367 1.932-2.637 3.023C11.67 13.008 9.981 14 8 14c-1.981 0-3.671-.992-4.933-2.078C1.797 10.83.88 9.576.43 8.898a1.62 1.62 0 0 1 0-1.798c.45-.677 1.367-1.931 2.637-3.022C4.33 2.992 6.019 2 8 2ZM1.679 7.932a.12.12 0 0 0 0 .136c.411.622 1.241 1.75 2.366 2.717C5.176 11.758 6.527 12.5 8 12.5c1.473 0 2.825-.742 3.955-1.715 1.124-.967 1.954-2.096 2.366-2.717a.12.12 0 0 0 0-.136c-.412-.621-1.242-1.75-2.366-2.717C10.824 4.242 9.473 3.5 8 3.5c-1.473 0-2.825.742-3.955 1.715-1.124.967-1.954 2.096-2.366 2.717ZM8 10a2 2 0 1 1-.001-3.999A2 2 0 0 1 8 10Z"/></svg>Beobachten
|
||||
</button>
|
||||
<a class="ui basic label" href="/MorsMortium/Friendiqa/watchers">
|
||||
1
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<form method="post" action="/MorsMortium/Friendiqa/action/star?redirect_to=%2fMorsMortium%2fFriendiqa%2fsrc%2fbranch%2fmaster%2fsource-linux%2fimages%2ffriendica-tray-black.svg">
|
||||
<input type="hidden" name="_csrf" value="j3AMY83WEMWZdgwpxwqbuqbFxoE6MTY4NzcwMzA1ODE4MzkyMDQyOQ">
|
||||
<div class="ui labeled button tooltip" data-content="Bitte melde dich an, um dieses Repository zu favorisieren." data-position="top center">
|
||||
<button type="submit" class="ui compact small basic button" disabled>
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-star" width="16" height="16" aria-hidden="true"><path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"/></svg>Favorisieren
|
||||
</button>
|
||||
<a class="ui basic label" href="/MorsMortium/Friendiqa/stars">
|
||||
0
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
<div class="ui labeled button
|
||||
|
||||
tooltip disabled
|
||||
"
|
||||
|
||||
data-content="Bitte melde dich an, um dieses Repository zu forken."
|
||||
|
||||
data-position="top center">
|
||||
<a class="ui compact small basic button"
|
||||
|
||||
|
||||
|
||||
>
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-repo-forked" width="16" height="16" aria-hidden="true"><path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"/></svg>Fork
|
||||
</a>
|
||||
<div class="ui small modal" id="fork-repo-modal">
|
||||
<svg viewBox="0 0 16 16" class="close inside svg octicon-x" width="16" height="16" aria-hidden="true"><path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"/></svg>
|
||||
<div class="header">
|
||||
Du hast bereits einen Fork von Friendiqa erstellt
|
||||
</div>
|
||||
<div class="content gt-tl">
|
||||
<div class="ui list">
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="ui basic label" href="/MorsMortium/Friendiqa/forks">
|
||||
0
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ui tabs container">
|
||||
|
||||
<div class="ui tabular stackable menu navbar">
|
||||
|
||||
<a class="active item" href="/MorsMortium/Friendiqa">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-code" width="16" height="16" aria-hidden="true"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"/></svg> Code
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a class="item" href="/MorsMortium/Friendiqa/issues">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-issue-opened" width="16" height="16" aria-hidden="true"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"/><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"/></svg> Issues
|
||||
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="item" href="/MorsMortium/Friendiqa/pulls">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-git-pull-request" width="16" height="16" aria-hidden="true"><path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"/></svg> Pull-Requests
|
||||
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="/MorsMortium/Friendiqa/packages" class="item">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-package" width="16" height="16" aria-hidden="true"><path d="m8.878.392 5.25 3.045c.54.314.872.89.872 1.514v6.098a1.75 1.75 0 0 1-.872 1.514l-5.25 3.045a1.75 1.75 0 0 1-1.756 0l-5.25-3.045A1.75 1.75 0 0 1 1 11.049V4.951c0-.624.332-1.201.872-1.514L7.122.392a1.75 1.75 0 0 1 1.756 0ZM7.875 1.69l-4.63 2.685L8 7.133l4.755-2.758-4.63-2.685a.248.248 0 0 0-.25 0ZM2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432Zm6.25 8.271 4.625-2.683a.25.25 0 0 0 .125-.216V5.677L8.75 8.432Z"/></svg> Pakete
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a href="/MorsMortium/Friendiqa/projects" class="item">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-project" width="16" height="16" aria-hidden="true"><path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25ZM11.75 3a.75.75 0 0 1 .75.75v7.5a.75.75 0 0 1-1.5 0v-7.5a.75.75 0 0 1 .75-.75Zm-8.25.75a.75.75 0 0 1 1.5 0v5.5a.75.75 0 0 1-1.5 0ZM8 3a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 3Z"/></svg> Projekte
|
||||
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a class="item" href="/MorsMortium/Friendiqa/releases">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-tag" width="16" height="16" aria-hidden="true"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"/></svg> Releases
|
||||
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a class="item" href="/MorsMortium/Friendiqa/wiki" >
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-book" width="16" height="16" aria-hidden="true"><path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"/></svg> Wiki
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a class="item" href="/MorsMortium/Friendiqa/activity">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-pulse" width="16" height="16" aria-hidden="true"><path d="M6 2c.306 0 .582.187.696.471L10 10.731l1.304-3.26A.751.751 0 0 1 12 7h3.25a.75.75 0 0 1 0 1.5h-2.742l-1.812 4.528a.751.751 0 0 1-1.392 0L6 4.77 4.696 8.03A.75.75 0 0 1 4 8.5H.75a.75.75 0 0 1 0-1.5h2.742l1.812-4.529A.751.751 0 0 1 6 2Z"/></svg> Aktivität
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="ui tabs divider"></div>
|
||||
</div>
|
||||
|
||||
<div class="ui container ">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="gt-hidden" id="validate_prompt">
|
||||
<span id="count_prompt">Du kannst nicht mehr als 25 Themen auswählen</span>
|
||||
<span id="format_prompt">Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="repo-button-row gt-df gt-ac gt-sb gt-fw">
|
||||
<div class="gt-df gt-ac gt-fw gt-gap-y-3">
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="fitted item choose reference">
|
||||
<div class="ui floating filter dropdown custom"
|
||||
data-branch-form=""
|
||||
data-can-create-branch="false"
|
||||
data-no-results="Keine Ergebnisse verfügbar."
|
||||
data-set-action="" data-submit-form=""
|
||||
data-view-type="branch"
|
||||
data-ref-name="master"
|
||||
data-branch-url-prefix="/MorsMortium/Friendiqa/src/branch/"
|
||||
data-branch-url-suffix="/source-linux/images/friendica-tray-black.svg"
|
||||
data-tag-url-prefix="/MorsMortium/Friendiqa/src/tag/"
|
||||
data-tag-url-suffix="/source-linux/images/friendica-tray-black.svg">
|
||||
<button class="branch-dropdown-button gt-ellipsis ui basic small compact button gt-df" @click="menuVisible = !menuVisible" @keyup.enter="menuVisible = !menuVisible">
|
||||
<span class="text gt-df gt-ac gt-mr-2">
|
||||
|
||||
<span :class="{visible: isViewTag}" v-if="isViewTag" v-cloak><svg viewBox="0 0 16 16" class="svg octicon-tag" width="16" height="16" aria-hidden="true"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"/></svg></span>
|
||||
<span :class="{visible: isViewBranch}" v-if="isViewBranch" ><svg viewBox="0 0 16 16" class="svg octicon-git-branch" width="16" height="16" aria-hidden="true"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"/></svg></span>
|
||||
<span :class="{visible: isViewTree}" v-if="isViewTree" v-cloak><svg viewBox="0 0 16 16" class="svg octicon-git-branch" width="16" height="16" aria-hidden="true"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"/></svg></span>
|
||||
<strong ref="dropdownRefName" class="gt-ml-3">master</strong>
|
||||
|
||||
</span>
|
||||
<svg viewBox="0 0 16 16" class="dropdown icon svg octicon-triangle-down" width="14" height="14" aria-hidden="true"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"/></svg>
|
||||
</button>
|
||||
<div class="data gt-hidden" data-mode="branches">
|
||||
|
||||
|
||||
<div class="item branch selected" data-url="master">master</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.001">v0.001</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.002">v0.002</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.004">v0.004</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.1">v0.1</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.1.2">v0.1.2</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.2">v0.2</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.2.1">v0.2.1</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.2.2">v0.2.2</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.3.1">v0.3.1</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.3.2">v0.3.2</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.3.3">v0.3.3</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.3.4">v0.3.4</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.5">v0.5</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.5.1">v0.5.1</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.5.2">v0.5.2</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.5.3">v0.5.3</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.5.4">v0.5.4</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.5.4.1">v0.5.4.1</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.6">v0.6</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.6.1">v0.6.1</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.6.2">v0.6.2</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.6.3">v0.6.3</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.6.5">v0.6.5</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.6.6">v0.6.6</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div class="menu transition" :class="{visible: menuVisible}" v-if="menuVisible" v-cloak>
|
||||
<div class="ui icon search input">
|
||||
<i class="icon gt-df gt-ac gt-jc gt-m-0"><svg viewBox="0 0 16 16" class="svg octicon-filter" width="16" height="16" aria-hidden="true"><path d="M.75 3h14.5a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1 0-1.5ZM3 7.75A.75.75 0 0 1 3.75 7h8.5a.75.75 0 0 1 0 1.5h-8.5A.75.75 0 0 1 3 7.75Zm3 4a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z"/></svg></i>
|
||||
<input name="search" ref="searchField" autocomplete="off" v-model="searchTerm" @keydown="keydown($event)" placeholder="Branch oder Tag filtern...">
|
||||
</div>
|
||||
|
||||
<div class="header branch-tag-choice">
|
||||
<div class="ui grid">
|
||||
<div class="two column row">
|
||||
<a class="reference column" href="#" @click="createTag = false; mode = 'branches'; focusSearchField()">
|
||||
<span class="text" :class="{black: mode == 'branches'}">
|
||||
<svg viewBox="0 0 16 16" class="gt-mr-2 svg octicon-git-branch" width="16" height="16" aria-hidden="true"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"/></svg>Branches
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<a class="reference column" href="#" @click="createTag = true; mode = 'tags'; focusSearchField()">
|
||||
<span class="text" :class="{black: mode == 'tags'}">
|
||||
<svg viewBox="0 0 16 16" class="gt-mr-2 svg octicon-tag" width="16" height="16" aria-hidden="true"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"/></svg>Tags
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="scrolling menu" ref="scrollContainer">
|
||||
<div v-for="(item, index) in filteredItems" :key="item.name" class="item" :class="{selected: item.selected, active: active == index}" @click="selectItem(item)" :ref="'listItem' + index">${ item.name }</div>
|
||||
<div class="item" v-if="showCreateNewBranch" :class="{active: active == filteredItems.length}" :ref="'listItem' + filteredItems.length">
|
||||
<a href="#" @click="createNewBranch()">
|
||||
<div v-show="createTag">
|
||||
<i class="reference tags icon"></i>
|
||||
Tag <strong>${ searchTerm }</strong> erstellen
|
||||
</div>
|
||||
<div v-show="!createTag">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-git-branch" width="16" height="16" aria-hidden="true"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"/></svg>
|
||||
Erstelle Branch <strong>${ searchTerm }</strong>
|
||||
</div>
|
||||
<div class="text small">
|
||||
|
||||
von „master“
|
||||
|
||||
</div>
|
||||
</a>
|
||||
<form ref="newBranchForm" action="/MorsMortium/Friendiqa/branches/_new/branch/master" method="post">
|
||||
<input type="hidden" name="_csrf" value="j3AMY83WEMWZdgwpxwqbuqbFxoE6MTY4NzcwMzA1ODE4MzkyMDQyOQ">
|
||||
<input type="hidden" name="new_branch_name" v-model="searchTerm">
|
||||
<input type="hidden" name="create_tag" v-model="createTag">
|
||||
|
||||
<input type="hidden" name="current_path" value="source-linux/images/friendica-tray-black.svg">
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="message" v-if="showNoResults">${ noResults }</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="ui breadcrumb repo-path gt-ml-2"><a class="section" href="/MorsMortium/Friendiqa/src/branch/master" title="Friendiqa">Friendiqa</a><span class="divider">/</span><span class="section"><a href="/MorsMortium/Friendiqa/src/branch/master/source-linux" title="source-linux">source-linux</a></span><span class="divider">/</span><span class="section"><a href="/MorsMortium/Friendiqa/src/branch/master/source-linux/images" title="images">images</a></span><span class="divider">/</span><span class="active section" title="friendica-tray-black.svg">friendica-tray-black.svg</span></span>
|
||||
|
||||
</div>
|
||||
<div class="gt-df gt-ac">
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab-size-8 non-diff-file-content">
|
||||
<h4 class="file-header ui top attached header gt-df gt-ac gt-sb gt-fw">
|
||||
<div class="file-header-left gt-df gt-ac gt-py-3 gt-pr-4">
|
||||
|
||||
<div class="file-info text grey normal gt-mono">
|
||||
|
||||
|
||||
<div class="file-info-entry">
|
||||
42 Zeilen
|
||||
</div>
|
||||
|
||||
|
||||
<div class="file-info-entry">
|
||||
1.7 KiB
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="file-info-entry">
|
||||
XML
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="file-header-right file-actions gt-df gt-ac gt-fw">
|
||||
|
||||
<div class="ui compact icon buttons two-toggle-buttons">
|
||||
<a href="/MorsMortium/Friendiqa/src/branch/master/source-linux/images/friendica-tray-black.svg?display=source" class="ui mini basic button tooltip " data-content="Quelltext anzeigen" data-position="bottom center"><svg viewBox="0 0 16 16" class="svg octicon-code" width="15" height="15" aria-hidden="true"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"/></svg></a>
|
||||
<a href="/MorsMortium/Friendiqa/src/branch/master/source-linux/images/friendica-tray-black.svg" class="ui mini basic button tooltip active" data-content="Ansicht rendern" data-position="bottom center"><svg viewBox="0 0 16 16" class="svg octicon-file" width="15" height="15" aria-hidden="true"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"/></svg></a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="ui buttons gt-mr-2">
|
||||
<a class="ui mini basic button" href="/MorsMortium/Friendiqa/raw/branch/master/source-linux/images/friendica-tray-black.svg">Originalformat</a>
|
||||
|
||||
<a class="ui mini basic button" href="/MorsMortium/Friendiqa/src/commit/8dc907e345eaaebbe8b81b9b098385454e3e8f45/source-linux/images/friendica-tray-black.svg">Permalink</a>
|
||||
|
||||
|
||||
<a class="ui mini basic button" href="/MorsMortium/Friendiqa/blame/branch/master/source-linux/images/friendica-tray-black.svg">Blame</a>
|
||||
|
||||
<a class="ui mini basic button" href="/MorsMortium/Friendiqa/commits/branch/master/source-linux/images/friendica-tray-black.svg">Verlauf</a>
|
||||
|
||||
</div>
|
||||
<a download href="/MorsMortium/Friendiqa/raw/branch/master/source-linux/images/friendica-tray-black.svg"><span class="btn-octicon tooltip" data-content="Datei herunterladen" data-position="bottom center"><svg viewBox="0 0 16 16" class="svg octicon-download" width="16" height="16" aria-hidden="true"><path d="M7.47 10.78 3.72 7.03a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l2.47 2.47V1.75a.75.75 0 0 1 1.5 0v6.69l2.47-2.47a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-3.75 3.75a.75.75 0 0 1-1.06 0ZM3.75 13h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Z"/></svg></span></a>
|
||||
<a id="copy-content" class="btn-octicon tooltip" data-link="/MorsMortium/Friendiqa/raw/branch/master/source-linux/images/friendica-tray-black.svg" data-content="Copy content"><svg viewBox="0 0 16 16" class="svg octicon-copy" width="14" height="14" aria-hidden="true"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"/><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"/></svg></a>
|
||||
|
||||
|
||||
<span class="btn-octicon tooltip disabled" data-content="Du musst dieses Repository forken, um Änderungen an dieser Datei vorzuschlagen oder vorzunehmen." data-position="bottom center"><svg viewBox="0 0 16 16" class="svg octicon-pencil" width="16" height="16" aria-hidden="true"><path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.253.253 0 0 0-.064.108l-.558 1.953 1.953-.558a.253.253 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z"/></svg></span>
|
||||
|
||||
|
||||
<span class="btn-octicon tooltip disabled" data-content="Du benötigst Schreibzugriff, um Änderungen an dieser Datei vorzuschlagen oder vorzunehmen." data-position="bottom center"><svg viewBox="0 0 16 16" class="svg octicon-trash" width="16" height="16" aria-hidden="true"><path d="M11 1.75V3h2.25a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75ZM4.496 6.675l.66 6.6a.25.25 0 0 0 .249.225h5.19a.25.25 0 0 0 .249-.225l.66-6.6a.75.75 0 0 1 1.492.149l-.66 6.6A1.748 1.748 0 0 1 10.595 15h-5.19a1.75 1.75 0 0 1-1.741-1.575l-.66-6.6a.75.75 0 1 1 1.492-.15ZM6.5 1.75V3h3V1.75a.25.25 0 0 0-.25-.25h-2.5a.25.25 0 0 0-.25.25Z"/></svg></span>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</h4>
|
||||
<div class="ui attached table unstackable segment">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="file-view">
|
||||
|
||||
<div class="view-raw ui center">
|
||||
|
||||
<img src="/MorsMortium/Friendiqa/raw/branch/master/source-linux/images/friendica-tray-black.svg">
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<footer role="group" aria-label="Footer">
|
||||
<div class="ui container">
|
||||
<div class="ui left" role="contentinfo" aria-label="About Software">
|
||||
<a target="_blank" rel="noopener noreferrer" href="https://forgejo.org">Powered by Forgejo</a>
|
||||
|
||||
Version:
|
||||
|
||||
1.19.0+2
|
||||
|
||||
|
||||
|
||||
Seite: <strong>37ms</strong>
|
||||
Template: <strong>1ms</strong>
|
||||
|
||||
</div>
|
||||
<div class="ui right links" role="group" aria-label="Links">
|
||||
|
||||
<div class="ui language bottom floating slide up dropdown link item">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-globe" width="16" height="16" aria-hidden="true"><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM5.78 8.75a9.64 9.64 0 0 0 1.363 4.177c.255.426.542.832.857 1.215.245-.296.551-.705.857-1.215A9.64 9.64 0 0 0 10.22 8.75Zm4.44-1.5a9.64 9.64 0 0 0-1.363-4.177c-.307-.51-.612-.919-.857-1.215a9.927 9.927 0 0 0-.857 1.215A9.64 9.64 0 0 0 5.78 7.25Zm-5.944 1.5H1.543a6.507 6.507 0 0 0 4.666 5.5c-.123-.181-.24-.365-.352-.552-.715-1.192-1.437-2.874-1.581-4.948Zm-2.733-1.5h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.507 6.507 0 0 0-4.666 5.5Zm10.181 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.507 6.507 0 0 0 4.666-5.5Zm2.733-1.5a6.507 6.507 0 0 0-4.666-5.5c.123.181.24.365.353.552.714 1.192 1.436 2.874 1.58 4.948Z"/></svg>
|
||||
<span>Deutsch</span>
|
||||
<div class="menu language-menu">
|
||||
|
||||
<a lang="id-ID" data-url="/?lang=id-ID" class="item ">Bahasa Indonesia</a>
|
||||
|
||||
<a lang="de-DE" data-url="/?lang=de-DE" class="item active selected">Deutsch</a>
|
||||
|
||||
<a lang="en-US" data-url="/?lang=en-US" class="item ">English</a>
|
||||
|
||||
<a lang="es-ES" data-url="/?lang=es-ES" class="item ">Español</a>
|
||||
|
||||
<a lang="fr-FR" data-url="/?lang=fr-FR" class="item ">Français</a>
|
||||
|
||||
<a lang="it-IT" data-url="/?lang=it-IT" class="item ">Italiano</a>
|
||||
|
||||
<a lang="lv-LV" data-url="/?lang=lv-LV" class="item ">Latviešu</a>
|
||||
|
||||
<a lang="hu-HU" data-url="/?lang=hu-HU" class="item ">Magyar nyelv</a>
|
||||
|
||||
<a lang="nl-NL" data-url="/?lang=nl-NL" class="item ">Nederlands</a>
|
||||
|
||||
<a lang="pl-PL" data-url="/?lang=pl-PL" class="item ">Polski</a>
|
||||
|
||||
<a lang="pt-PT" data-url="/?lang=pt-PT" class="item ">Português de Portugal</a>
|
||||
|
||||
<a lang="pt-BR" data-url="/?lang=pt-BR" class="item ">Português do Brasil</a>
|
||||
|
||||
<a lang="fi-FI" data-url="/?lang=fi-FI" class="item ">Suomi</a>
|
||||
|
||||
<a lang="sv-SE" data-url="/?lang=sv-SE" class="item ">Svenska</a>
|
||||
|
||||
<a lang="tr-TR" data-url="/?lang=tr-TR" class="item ">Türkçe</a>
|
||||
|
||||
<a lang="cs-CZ" data-url="/?lang=cs-CZ" class="item ">Čeština</a>
|
||||
|
||||
<a lang="el-GR" data-url="/?lang=el-GR" class="item ">Ελληνικά</a>
|
||||
|
||||
<a lang="bg-BG" data-url="/?lang=bg-BG" class="item ">Български</a>
|
||||
|
||||
<a lang="ru-RU" data-url="/?lang=ru-RU" class="item ">Русский</a>
|
||||
|
||||
<a lang="uk-UA" data-url="/?lang=uk-UA" class="item ">Українська</a>
|
||||
|
||||
<a lang="fa-IR" data-url="/?lang=fa-IR" class="item ">فارسی</a>
|
||||
|
||||
<a lang="ml-IN" data-url="/?lang=ml-IN" class="item ">മലയാളം</a>
|
||||
|
||||
<a lang="ja-JP" data-url="/?lang=ja-JP" class="item ">日本語</a>
|
||||
|
||||
<a lang="zh-CN" data-url="/?lang=zh-CN" class="item ">简体中文</a>
|
||||
|
||||
<a lang="zh-TW" data-url="/?lang=zh-TW" class="item ">繁體中文(台灣)</a>
|
||||
|
||||
<a lang="zh-HK" data-url="/?lang=zh-HK" class="item ">繁體中文(香港)</a>
|
||||
|
||||
<a lang="ko-KR" data-url="/?lang=ko-KR" class="item ">한국어</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a href="/assets/js/licenses.txt">Lizenzen</a>
|
||||
<a href="/api/swagger">API</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="/assets/js/index.js?v=1.19.0~2" onerror="alert('Failed to load asset files from ' + this.src + '. Please make sure the asset files can be accessed.')"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
707
source-linux/images/friendica-tray-white.svg
Normal file
|
|
@ -0,0 +1,707 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="de-DE" class="theme-forgejo-auto">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Friendiqa/friendica-tray-white.svg an master - Friendiqa - Friendica</title>
|
||||
<link rel="manifest" href="data:application/json;base64,eyJuYW1lIjoiRnJpZW5kaWNhIiwic2hvcnRfbmFtZSI6IkZyaWVuZGljYSIsInN0YXJ0X3VybCI6Imh0dHBzOi8vZ2l0LmZyaWVuZGkuY2EvIiwiaWNvbnMiOlt7InNyYyI6Imh0dHBzOi8vZ2l0LmZyaWVuZGkuY2EvYXNzZXRzL2ltZy9sb2dvLnBuZyIsInR5cGUiOiJpbWFnZS9wbmciLCJzaXplcyI6IjUxMng1MTIifSx7InNyYyI6Imh0dHBzOi8vZ2l0LmZyaWVuZGkuY2EvYXNzZXRzL2ltZy9sb2dvLnN2ZyIsInR5cGUiOiJpbWFnZS9zdmcreG1sIiwic2l6ZXMiOiI1MTJ4NTEyIn1dfQ==">
|
||||
<meta name="theme-color" content="#6cc644">
|
||||
<meta name="default-theme" content="forgejo-auto">
|
||||
<meta name="author" content="MorsMortium">
|
||||
<meta name="description" content="Friendiqa - Qt/QML App for Friendiqa ">
|
||||
<meta name="keywords" content="git,forge,forgejo">
|
||||
<meta name="referrer" content="no-referrer">
|
||||
|
||||
|
||||
<link rel="alternate" type="application/atom+xml" title="" href="/MorsMortium/Friendiqa.atom">
|
||||
<link rel="alternate" type="application/rss+xml" title="" href="/MorsMortium/Friendiqa.rss">
|
||||
|
||||
<link rel="icon" href="/assets/img/favicon.svg" type="image/svg+xml">
|
||||
<link rel="alternate icon" href="/assets/img/favicon.png" type="image/png">
|
||||
<link rel="stylesheet" href="/assets/css/index.css?v=1.19.0~2">
|
||||
|
||||
<script>
|
||||
window.addEventListener('error', function(e) {window._globalHandlerErrors=window._globalHandlerErrors||[]; window._globalHandlerErrors.push(e);});
|
||||
window.config = {
|
||||
appUrl: 'https:\/\/git.friendi.ca\/',
|
||||
appSubUrl: '',
|
||||
assetVersionEncoded: encodeURIComponent('1.19.0~2'),
|
||||
assetUrlPrefix: '\/assets',
|
||||
runModeIsProd: true ,
|
||||
customEmojis: {"codeberg":":codeberg:","forgejo":":forgejo:","git":":git:","gitea":":gitea:","github":":github:","gitlab":":gitlab:","gogs":":gogs:"},
|
||||
useServiceWorker: false ,
|
||||
csrfToken: 'hRtY4yQKJpvShSAHOERpMVsB_hI6MTY4NzcwMzY4NDU0MTUwMzIyMw',
|
||||
pageData: {},
|
||||
requireTribute: null ,
|
||||
notificationSettings: {"EventSourceUpdateTime":10000,"MaxTimeout":60000,"MinTimeout":10000,"TimeoutStep":10000},
|
||||
enableTimeTracking: true ,
|
||||
|
||||
mermaidMaxSourceCharacters: 5000 ,
|
||||
|
||||
i18n: {
|
||||
copy_success: 'Kopiert!',
|
||||
copy_error: 'Kopieren fehlgeschlagen',
|
||||
error_occurred: 'Ein Fehler ist aufgetreten',
|
||||
network_error: 'Netzwerkfehler',
|
||||
},
|
||||
};
|
||||
|
||||
window.config.pageData = window.config.pageData || {};
|
||||
</script>
|
||||
<script src="/assets/js/webcomponents.js?v=1.19.0~2"></script>
|
||||
|
||||
<noscript>
|
||||
<style>
|
||||
.dropdown:hover > .menu { display: block; }
|
||||
.ui.secondary.menu .dropdown.item > .menu { margin-top: 0; }
|
||||
</style>
|
||||
</noscript>
|
||||
|
||||
|
||||
<meta property="og:title" content="Friendiqa">
|
||||
<meta property="og:url" content="https://git.friendi.ca/MorsMortium/Friendiqa">
|
||||
|
||||
<meta property="og:description" content="Qt/QML App for Friendiqa ">
|
||||
|
||||
|
||||
<meta property="og:type" content="object">
|
||||
|
||||
<meta property="og:image" content="https://git.friendi.ca/avatars/082870e8cbbfe310f1eb7f6c3e2253f1">
|
||||
|
||||
|
||||
<meta property="og:site_name" content="Friendica">
|
||||
|
||||
<link rel="stylesheet" href="/assets/css/theme-forgejo-auto.css?v=1.19.0~2">
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<div class="full height">
|
||||
<noscript>Diese Webseite funktioniert besser mit JavaScript.</noscript>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="ui top secondary stackable main menu following bar light no-vertical-tabs">
|
||||
<nav class="ui container" id="navbar" aria-label="Navigation Bar">
|
||||
|
||||
|
||||
<div class="item brand gt-sb">
|
||||
<a href="/" aria-label="Startseite">
|
||||
<img width="30" height="30" src="/assets/img/logo.svg" alt="Logo" aria-hidden="true">
|
||||
</a>
|
||||
<div class="gt-df gt-ac">
|
||||
|
||||
<button class="ui icon button mobile-only" id="navbar-expand-toggle">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-three-bars" width="16" height="16" aria-hidden="true"><path d="M1 2.75A.75.75 0 0 1 1.75 2h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 2.75Zm0 5A.75.75 0 0 1 1.75 7h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 7.75ZM1.75 12h12.5a.75.75 0 0 1 0 1.5H1.75a.75.75 0 0 1 0-1.5Z"/></svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<a class="item " href="/explore/repos">Erkunden</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="item" target="_blank" rel="noopener noreferrer" href="https://forgejo.org/docs/latest/">Hilfe</a>
|
||||
<div class="right stackable menu">
|
||||
|
||||
<a class="item" href="/user/sign_up">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-person" width="16" height="16" aria-hidden="true"><path d="M10.561 8.073a6.005 6.005 0 0 1 3.432 5.142.75.75 0 1 1-1.498.07 4.5 4.5 0 0 0-8.99 0 .75.75 0 0 1-1.498-.07 6.004 6.004 0 0 1 3.431-5.142 3.999 3.999 0 1 1 5.123 0ZM10.5 5a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z"/></svg> Registrieren
|
||||
</a>
|
||||
|
||||
<a class="item" rel="nofollow" href="/user/login?redirect_to=%2fMorsMortium%2fFriendiqa%2fsrc%2fbranch%2fmaster%2fsource-linux%2fimages%2ffriendica-tray-white.svg">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-sign-in" width="16" height="16" aria-hidden="true"><path d="M2 2.75C2 1.784 2.784 1 3.75 1h2.5a.75.75 0 0 1 0 1.5h-2.5a.25.25 0 0 0-.25.25v10.5c0 .138.112.25.25.25h2.5a.75.75 0 0 1 0 1.5h-2.5A1.75 1.75 0 0 1 2 13.25Zm6.56 4.5h5.69a.75.75 0 0 1 0 1.5H8.56l1.97 1.97a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L6.22 8.53a.75.75 0 0 1 0-1.06l3.25-3.25a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734Z"/></svg> Anmelden
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div role="main" aria-label="Friendiqa/friendica-tray-white.svg an master" class="page-content repository file list ">
|
||||
<div class="header-wrapper">
|
||||
|
||||
<div class="ui container">
|
||||
<div class="repo-header">
|
||||
<div class="repo-title-wrap gt-df gt-fc">
|
||||
<div class="repo-title" role="heading" aria-level="1">
|
||||
|
||||
|
||||
<div class="repo-icon gt-mr-3">
|
||||
|
||||
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-repo-forked" width="32" height="32" aria-hidden="true"><path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"/></svg>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<a href="/MorsMortium">MorsMortium</a>
|
||||
<div class="gt-mx-2">/</div>
|
||||
<a href="/MorsMortium/Friendiqa">Friendiqa</a>
|
||||
|
||||
<a href="/MorsMortium/Friendiqa.rss"><i class="ui grey icon tooltip gt-ml-3" data-content="RSS Feed" data-position="top center"><svg viewBox="0 0 16 16" class="svg octicon-rss" width="18" height="18" aria-hidden="true"><path d="M2.002 2.725a.75.75 0 0 1 .797-.699C8.79 2.42 13.58 7.21 13.974 13.201a.75.75 0 0 1-1.497.098 10.502 10.502 0 0 0-9.776-9.776.747.747 0 0 1-.7-.798ZM2.84 7.05h-.002a7.002 7.002 0 0 1 6.113 6.111.75.75 0 0 1-1.49.178 5.503 5.503 0 0 0-4.8-4.8.75.75 0 0 1 .179-1.489ZM2 13a1 1 0 1 1 2 0 1 1 0 0 1-2 0Z"/></svg></i></a>
|
||||
|
||||
<div class="labels gt-df gt-ac gt-fw">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="fork-flag">geforkt von <a href="/lubuwest/Friendiqa">lubuwest/Friendiqa</a></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="repo-buttons">
|
||||
|
||||
<form method="post" action="/MorsMortium/Friendiqa/action/watch?redirect_to=%2fMorsMortium%2fFriendiqa%2fsrc%2fbranch%2fmaster%2fsource-linux%2fimages%2ffriendica-tray-white.svg">
|
||||
<input type="hidden" name="_csrf" value="hRtY4yQKJpvShSAHOERpMVsB_hI6MTY4NzcwMzY4NDU0MTUwMzIyMw">
|
||||
<div class="ui labeled button tooltip" data-content="Melde dich an, um dieses Repository zu beobachten." data-position="top center">
|
||||
<button type="submit" class="ui compact small basic button" disabled>
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-eye" width="16" height="16" aria-hidden="true"><path d="M8 2c1.981 0 3.671.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.62 1.62 0 0 1 0 1.798c-.45.678-1.367 1.932-2.637 3.023C11.67 13.008 9.981 14 8 14c-1.981 0-3.671-.992-4.933-2.078C1.797 10.83.88 9.576.43 8.898a1.62 1.62 0 0 1 0-1.798c.45-.677 1.367-1.931 2.637-3.022C4.33 2.992 6.019 2 8 2ZM1.679 7.932a.12.12 0 0 0 0 .136c.411.622 1.241 1.75 2.366 2.717C5.176 11.758 6.527 12.5 8 12.5c1.473 0 2.825-.742 3.955-1.715 1.124-.967 1.954-2.096 2.366-2.717a.12.12 0 0 0 0-.136c-.412-.621-1.242-1.75-2.366-2.717C10.824 4.242 9.473 3.5 8 3.5c-1.473 0-2.825.742-3.955 1.715-1.124.967-1.954 2.096-2.366 2.717ZM8 10a2 2 0 1 1-.001-3.999A2 2 0 0 1 8 10Z"/></svg>Beobachten
|
||||
</button>
|
||||
<a class="ui basic label" href="/MorsMortium/Friendiqa/watchers">
|
||||
1
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<form method="post" action="/MorsMortium/Friendiqa/action/star?redirect_to=%2fMorsMortium%2fFriendiqa%2fsrc%2fbranch%2fmaster%2fsource-linux%2fimages%2ffriendica-tray-white.svg">
|
||||
<input type="hidden" name="_csrf" value="hRtY4yQKJpvShSAHOERpMVsB_hI6MTY4NzcwMzY4NDU0MTUwMzIyMw">
|
||||
<div class="ui labeled button tooltip" data-content="Bitte melde dich an, um dieses Repository zu favorisieren." data-position="top center">
|
||||
<button type="submit" class="ui compact small basic button" disabled>
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-star" width="16" height="16" aria-hidden="true"><path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"/></svg>Favorisieren
|
||||
</button>
|
||||
<a class="ui basic label" href="/MorsMortium/Friendiqa/stars">
|
||||
0
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
<div class="ui labeled button
|
||||
|
||||
tooltip disabled
|
||||
"
|
||||
|
||||
data-content="Bitte melde dich an, um dieses Repository zu forken."
|
||||
|
||||
data-position="top center">
|
||||
<a class="ui compact small basic button"
|
||||
|
||||
|
||||
|
||||
>
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-repo-forked" width="16" height="16" aria-hidden="true"><path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"/></svg>Fork
|
||||
</a>
|
||||
<div class="ui small modal" id="fork-repo-modal">
|
||||
<svg viewBox="0 0 16 16" class="close inside svg octicon-x" width="16" height="16" aria-hidden="true"><path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"/></svg>
|
||||
<div class="header">
|
||||
Du hast bereits einen Fork von Friendiqa erstellt
|
||||
</div>
|
||||
<div class="content gt-tl">
|
||||
<div class="ui list">
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a class="ui basic label" href="/MorsMortium/Friendiqa/forks">
|
||||
0
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ui tabs container">
|
||||
|
||||
<div class="ui tabular stackable menu navbar">
|
||||
|
||||
<a class="active item" href="/MorsMortium/Friendiqa">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-code" width="16" height="16" aria-hidden="true"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"/></svg> Code
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a class="item" href="/MorsMortium/Friendiqa/issues">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-issue-opened" width="16" height="16" aria-hidden="true"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"/><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"/></svg> Issues
|
||||
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="item" href="/MorsMortium/Friendiqa/pulls">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-git-pull-request" width="16" height="16" aria-hidden="true"><path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"/></svg> Pull-Requests
|
||||
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="/MorsMortium/Friendiqa/packages" class="item">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-package" width="16" height="16" aria-hidden="true"><path d="m8.878.392 5.25 3.045c.54.314.872.89.872 1.514v6.098a1.75 1.75 0 0 1-.872 1.514l-5.25 3.045a1.75 1.75 0 0 1-1.756 0l-5.25-3.045A1.75 1.75 0 0 1 1 11.049V4.951c0-.624.332-1.201.872-1.514L7.122.392a1.75 1.75 0 0 1 1.756 0ZM7.875 1.69l-4.63 2.685L8 7.133l4.755-2.758-4.63-2.685a.248.248 0 0 0-.25 0ZM2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432Zm6.25 8.271 4.625-2.683a.25.25 0 0 0 .125-.216V5.677L8.75 8.432Z"/></svg> Pakete
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a href="/MorsMortium/Friendiqa/projects" class="item">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-project" width="16" height="16" aria-hidden="true"><path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25ZM11.75 3a.75.75 0 0 1 .75.75v7.5a.75.75 0 0 1-1.5 0v-7.5a.75.75 0 0 1 .75-.75Zm-8.25.75a.75.75 0 0 1 1.5 0v5.5a.75.75 0 0 1-1.5 0ZM8 3a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 3Z"/></svg> Projekte
|
||||
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a class="item" href="/MorsMortium/Friendiqa/releases">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-tag" width="16" height="16" aria-hidden="true"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"/></svg> Releases
|
||||
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a class="item" href="/MorsMortium/Friendiqa/wiki" >
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-book" width="16" height="16" aria-hidden="true"><path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"/></svg> Wiki
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a class="item" href="/MorsMortium/Friendiqa/activity">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-pulse" width="16" height="16" aria-hidden="true"><path d="M6 2c.306 0 .582.187.696.471L10 10.731l1.304-3.26A.751.751 0 0 1 12 7h3.25a.75.75 0 0 1 0 1.5h-2.742l-1.812 4.528a.751.751 0 0 1-1.392 0L6 4.77 4.696 8.03A.75.75 0 0 1 4 8.5H.75a.75.75 0 0 1 0-1.5h2.742l1.812-4.529A.751.751 0 0 1 6 2Z"/></svg> Aktivität
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="ui tabs divider"></div>
|
||||
</div>
|
||||
|
||||
<div class="ui container ">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="gt-hidden" id="validate_prompt">
|
||||
<span id="count_prompt">Du kannst nicht mehr als 25 Themen auswählen</span>
|
||||
<span id="format_prompt">Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="repo-button-row gt-df gt-ac gt-sb gt-fw">
|
||||
<div class="gt-df gt-ac gt-fw gt-gap-y-3">
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="fitted item choose reference">
|
||||
<div class="ui floating filter dropdown custom"
|
||||
data-branch-form=""
|
||||
data-can-create-branch="false"
|
||||
data-no-results="Keine Ergebnisse verfügbar."
|
||||
data-set-action="" data-submit-form=""
|
||||
data-view-type="branch"
|
||||
data-ref-name="master"
|
||||
data-branch-url-prefix="/MorsMortium/Friendiqa/src/branch/"
|
||||
data-branch-url-suffix="/source-linux/images/friendica-tray-white.svg"
|
||||
data-tag-url-prefix="/MorsMortium/Friendiqa/src/tag/"
|
||||
data-tag-url-suffix="/source-linux/images/friendica-tray-white.svg">
|
||||
<button class="branch-dropdown-button gt-ellipsis ui basic small compact button gt-df" @click="menuVisible = !menuVisible" @keyup.enter="menuVisible = !menuVisible">
|
||||
<span class="text gt-df gt-ac gt-mr-2">
|
||||
|
||||
<span :class="{visible: isViewTag}" v-if="isViewTag" v-cloak><svg viewBox="0 0 16 16" class="svg octicon-tag" width="16" height="16" aria-hidden="true"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"/></svg></span>
|
||||
<span :class="{visible: isViewBranch}" v-if="isViewBranch" ><svg viewBox="0 0 16 16" class="svg octicon-git-branch" width="16" height="16" aria-hidden="true"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"/></svg></span>
|
||||
<span :class="{visible: isViewTree}" v-if="isViewTree" v-cloak><svg viewBox="0 0 16 16" class="svg octicon-git-branch" width="16" height="16" aria-hidden="true"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"/></svg></span>
|
||||
<strong ref="dropdownRefName" class="gt-ml-3">master</strong>
|
||||
|
||||
</span>
|
||||
<svg viewBox="0 0 16 16" class="dropdown icon svg octicon-triangle-down" width="14" height="14" aria-hidden="true"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"/></svg>
|
||||
</button>
|
||||
<div class="data gt-hidden" data-mode="branches">
|
||||
|
||||
|
||||
<div class="item branch selected" data-url="master">master</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.001">v0.001</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.002">v0.002</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.004">v0.004</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.1">v0.1</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.1.2">v0.1.2</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.2">v0.2</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.2.1">v0.2.1</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.2.2">v0.2.2</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.3.1">v0.3.1</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.3.2">v0.3.2</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.3.3">v0.3.3</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.3.4">v0.3.4</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.5">v0.5</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.5.1">v0.5.1</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.5.2">v0.5.2</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.5.3">v0.5.3</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.5.4">v0.5.4</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.5.4.1">v0.5.4.1</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.6">v0.6</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.6.1">v0.6.1</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.6.2">v0.6.2</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.6.3">v0.6.3</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.6.5">v0.6.5</div>
|
||||
|
||||
|
||||
|
||||
<div class="item tag " data-url="v0.6.6">v0.6.6</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div class="menu transition" :class="{visible: menuVisible}" v-if="menuVisible" v-cloak>
|
||||
<div class="ui icon search input">
|
||||
<i class="icon gt-df gt-ac gt-jc gt-m-0"><svg viewBox="0 0 16 16" class="svg octicon-filter" width="16" height="16" aria-hidden="true"><path d="M.75 3h14.5a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1 0-1.5ZM3 7.75A.75.75 0 0 1 3.75 7h8.5a.75.75 0 0 1 0 1.5h-8.5A.75.75 0 0 1 3 7.75Zm3 4a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z"/></svg></i>
|
||||
<input name="search" ref="searchField" autocomplete="off" v-model="searchTerm" @keydown="keydown($event)" placeholder="Branch oder Tag filtern...">
|
||||
</div>
|
||||
|
||||
<div class="header branch-tag-choice">
|
||||
<div class="ui grid">
|
||||
<div class="two column row">
|
||||
<a class="reference column" href="#" @click="createTag = false; mode = 'branches'; focusSearchField()">
|
||||
<span class="text" :class="{black: mode == 'branches'}">
|
||||
<svg viewBox="0 0 16 16" class="gt-mr-2 svg octicon-git-branch" width="16" height="16" aria-hidden="true"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"/></svg>Branches
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<a class="reference column" href="#" @click="createTag = true; mode = 'tags'; focusSearchField()">
|
||||
<span class="text" :class="{black: mode == 'tags'}">
|
||||
<svg viewBox="0 0 16 16" class="gt-mr-2 svg octicon-tag" width="16" height="16" aria-hidden="true"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"/></svg>Tags
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="scrolling menu" ref="scrollContainer">
|
||||
<div v-for="(item, index) in filteredItems" :key="item.name" class="item" :class="{selected: item.selected, active: active == index}" @click="selectItem(item)" :ref="'listItem' + index">${ item.name }</div>
|
||||
<div class="item" v-if="showCreateNewBranch" :class="{active: active == filteredItems.length}" :ref="'listItem' + filteredItems.length">
|
||||
<a href="#" @click="createNewBranch()">
|
||||
<div v-show="createTag">
|
||||
<i class="reference tags icon"></i>
|
||||
Tag <strong>${ searchTerm }</strong> erstellen
|
||||
</div>
|
||||
<div v-show="!createTag">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-git-branch" width="16" height="16" aria-hidden="true"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"/></svg>
|
||||
Erstelle Branch <strong>${ searchTerm }</strong>
|
||||
</div>
|
||||
<div class="text small">
|
||||
|
||||
von „master“
|
||||
|
||||
</div>
|
||||
</a>
|
||||
<form ref="newBranchForm" action="/MorsMortium/Friendiqa/branches/_new/branch/master" method="post">
|
||||
<input type="hidden" name="_csrf" value="hRtY4yQKJpvShSAHOERpMVsB_hI6MTY4NzcwMzY4NDU0MTUwMzIyMw">
|
||||
<input type="hidden" name="new_branch_name" v-model="searchTerm">
|
||||
<input type="hidden" name="create_tag" v-model="createTag">
|
||||
|
||||
<input type="hidden" name="current_path" value="source-linux/images/friendica-tray-white.svg">
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="message" v-if="showNoResults">${ noResults }</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="ui breadcrumb repo-path gt-ml-2"><a class="section" href="/MorsMortium/Friendiqa/src/branch/master" title="Friendiqa">Friendiqa</a><span class="divider">/</span><span class="section"><a href="/MorsMortium/Friendiqa/src/branch/master/source-linux" title="source-linux">source-linux</a></span><span class="divider">/</span><span class="section"><a href="/MorsMortium/Friendiqa/src/branch/master/source-linux/images" title="images">images</a></span><span class="divider">/</span><span class="active section" title="friendica-tray-white.svg">friendica-tray-white.svg</span></span>
|
||||
|
||||
</div>
|
||||
<div class="gt-df gt-ac">
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab-size-8 non-diff-file-content">
|
||||
<h4 class="file-header ui top attached header gt-df gt-ac gt-sb gt-fw">
|
||||
<div class="file-header-left gt-df gt-ac gt-py-3 gt-pr-4">
|
||||
|
||||
<div class="file-info text grey normal gt-mono">
|
||||
|
||||
|
||||
<div class="file-info-entry">
|
||||
42 Zeilen
|
||||
</div>
|
||||
|
||||
|
||||
<div class="file-info-entry">
|
||||
1.7 KiB
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="file-info-entry">
|
||||
XML
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="file-header-right file-actions gt-df gt-ac gt-fw">
|
||||
|
||||
<div class="ui compact icon buttons two-toggle-buttons">
|
||||
<a href="/MorsMortium/Friendiqa/src/branch/master/source-linux/images/friendica-tray-white.svg?display=source" class="ui mini basic button tooltip " data-content="Quelltext anzeigen" data-position="bottom center"><svg viewBox="0 0 16 16" class="svg octicon-code" width="15" height="15" aria-hidden="true"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"/></svg></a>
|
||||
<a href="/MorsMortium/Friendiqa/src/branch/master/source-linux/images/friendica-tray-white.svg" class="ui mini basic button tooltip active" data-content="Ansicht rendern" data-position="bottom center"><svg viewBox="0 0 16 16" class="svg octicon-file" width="15" height="15" aria-hidden="true"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"/></svg></a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="ui buttons gt-mr-2">
|
||||
<a class="ui mini basic button" href="/MorsMortium/Friendiqa/raw/branch/master/source-linux/images/friendica-tray-white.svg">Originalformat</a>
|
||||
|
||||
<a class="ui mini basic button" href="/MorsMortium/Friendiqa/src/commit/8dc907e345eaaebbe8b81b9b098385454e3e8f45/source-linux/images/friendica-tray-white.svg">Permalink</a>
|
||||
|
||||
|
||||
<a class="ui mini basic button" href="/MorsMortium/Friendiqa/blame/branch/master/source-linux/images/friendica-tray-white.svg">Blame</a>
|
||||
|
||||
<a class="ui mini basic button" href="/MorsMortium/Friendiqa/commits/branch/master/source-linux/images/friendica-tray-white.svg">Verlauf</a>
|
||||
|
||||
</div>
|
||||
<a download href="/MorsMortium/Friendiqa/raw/branch/master/source-linux/images/friendica-tray-white.svg"><span class="btn-octicon tooltip" data-content="Datei herunterladen" data-position="bottom center"><svg viewBox="0 0 16 16" class="svg octicon-download" width="16" height="16" aria-hidden="true"><path d="M7.47 10.78 3.72 7.03a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l2.47 2.47V1.75a.75.75 0 0 1 1.5 0v6.69l2.47-2.47a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-3.75 3.75a.75.75 0 0 1-1.06 0ZM3.75 13h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Z"/></svg></span></a>
|
||||
<a id="copy-content" class="btn-octicon tooltip" data-link="/MorsMortium/Friendiqa/raw/branch/master/source-linux/images/friendica-tray-white.svg" data-content="Copy content"><svg viewBox="0 0 16 16" class="svg octicon-copy" width="14" height="14" aria-hidden="true"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"/><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"/></svg></a>
|
||||
|
||||
|
||||
<span class="btn-octicon tooltip disabled" data-content="Du musst dieses Repository forken, um Änderungen an dieser Datei vorzuschlagen oder vorzunehmen." data-position="bottom center"><svg viewBox="0 0 16 16" class="svg octicon-pencil" width="16" height="16" aria-hidden="true"><path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.253.253 0 0 0-.064.108l-.558 1.953 1.953-.558a.253.253 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z"/></svg></span>
|
||||
|
||||
|
||||
<span class="btn-octicon tooltip disabled" data-content="Du benötigst Schreibzugriff, um Änderungen an dieser Datei vorzuschlagen oder vorzunehmen." data-position="bottom center"><svg viewBox="0 0 16 16" class="svg octicon-trash" width="16" height="16" aria-hidden="true"><path d="M11 1.75V3h2.25a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75ZM4.496 6.675l.66 6.6a.25.25 0 0 0 .249.225h5.19a.25.25 0 0 0 .249-.225l.66-6.6a.75.75 0 0 1 1.492.149l-.66 6.6A1.748 1.748 0 0 1 10.595 15h-5.19a1.75 1.75 0 0 1-1.741-1.575l-.66-6.6a.75.75 0 1 1 1.492-.15ZM6.5 1.75V3h3V1.75a.25.25 0 0 0-.25-.25h-2.5a.25.25 0 0 0-.25.25Z"/></svg></span>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</h4>
|
||||
<div class="ui attached table unstackable segment">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="file-view">
|
||||
|
||||
<div class="view-raw ui center">
|
||||
|
||||
<img src="/MorsMortium/Friendiqa/raw/branch/master/source-linux/images/friendica-tray-white.svg">
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<footer role="group" aria-label="Footer">
|
||||
<div class="ui container">
|
||||
<div class="ui left" role="contentinfo" aria-label="About Software">
|
||||
<a target="_blank" rel="noopener noreferrer" href="https://forgejo.org">Powered by Forgejo</a>
|
||||
|
||||
Version:
|
||||
|
||||
1.19.0+2
|
||||
|
||||
|
||||
|
||||
Seite: <strong>42ms</strong>
|
||||
Template: <strong>1ms</strong>
|
||||
|
||||
</div>
|
||||
<div class="ui right links" role="group" aria-label="Links">
|
||||
|
||||
<div class="ui language bottom floating slide up dropdown link item">
|
||||
<svg viewBox="0 0 16 16" class="svg octicon-globe" width="16" height="16" aria-hidden="true"><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM5.78 8.75a9.64 9.64 0 0 0 1.363 4.177c.255.426.542.832.857 1.215.245-.296.551-.705.857-1.215A9.64 9.64 0 0 0 10.22 8.75Zm4.44-1.5a9.64 9.64 0 0 0-1.363-4.177c-.307-.51-.612-.919-.857-1.215a9.927 9.927 0 0 0-.857 1.215A9.64 9.64 0 0 0 5.78 7.25Zm-5.944 1.5H1.543a6.507 6.507 0 0 0 4.666 5.5c-.123-.181-.24-.365-.352-.552-.715-1.192-1.437-2.874-1.581-4.948Zm-2.733-1.5h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.507 6.507 0 0 0-4.666 5.5Zm10.181 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.507 6.507 0 0 0 4.666-5.5Zm2.733-1.5a6.507 6.507 0 0 0-4.666-5.5c.123.181.24.365.353.552.714 1.192 1.436 2.874 1.58 4.948Z"/></svg>
|
||||
<span>Deutsch</span>
|
||||
<div class="menu language-menu">
|
||||
|
||||
<a lang="id-ID" data-url="/?lang=id-ID" class="item ">Bahasa Indonesia</a>
|
||||
|
||||
<a lang="de-DE" data-url="/?lang=de-DE" class="item active selected">Deutsch</a>
|
||||
|
||||
<a lang="en-US" data-url="/?lang=en-US" class="item ">English</a>
|
||||
|
||||
<a lang="es-ES" data-url="/?lang=es-ES" class="item ">Español</a>
|
||||
|
||||
<a lang="fr-FR" data-url="/?lang=fr-FR" class="item ">Français</a>
|
||||
|
||||
<a lang="it-IT" data-url="/?lang=it-IT" class="item ">Italiano</a>
|
||||
|
||||
<a lang="lv-LV" data-url="/?lang=lv-LV" class="item ">Latviešu</a>
|
||||
|
||||
<a lang="hu-HU" data-url="/?lang=hu-HU" class="item ">Magyar nyelv</a>
|
||||
|
||||
<a lang="nl-NL" data-url="/?lang=nl-NL" class="item ">Nederlands</a>
|
||||
|
||||
<a lang="pl-PL" data-url="/?lang=pl-PL" class="item ">Polski</a>
|
||||
|
||||
<a lang="pt-PT" data-url="/?lang=pt-PT" class="item ">Português de Portugal</a>
|
||||
|
||||
<a lang="pt-BR" data-url="/?lang=pt-BR" class="item ">Português do Brasil</a>
|
||||
|
||||
<a lang="fi-FI" data-url="/?lang=fi-FI" class="item ">Suomi</a>
|
||||
|
||||
<a lang="sv-SE" data-url="/?lang=sv-SE" class="item ">Svenska</a>
|
||||
|
||||
<a lang="tr-TR" data-url="/?lang=tr-TR" class="item ">Türkçe</a>
|
||||
|
||||
<a lang="cs-CZ" data-url="/?lang=cs-CZ" class="item ">Čeština</a>
|
||||
|
||||
<a lang="el-GR" data-url="/?lang=el-GR" class="item ">Ελληνικά</a>
|
||||
|
||||
<a lang="bg-BG" data-url="/?lang=bg-BG" class="item ">Български</a>
|
||||
|
||||
<a lang="ru-RU" data-url="/?lang=ru-RU" class="item ">Русский</a>
|
||||
|
||||
<a lang="uk-UA" data-url="/?lang=uk-UA" class="item ">Українська</a>
|
||||
|
||||
<a lang="fa-IR" data-url="/?lang=fa-IR" class="item ">فارسی</a>
|
||||
|
||||
<a lang="ml-IN" data-url="/?lang=ml-IN" class="item ">മലയാളം</a>
|
||||
|
||||
<a lang="ja-JP" data-url="/?lang=ja-JP" class="item ">日本語</a>
|
||||
|
||||
<a lang="zh-CN" data-url="/?lang=zh-CN" class="item ">简体中文</a>
|
||||
|
||||
<a lang="zh-TW" data-url="/?lang=zh-TW" class="item ">繁體中文(台灣)</a>
|
||||
|
||||
<a lang="zh-HK" data-url="/?lang=zh-HK" class="item ">繁體中文(香港)</a>
|
||||
|
||||
<a lang="ko-KR" data-url="/?lang=ko-KR" class="item ">한국어</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a href="/assets/js/licenses.txt">Lizenzen</a>
|
||||
<a href="/api/swagger">API</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="/assets/js/index.js?v=1.19.0~2" onerror="alert('Failed to load asset files from ' + this.src + '. Please make sure the asset files can be accessed.')"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
|
@ -180,7 +180,7 @@ function updateData(database,table, username, key, value, callback,filter,filter
|
|||
function showMessage(header,message,rootwindow){//print(message);
|
||||
var cleanmessage=message.replace(/"/g,"-");
|
||||
if(cleanmessage.length>200){cleanmessage=cleanmessage.slice(0,200)+'...'}
|
||||
var messageString='import QtQuick 2.0; import QtQuick.Controls 2.15; import QtQuick.Controls.Material 2.12; Dialog{ visible: true; title:"'+header+'";standardButtons: Dialog.Ok;anchors.centerIn: parent;Label{text:" '+cleanmessage+'"}}';
|
||||
var messageString='import QtQuick 2.0; import QtQuick.Controls 2.15; Dialog{ visible: true; title:"'+header+'";standardButtons: Dialog.Ok;anchors.centerIn: parent;Label{text:" '+cleanmessage+'"}}';
|
||||
var messageObject=Qt.createQmlObject(messageString,rootwindow,"messageOutput");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -313,6 +313,9 @@ function newsfromdb(database,login,messagetype,callback,contact,stop_time){
|
|||
|
||||
for(var i = 0; i < newsrs.rows.length; i++) {
|
||||
newsArray.push(newsrs.rows.item(i));
|
||||
if(newsArray[i].statusnet_html==""){
|
||||
newsArray[i].statusnet_html=newsArray[i].text
|
||||
}
|
||||
newsArray[i].statusnet_html=Qt.atob(newsArray[i].statusnet_html);
|
||||
newsArray[i].text=Qt.atob(newsArray[i].text);
|
||||
newsArray[i].id=newsArray[i].status_id;
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import QtQuick 2.11
|
||||
import QtQuick.Controls.Material 2.12
|
||||
//import QtQuick.Controls 2.4
|
||||
|
||||
Item {
|
||||
|
|
@ -51,7 +50,7 @@ Item {
|
|||
id:daytext
|
||||
anchors.right: parent.right
|
||||
anchors.margins: 0.5*mm
|
||||
color:(model.month==monthgrid.month)?Material.primaryTextColor:Material.secondaryTextColor
|
||||
color:(model.month==monthgrid.month)?osSettings.primaryTextColor:osSettings.secondaryTextColor
|
||||
wrapMode: Text.WrapAnywhere
|
||||
text: model.day
|
||||
font.bold: model.today
|
||||
|
|
|
|||
|
|
@ -29,11 +29,10 @@
|
|||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 2.15
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import QtQml 2.2
|
||||
import Qt.labs.calendar 1.0
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Controls 6.3
|
||||
|
||||
//import Qt.labs.calendar 1.0
|
||||
//import QtQuick.Layouts 1.3
|
||||
import "qrc:/js/service.js" as Service
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
|
|
@ -45,7 +44,7 @@ Rectangle {
|
|||
// y:1
|
||||
width:parent.width
|
||||
height:parent.height
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
property date currentTime: new Date()
|
||||
property int offsetTime: currentTime.getTimezoneOffset() * 60 * 1000
|
||||
property var events:[]
|
||||
|
|
@ -128,7 +127,7 @@ Rectangle {
|
|||
anchors.topMargin: 0.5*mm
|
||||
anchors.right:calendartabstatusButton.left
|
||||
anchors.rightMargin:mm
|
||||
width: 2*root.fontFactor*osSettings.bigFontSize;
|
||||
//width: 2*root.fontFactor*osSettings.bigFontSize;
|
||||
text:"\uf021"
|
||||
onClicked: {
|
||||
calBusy.running=true;
|
||||
|
|
@ -223,7 +222,7 @@ Rectangle {
|
|||
orientation: ListView.Horizontal
|
||||
highlightRangeMode: ListView.StrictlyEnforceRange
|
||||
|
||||
model: CalendarModel {id:calendarModel
|
||||
model: CalendarModel {id:calendarModel
|
||||
from: new Date()
|
||||
to: new Date(new Date().valueOf()+93312000000)
|
||||
}
|
||||
|
|
@ -236,7 +235,7 @@ Rectangle {
|
|||
//Layout.fillWidth: true
|
||||
width: parent.width-root.fontFactor*osSettings.bigFontSize
|
||||
horizontalAlignment:Text.AlignHCenter
|
||||
color: Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
text: model.year
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
}
|
||||
|
|
@ -244,7 +243,7 @@ Rectangle {
|
|||
width: parent.width-osSettings.bigFontSize
|
||||
text: Qt.locale().standaloneMonthName(model.month)
|
||||
//Layout.fillWidth: true
|
||||
color: Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
horizontalAlignment:Text.AlignHCenter
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import QtQuick.Controls 1.4 as Oldcontrols
|
||||
import "qrc:/js/service.js" as Service
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
|
|
@ -56,7 +55,7 @@ Flickable{
|
|||
id: eventRect
|
||||
width: root.width
|
||||
height: textColumn.height + 6*root.fontFactor*osSettings.bigFontSize
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
MButton{
|
||||
id:closeButton
|
||||
anchors.top: parent.top
|
||||
|
|
@ -74,7 +73,7 @@ Flickable{
|
|||
height: root.fontFactor*osSettings.bigFontSize
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
//verticalAlignment: TextInput.AlignBottom
|
||||
color: Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
text:qsTr("Start")
|
||||
}
|
||||
|
||||
|
|
@ -139,7 +138,7 @@ Flickable{
|
|||
width: 3*root.fontFactor*osSettings.bigFontSize
|
||||
height: root.fontFactor*osSettings.bigFontSize
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
color: Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
text:qsTr("End")
|
||||
}
|
||||
TextField {
|
||||
|
|
@ -293,7 +292,7 @@ Flickable{
|
|||
}
|
||||
|
||||
Rectangle{
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
radius: 0.5*mm
|
||||
width: parent.width-root.fontFactor*osSettings.bigFontSize
|
||||
height:Math.max(bodyField.contentHeight+root.fontFactor*osSettings.bigFontSize,2.5*root.fontFactor*osSettings.bigFontSize)
|
||||
|
|
@ -391,7 +390,7 @@ Flickable{
|
|||
Label {
|
||||
text: formatText(Tumbler.tumbler.count, modelData)
|
||||
opacity: 1.0 - Math.abs(Tumbler.displacement) / (Tumbler.tumbler.visibleItemCount / 2)
|
||||
color:Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/js/service.js" as Service
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
import "qrc:/qml/genericqml"
|
||||
|
|
@ -39,7 +38,7 @@ import "qrc:/qml/calendarqml"
|
|||
|
||||
Rectangle{
|
||||
id:eventList
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
property var daylist:[]
|
||||
property int dayint: 0
|
||||
property var events:[]
|
||||
|
|
@ -50,6 +49,7 @@ Rectangle{
|
|||
anchors.topMargin: 1*mm
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: 1*mm
|
||||
width: 2*root.fontFactor*osSettings.bigFontSize;
|
||||
text: "\uf057"
|
||||
onClicked:{rootstackView.pop()}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/js/service.js" as Service
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
import "qrc:/qml/genericqml"
|
||||
|
|
@ -43,8 +42,8 @@ Rectangle{
|
|||
property var currEvent: event
|
||||
width:parent.width
|
||||
height:Math.max(eventNameText.height+eventDetailsText.height,profileImage.height)+mm
|
||||
border.color: Material.backgroundDimColor
|
||||
color: Material.backgroundColor
|
||||
//border.color: osSettings.backgroundDimColor
|
||||
color: osSettings.backgroundColor
|
||||
border.width: 1
|
||||
radius: 0.5*mm
|
||||
Image {
|
||||
|
|
@ -61,7 +60,7 @@ Rectangle{
|
|||
x: 8*mm
|
||||
width:parent.width-8*mm
|
||||
height:contentHeight
|
||||
color: Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
textFormat: Text.RichText
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
text: new Date(event.start).toLocaleString(Qt.locale(),Locale.NarrowFormat)+ " - " +((event.end>0)&&(event.end!=null)?new Date(event.end).toLocaleString(Qt.locale(),Locale.NarrowFormat):"\u221E")+":<br>"+(status=="large"?"<b>"+event.title+"</b>":event.title)
|
||||
|
|
@ -74,7 +73,7 @@ Rectangle{
|
|||
z:4
|
||||
width: parent.width-8*mm
|
||||
height: contentHeight
|
||||
color: Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
textFormat: Text.RichText
|
||||
text: status!="large"?"":Qt.atob(event.desc) + (event.location==""?"":"<br><br>"+qsTr("Location")+": "+event.location)
|
||||
anchors.top: eventNameText.bottom
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 2.15
|
||||
import QtQuick.Controls.Material 2.12
|
||||
|
||||
Dialog {
|
||||
id: rulesDialog
|
||||
|
|
@ -57,8 +56,8 @@ Dialog {
|
|||
x:1; y:1
|
||||
width: root.width-4*root.fontFactor*osSettings.bigFontSize
|
||||
wrapMode: TextEdit.Wrap
|
||||
color: Material.primaryTextColor
|
||||
linkColor: Material.accentColor
|
||||
color: osSettings.primaryTextColor
|
||||
linkColor: osSettings.secondaryTextColor
|
||||
textFormat: Text.PlainText
|
||||
font.family: "Noto Sans"
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
|
|
|
|||
|
|
@ -29,11 +29,12 @@
|
|||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import QtQuick 2.7
|
||||
import QtQuick.Dialogs 1.2
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick 6.3
|
||||
import QtCore 6.3
|
||||
import QtQuick.Dialogs 6.3
|
||||
import QtQuick.Controls 6.3
|
||||
import QtQuick.Layouts 1.12
|
||||
import QtQml.Models 2.15
|
||||
import QtQml.Models 6.3
|
||||
import "qrc:/js/service.js" as Service
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
import "qrc:/qml/configqml"
|
||||
|
|
@ -55,495 +56,494 @@ Page{
|
|||
xhr.clearParams();
|
||||
xhr.get();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function verify(userconfig){
|
||||
Helperjs.friendicaRequest(userconfig,"/api/v1/accounts/verify_credentials",root,function(obj){
|
||||
accountBusy.running=false;
|
||||
try{var credentials=JSON.parse(obj);
|
||||
if (credentials.hasOwnProperty('error')){
|
||||
Helperjs.showMessage(qsTr("Error"),qsTr("Wrong password or 2FA enabled!"),root)
|
||||
}
|
||||
else{
|
||||
if (users.length==0){Service.setDefaultOptions(db);}
|
||||
if (userconfig.APIVersion!=""){userconfig.password=""}
|
||||
if (imagestoredir==""){
|
||||
imagestoredir=filesystem.homePath+"/"+credentials.username+"/";
|
||||
userconfig.imagestore=imagestoredir
|
||||
accountBusy.running=false;
|
||||
try{var credentials=JSON.parse(obj);
|
||||
if (credentials.hasOwnProperty('error')){
|
||||
Helperjs.showMessage(qsTr("Error"),qsTr("Wrong password or 2FA enabled!"),root)
|
||||
}
|
||||
if(userconfig.imagestore == filesystem.homePath+"/"+credentials.username+"/")
|
||||
else{
|
||||
if (users.length==0){Service.setDefaultOptions(db);}
|
||||
if (userconfig.APIVersion!=""){userconfig.password=""}
|
||||
if (imagestoredir==""){
|
||||
imagestoredir=filesystem.homePath+"/"+credentials.username+"/";
|
||||
userconfig.imagestore=imagestoredir
|
||||
}
|
||||
if(userconfig.imagestore == filesystem.homePath+"/"+credentials.username+"/")
|
||||
{filesystem.makePath(filesystem.homePath+"/"+credentials.username);}
|
||||
print("imagestoredir "+imagestoredir)
|
||||
filesystem.Directory=imagestoredir;
|
||||
filesystem.makeDir("contacts");
|
||||
filesystem.makeDir("albums");
|
||||
userconfig.accountId=credentials.id;
|
||||
userconfig.username=credentials.username;
|
||||
Service.storeConfig(db,userconfig);
|
||||
print("imagestoredir "+imagestoredir)
|
||||
filesystem.Directory=imagestoredir;
|
||||
filesystem.makeDir("contacts");
|
||||
filesystem.makeDir("albums");
|
||||
userconfig.accountId=credentials.id;
|
||||
userconfig.username=credentials.username;
|
||||
Service.storeConfig(db,userconfig);
|
||||
Service.readConfig(db,function(userconfig){
|
||||
Helperjs.readData(db,"config","",function(storedUsers){
|
||||
storedUsers.sort(function(obj1, obj2) {
|
||||
return obj1.isActive - obj2.isActive;
|
||||
});
|
||||
accountPage.users=storedUsers});
|
||||
//reset values
|
||||
login=userconfig;
|
||||
news=[];
|
||||
contactlist=[];
|
||||
rootstack.currentIndex=0;
|
||||
newstypeSignal("refresh");
|
||||
},"isActive",0);
|
||||
Helperjs.showMessage(qsTr("Success"),qsTr("Name")+": "+credentials.display_name+"\nScreen Name: "+credentials.username,root)
|
||||
rootstackView.pop()
|
||||
}
|
||||
}catch(e){Helperjs.showMessage(qsTr("Error"),qsTr("Wrong password or 2FA enabled!"),root)};
|
||||
})
|
||||
}
|
||||
|
||||
BusyIndicator{
|
||||
id: accountBusy
|
||||
anchors.centerIn: parent
|
||||
width: 5*root.fontFactor*osSettings.bigFontSize
|
||||
height: 5*root.fontFactor*osSettings.bigFontSize
|
||||
running: false
|
||||
}
|
||||
|
||||
ColumnLayout{
|
||||
x: root.fontFactor*osSettings.bigFontSize
|
||||
width: root.width - 2*mm
|
||||
y: root.fontFactor*osSettings.bigFontSize
|
||||
spacing: root.fontFactor*osSettings.bigFontSize
|
||||
|
||||
Row{
|
||||
spacing:0.5*mm
|
||||
height: userButton.height
|
||||
width: parent.width
|
||||
|
||||
MButton{
|
||||
id:userButton
|
||||
text:qsTr("User")
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
visible: users.length>0
|
||||
onClicked:{
|
||||
var useritems="";
|
||||
for (var i=0;i<accountPage.users.length;i++){
|
||||
useritems=useritems+"MenuItem{font.pointSize: osSettings.bigFontSize;width:accountPage.width*2/3; text:'"+accountPage.users[i].username+
|
||||
"'; onTriggered: {Service.readConfig(db,function(obj){
|
||||
userButton.text=obj.username;
|
||||
servername.text=obj.server;
|
||||
serverModel.insert(0,{text:obj.server})
|
||||
accountPage.setServericon(obj.server);
|
||||
username.text= obj.username;
|
||||
password.text=Qt.atob(obj.password);
|
||||
imagestore.text=obj.imagestore;
|
||||
imagestoredir=obj.imagestore;
|
||||
if( obj.isActive==0){userButton.font.bold='true'} else {userButton.font.bold='false'}
|
||||
if(obj.password!=''){accountPage.state='password'}
|
||||
else if (obj.token!=''){accountPage.state='oauth'}
|
||||
},'username','"+ accountPage.users[i].username+"')}}"
|
||||
}
|
||||
var menuString="import QtQuick.Controls 2.15;import 'qrc:/js/service.js' as Service;"+
|
||||
" Menu {width:8*root.fontFactor*osSettings.bigFontSize;"+useritems+"}";
|
||||
var userlistObject=Qt.createQmlObject(menuString,accountPage,"usermenuOutput")
|
||||
userlistObject.popup() }
|
||||
}
|
||||
|
||||
MButton {
|
||||
visible: users.length>0
|
||||
text: "-"
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked:{
|
||||
var userconfig={server: servername.text, username: username.text, password: Qt.btoa(password.text)};
|
||||
|
||||
Service.readConfig(db,function(user){
|
||||
if(userdata.token!=""){xhr.setUrl(servername.text);
|
||||
xhr.setApi("/oauth/revoke");
|
||||
xhr.clearParams();
|
||||
xhr.setParam("client_id",user.client.client_id);
|
||||
xhr.setParam("client_secret",user.client.client_secret);
|
||||
xhr.setParam("token",user.token);
|
||||
xhr.post();
|
||||
}
|
||||
},"username",username.text);
|
||||
|
||||
|
||||
Service.deleteConfig(db,userconfig,function(){
|
||||
filesystem.Directory=imagestore.text+"contacts";
|
||||
filesystem.rmDir();
|
||||
filesystem.Directory=imagestore.text+"albums";
|
||||
filesystem.rmDir();
|
||||
servername.text="https://";
|
||||
servericon.visible=false;
|
||||
servericon.source="";
|
||||
username.text="";
|
||||
password.text="";
|
||||
imagestore.text="";
|
||||
userButton.text=qsTr("User");
|
||||
Helperjs.readData(db,"config","",function(storedUsers){
|
||||
storedUsers.sort(function(obj1, obj2) {
|
||||
return obj1.isActive - obj2.isActive;
|
||||
})
|
||||
accountPage.users=storedUsers;})
|
||||
accountPage.state="new_oauth"
|
||||
})
|
||||
}}
|
||||
|
||||
MButton {
|
||||
visible: users.length>0
|
||||
text: "+"
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked:{
|
||||
servername.text="https://"
|
||||
servericon.visible=false;
|
||||
servericon.source="";
|
||||
username.text=""
|
||||
password.text=""
|
||||
imagestore.text=""
|
||||
userButton.text=qsTr("User")
|
||||
accountPage.state="new_oauth"
|
||||
}
|
||||
}
|
||||
|
||||
MButton {
|
||||
text: "?"
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked:{
|
||||
rootstackView.push("qrc:/qml/configqml/InfoBox.qml");
|
||||
}
|
||||
}
|
||||
MButton{
|
||||
id:closeButton
|
||||
visible: users.length>0
|
||||
text: "\uf057"
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked:{rootstackView.pop()}
|
||||
}
|
||||
}
|
||||
Row{
|
||||
spacing:0.5*mm
|
||||
height: 3*root.fontFactor*osSettings.bigFontSize
|
||||
width: parent.width
|
||||
Image{
|
||||
id:servericon
|
||||
width:2.5*root.fontFactor*osSettings.bigFontSize; height: 2.5*root.fontFactor*osSettings.bigFontSize
|
||||
visible: false
|
||||
source:""
|
||||
property var serverconfig:({})
|
||||
MouseArea{
|
||||
anchors.fill:parent
|
||||
onClicked:{
|
||||
let serverConfigString="import QtQuick 2.0; import QtQuick.Dialogs 6.3; MessageDialog{ visible: true; title:'Server';buttons: MessageDialog.Ok;text: 'Name: "+
|
||||
servericon.serverconfig.site.name+"\nLanguage: "+servericon.serverconfig.site.language+
|
||||
"\nEmail: "+servericon.serverconfig.site.email+"\nTimezone: "+servericon.serverconfig.site.timezone+"\nClosed: "+servericon.serverconfig.site.closed+
|
||||
"\nText limit: "+servericon.serverconfig.site.textlimit+"\nShort Url length: "+servericon.serverconfig.site.shorturllength+
|
||||
"\nFriendica version: "+servericon.serverconfig.site.friendica.FRIENDICA_VERSION+
|
||||
"\nDB Update version: "+servericon.serverconfig.site.friendica.DB_UPDATE_VERSION+"'}";
|
||||
|
||||
var serverconfigObject=Qt.createQmlObject(serverConfigString,accountPage,"serverconfigOutput");
|
||||
}
|
||||
}
|
||||
}
|
||||
FontLoader{id: fontAwesome; source: "qrc:/images/fontawesome-webfont.ttf"}
|
||||
MButton{
|
||||
id:serverSearchButton
|
||||
width: 3*root.fontFactor*osSettings.bigFontSize; height: 2.5*root.fontFactor*osSettings.bigFontSize
|
||||
text:"\uf002"
|
||||
icon.name: "search"
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
visible: servericon.visible?false:true
|
||||
onClicked:{Qt.openUrlExternally(Qt.resolvedUrl("https://dir.friendica.social/servers"))}
|
||||
}
|
||||
|
||||
// ComboBox{
|
||||
// id: servername
|
||||
// x: 4*root.fontFactor*osSettings.bigFontSize
|
||||
// y: 3.5*root.fontFactor*osSettings.bigFontSize
|
||||
// width: root.width-5*root.fontFactor*osSettings.bigFontSize
|
||||
// height: 2.5*root.fontFactor*osSettings.bigFontSize//5*mm;
|
||||
// font.pointSize: osSettings.systemFontSize
|
||||
// editable:true
|
||||
// model: serverModel
|
||||
// onAccepted: {
|
||||
// let cleanText =currentText;if(currentText==""){cleanText=editText}
|
||||
// if((cleanText).substring(0,8) !=="https://"){
|
||||
// cleanText="https://"+cleanText
|
||||
// }
|
||||
// if (find(cleanText) === -1) {
|
||||
// serverModel.append({text: cleanText})
|
||||
// currentIndex = find(cleanText)
|
||||
// displayText=cleanText
|
||||
// }
|
||||
// if (cleanText!=""){accountPage.setServericon(cleanText)}
|
||||
// }
|
||||
// onFocusChanged: {
|
||||
// if(focus==false){
|
||||
// onAccepted()
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
TextField {
|
||||
id: servername
|
||||
width: root.width-5*root.fontFactor*osSettings.bigFontSize
|
||||
height: 2.5*root.fontFactor*osSettings.bigFontSize
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
text:"https://"
|
||||
onFocusChanged:{
|
||||
if (focus){servermenu.open()}
|
||||
else{
|
||||
if((servername.text).substring(0,11) =="https://http"){
|
||||
servername.text= (servername.text).substring(8)
|
||||
}
|
||||
if (servername.text!="https://"){
|
||||
accountPage.setServericon(servername.text)}
|
||||
}
|
||||
}
|
||||
}
|
||||
Menu {
|
||||
id:servermenu
|
||||
width: 13*root.fontFactor*osSettings.bigFontSize
|
||||
Instantiator{
|
||||
model:serverModel
|
||||
MenuItem{
|
||||
text: modelData
|
||||
onTriggered: {servername.text=modelData}
|
||||
}
|
||||
onObjectAdded:{servermenu.insertItem(index,object)}
|
||||
onObjectRemoved:{servermenu.removeItem(object)}
|
||||
}
|
||||
}
|
||||
|
||||
ListModel{id:serverModel
|
||||
ListElement{text:"https://anonsys.net"}
|
||||
ListElement{text:"https://asaps-sm.lafayettegroup.com"}
|
||||
ListElement{text:"https://f.freinetz.ch"}
|
||||
ListElement{text:"https://friendica.chilemasto.casa"}
|
||||
ListElement{text:"https://friendica.eskimo.com"}
|
||||
ListElement{text:"https://friendica.me"}
|
||||
ListElement{text:"https://friendica.opensocial.space"}
|
||||
ListElement{text:"https://friendica.utzer.de"}
|
||||
ListElement{text:"https://friendica.vrije-mens.org"}
|
||||
ListElement{text:"https://libranet.de"}
|
||||
ListElement{text:"https://loma.ml"}
|
||||
ListElement{text:"https://nerdica.net"}
|
||||
ListElement{text:"https://nsfw.wnymathguy.com"}
|
||||
ListElement{text:"https://opensocial.at"}
|
||||
ListElement{text:"https://poliverso.org"}
|
||||
ListElement{text:"https://social.isurf.ca"}
|
||||
ListElement{text:"https://social.trom.tf"}
|
||||
ListElement{text:"https://squeet.me"}
|
||||
ListElement{text:"https://venera.social"}
|
||||
}
|
||||
}
|
||||
MButton {
|
||||
id: ruleButton
|
||||
width: parent.width
|
||||
visible: (osSettings.osType=="Android") && (userButton.text== qsTr("User"))
|
||||
height: 2*root.fontFactor*osSettings.bigFontSize;
|
||||
text: qsTr("Instance rules")
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked:{
|
||||
xhr.setUrl(servername.text);
|
||||
xhr.setApi("/api/v1/instance/rules");
|
||||
xhr.clearParams();
|
||||
xhr.get();
|
||||
}
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: username
|
||||
width: root.width-5*root.fontFactor*osSettings.bigFontSize
|
||||
height: servername.height
|
||||
Layout.leftMargin: 3*root.fontFactor*osSettings.bigFontSize;
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
visible: (osSettings.osType=="Android")?(text!= ""):true
|
||||
placeholderText: qsTr("Nickname")
|
||||
selectByMouse: true
|
||||
onEditingFinished: {
|
||||
if (username.text.indexOf('@')>-1){
|
||||
Helperjs.showMessage(qsTr("Error"),qsTr("Nicknames containing @ symbol currently not supported"),accountPage)
|
||||
}
|
||||
imagestoredir=filesystem.homePath+"/"+username.text+"/"
|
||||
}
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: password
|
||||
width: root.width-9*mm; height: 2.5*root.fontFactor*osSettings.bigFontSize;
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
visible: (osSettings.osType=="Android")?(userButton.text!= qsTr("User")):true
|
||||
selectByMouse: true
|
||||
echoMode: TextInput.Password
|
||||
placeholderText: qsTr("Password")
|
||||
inputMethodHints: Qt.ImhNoAutoUppercase | Qt.ImhNoPredictiveText | Qt.ImhSensitiveData
|
||||
}
|
||||
|
||||
Row{
|
||||
spacing:0.5*mm
|
||||
height: 3*root.fontFactor*osSettings.bigFontSize
|
||||
width: parent.width
|
||||
Label {
|
||||
id: imagedirlabel
|
||||
visible: imagestore.text!=""
|
||||
text: qsTr("Image dir.")
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: imagestore
|
||||
width: root.width-17*mm;
|
||||
height: 2.5*root.fontFactor*osSettings.bigFontSize;
|
||||
visible:imagestore.text!=""
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
selectByMouse: true
|
||||
text: ""
|
||||
wrapMode: TextEdit.NoWrap
|
||||
onTextChanged: imagestoredir=imagestore.text
|
||||
}
|
||||
|
||||
MButton {
|
||||
visible:imagestore.text!=""
|
||||
text: "..."
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked:{imagestoreDialog.open()}
|
||||
}
|
||||
|
||||
FolderDialog {
|
||||
id: imagestoreDialog
|
||||
title: "Please choose a directory"
|
||||
currentFolder: StandardPaths.standardLocations(StandardPaths.PicturesLocation)[0]
|
||||
//selectFolder: true
|
||||
onAccepted: {
|
||||
var imagestoreString=imagestoreDialog.selectedFolder.toString();
|
||||
imagestoreString=imagestoreString.replace(/^(file:\/{2})/,"")+"/"
|
||||
imagestore.text=imagestoreString
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
MButton {
|
||||
id:confirmationOAuth
|
||||
width: parent.width
|
||||
text: qsTr("Connect")
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
visible: (osSettings.osType=="Android")?userButton.text!= qsTr("User"):true
|
||||
onClicked:{
|
||||
if (servername.text==""){Helperjs.showMessage(qsTr("Error"), qsTr("No server given!"),root)}
|
||||
else{
|
||||
xhr.setUrl(servername.text);
|
||||
xhr.setApi("/api/v1/apps");
|
||||
xhr.clearParams();
|
||||
if (osSettings.osType=="Android"){
|
||||
xhr.setParam("client_name","Friendiqa-Android");
|
||||
} else {
|
||||
xhr.setParam("client_name","Friendiqa-"+filesystem.hostname);
|
||||
}
|
||||
xhr.setParam("redirect_uris","http://127.0.0.1:1337/");
|
||||
xhr.setParam("scopes","read write follow push");
|
||||
xhr.setParam("website","https://friendiqa.ma-nic.de");
|
||||
xhr.post();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections{
|
||||
target: xhr
|
||||
function onSuccess(text,api){
|
||||
if(api=="/api/v1/instance/rules"){
|
||||
let rulestext="";
|
||||
let rulesarray=JSON.parse(text)
|
||||
for (let rule in rulesarray){
|
||||
rulestext=rulestext+rulesarray[rule].text+"\n"
|
||||
}
|
||||
var component = Qt.createComponent("qrc:/qml/configqml/AcceptRules.qml");
|
||||
var rulesdialog = component.createObject(accountPage,{"rules": rulestext});
|
||||
rulesdialog.open();
|
||||
}
|
||||
else if(api=="/api/statusnet/config"){
|
||||
try{let serverdata = JSON.parse(text);
|
||||
servericon.visible=true;
|
||||
servericon.source=serverdata.site.logo;
|
||||
servericon.serverconfig=serverdata;
|
||||
}
|
||||
catch(e){print(e)}
|
||||
}
|
||||
|
||||
else if (api=="/api/v1/apps"){print("/api/v1/apps text "+text)
|
||||
let app=JSON.parse(text);
|
||||
accountPage.appdata=app;
|
||||
oauth2.setClientId(app.client_id);
|
||||
oauth2.setClientSecret(app.client_secret);
|
||||
oauth2.setServer(servername.text);
|
||||
oauth2.grant();
|
||||
}
|
||||
}
|
||||
function onError(text,api){
|
||||
print(api + " Error "+ text)
|
||||
}
|
||||
}
|
||||
|
||||
Connections{
|
||||
target: oauth2
|
||||
function onSuccess(text){
|
||||
var userconfig={server: servername.displayText, username:"", password:"", imagestore: imagestoredir,interval:"",token: text,client:Qt.btoa(JSON.stringify(appdata))}
|
||||
verify(userconfig)
|
||||
}
|
||||
function onError(text){
|
||||
Helperjs.showMessage(qsTr("Error"), qsTr("Couldn't connect to server"),root)
|
||||
print ("oauth2 onerror "+text)
|
||||
}
|
||||
}
|
||||
|
||||
MButton {
|
||||
id:confirmation
|
||||
width: 10*root.fontFactor*osSettings.bigFontSize;
|
||||
text: qsTr("Confirm")
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
visible: false// (osSettings.osType=="Android")?userButton.text!= qsTr("User"):true
|
||||
onClicked:{
|
||||
accountBusy.running=true;
|
||||
var userconfig={server: servername.displayText, username: username.text, password:Qt.btoa(password.text), imagestore:imagestoredir,interval:""};
|
||||
var errormessage="";
|
||||
if (servername.text==""){errormessage=qsTr("No server given! ")}
|
||||
else if (username.text==""){errormessage+=qsTr("No nickname given! ")}
|
||||
else if (password.text=="") {errormessage+=qsTr("No password given! ")}
|
||||
else if (imagestoredir=="") {errormessage+=qsTr("No image directory given!")}
|
||||
else {errormessage=""}
|
||||
if (errormessage=="") {verify(userconfig)}
|
||||
else {Helperjs.showMessage(qsTr("Error"), errormessage,root)}
|
||||
}}
|
||||
|
||||
MButton {
|
||||
id: setDefault
|
||||
width: 10*root.fontFactor*osSettings.bigFontSize;
|
||||
text: qsTr("Set as default")
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
visible: false
|
||||
onClicked:{
|
||||
accountBusy.running=true;
|
||||
let users=updatenews.getAccounts("username",username.text)
|
||||
Service.storeConfig(db,users[0]);
|
||||
Service.readConfig(db,function(userconfig){
|
||||
Helperjs.readData(db,"config","",function(storedUsers){
|
||||
storedUsers.sort(function(obj1, obj2) {
|
||||
return obj1.isActive - obj2.isActive;
|
||||
});
|
||||
accountPage.users=storedUsers});
|
||||
//reset values
|
||||
//reset values
|
||||
login=userconfig;
|
||||
news=[];
|
||||
contactlist=[];
|
||||
rootstack.currentIndex=0;
|
||||
newstypeSignal("refresh");
|
||||
},"isActive",0);
|
||||
Helperjs.showMessage(qsTr("Success"),qsTr("Name")+": "+credentials.display_name+"\nScreen Name: "+credentials.username,root)
|
||||
Helperjs.showMessage(qsTr("Success"),"Screen Name: "+users[0].username,root)
|
||||
rootstackView.pop()
|
||||
}
|
||||
}catch(e){Helperjs.showMessage(qsTr("Error"),qsTr("Wrong password or 2FA enabled!"),root)};
|
||||
})}
|
||||
|
||||
MButton{
|
||||
id:userButton
|
||||
text:qsTr("User")
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
x: root.fontFactor*osSettings.bigFontSize
|
||||
y: root.fontFactor*osSettings.bigFontSize
|
||||
width: root.width/2 - 2*mm
|
||||
height: 2*root.fontFactor*osSettings.bigFontSize
|
||||
visible: users.length>0
|
||||
onClicked:{
|
||||
var useritems="";
|
||||
for (var i=0;i<accountPage.users.length;i++){
|
||||
useritems=useritems+"MenuItem{font.pointSize: osSettings.bigFontSize;width:accountPage.width*2/3; text:'"+accountPage.users[i].username+
|
||||
"'; onTriggered: {Service.readConfig(db,function(obj){
|
||||
userButton.text=obj.username;
|
||||
servername.text=obj.server;
|
||||
serverModel.insert(0,{text:obj.server})
|
||||
accountPage.setServericon(obj.server);
|
||||
username.text= obj.username;
|
||||
password.text=Qt.atob(obj.password);
|
||||
imagestore.text=obj.imagestore;
|
||||
imagestoredir=obj.imagestore;
|
||||
if( obj.isActive==0){userButton.font.bold='true'} else {userButton.font.bold='false'}
|
||||
if(obj.password!=''){accountPage.state='password'}
|
||||
else if (obj.token!=''){accountPage.state='oauth'}
|
||||
},'username','"+ accountPage.users[i].username+"')}}"
|
||||
}
|
||||
var menuString="import QtQuick.Controls 2.12;import 'qrc:/js/service.js' as Service;"+
|
||||
" Menu {width:8*root.fontFactor*osSettings.bigFontSize;"+useritems+"}";
|
||||
var userlistObject=Qt.createQmlObject(menuString,accountPage,"usermenuOutput")
|
||||
userlistObject.popup() }
|
||||
}
|
||||
|
||||
Image{
|
||||
id:servericon
|
||||
x:root.fontFactor*osSettings.bigFontSize;y:3*root.fontFactor*osSettings.bigFontSize
|
||||
width:2.5*root.fontFactor*osSettings.bigFontSize; height: 2.5*root.fontFactor*osSettings.bigFontSize
|
||||
visible: false
|
||||
source:""
|
||||
property var serverconfig:({})
|
||||
MouseArea{
|
||||
anchors.fill:parent
|
||||
onClicked:{
|
||||
let serverConfigString="import QtQuick 2.0; import QtQuick.Dialogs 1.2; MessageDialog{ visible: true; title:'Server';standardButtons: StandardButton.Ok;text: 'Name: "+
|
||||
servericon.serverconfig.site.name+"\nLanguage: "+servericon.serverconfig.site.language+
|
||||
"\nEmail: "+servericon.serverconfig.site.email+"\nTimezone: "+servericon.serverconfig.site.timezone+"\nClosed: "+servericon.serverconfig.site.closed+
|
||||
"\nText limit: "+servericon.serverconfig.site.textlimit+"\nShort Url length: "+servericon.serverconfig.site.shorturllength+
|
||||
"\nFriendica version: "+servericon.serverconfig.site.friendica.FRIENDICA_VERSION+
|
||||
"\nDB Update version: "+servericon.serverconfig.site.friendica.DB_UPDATE_VERSION+"'}";
|
||||
|
||||
var serverconfigObject=Qt.createQmlObject(serverConfigString,accountPage,"serverconfigOutput");
|
||||
}
|
||||
}
|
||||
}
|
||||
FontLoader{id: fontAwesome; source: "qrc:/images/fontawesome-webfont.ttf"}
|
||||
MButton{
|
||||
id:serverSearchButton
|
||||
text:"\uf002"
|
||||
icon.name: "search"
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
x:root.fontFactor*osSettings.bigFontSize
|
||||
y:3*root.fontFactor*osSettings.bigFontSize
|
||||
width: 2*root.fontFactor*osSettings.bigFontSize; height:2*root.fontFactor*osSettings.bigFontSize
|
||||
visible: servericon.visible?false:true
|
||||
onClicked:{Qt.openUrlExternally(Qt.resolvedUrl("https://dir.friendica.social/servers"))}
|
||||
}
|
||||
|
||||
// ComboBox{
|
||||
// id: servername
|
||||
// x: 4*root.fontFactor*osSettings.bigFontSize
|
||||
// y: 3.5*root.fontFactor*osSettings.bigFontSize
|
||||
// width: root.width-5*root.fontFactor*osSettings.bigFontSize
|
||||
// height: 2.5*root.fontFactor*osSettings.bigFontSize//5*mm;
|
||||
// font.pointSize: osSettings.systemFontSize
|
||||
// editable:true
|
||||
// model: serverModel
|
||||
// onAccepted: {
|
||||
// let cleanText =currentText;if(currentText==""){cleanText=editText}
|
||||
// if((cleanText).substring(0,8) !=="https://"){
|
||||
// cleanText="https://"+cleanText
|
||||
// }
|
||||
// if (find(cleanText) === -1) {
|
||||
// serverModel.append({text: cleanText})
|
||||
// currentIndex = find(cleanText)
|
||||
// displayText=cleanText
|
||||
// }
|
||||
// if (cleanText!=""){accountPage.setServericon(cleanText)}
|
||||
// }
|
||||
// onFocusChanged: {
|
||||
// if(focus==false){
|
||||
// onAccepted()
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
TextField {
|
||||
id: servername
|
||||
x: 4*root.fontFactor*osSettings.bigFontSize
|
||||
y: 3.5*root.fontFactor*osSettings.bigFontSize
|
||||
width: root.width-5*root.fontFactor*osSettings.bigFontSize
|
||||
height: 2.5*root.fontFactor*osSettings.bigFontSize
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
text:"https://"
|
||||
onFocusChanged:{
|
||||
if (focus){servermenu.open()}
|
||||
else{
|
||||
if((servername.text).substring(0,11) =="https://http"){
|
||||
servername.text= (servername.text).substring(8)
|
||||
}
|
||||
if (servername.text!="https://"){
|
||||
accountPage.setServericon(servername.text)}
|
||||
}
|
||||
}
|
||||
}
|
||||
Menu {
|
||||
id:servermenu
|
||||
width: 13*root.fontFactor*osSettings.bigFontSize
|
||||
x: 4*root.fontFactor*osSettings.bigFontSize
|
||||
y: 5*root.fontFactor*osSettings.bigFontSize
|
||||
Instantiator{
|
||||
model:serverModel
|
||||
MenuItem{
|
||||
text: modelData
|
||||
onTriggered: {servername.text=modelData}
|
||||
}
|
||||
onObjectAdded: servermenu.insertItem(index,object)
|
||||
onObjectRemoved: servermenu.removeItem(object)
|
||||
}
|
||||
}
|
||||
|
||||
ListModel{id:serverModel
|
||||
ListElement{text:"https://anonsys.net"}
|
||||
ListElement{text:"https://asaps-sm.lafayettegroup.com"}
|
||||
ListElement{text:"https://f.freinetz.ch"}
|
||||
ListElement{text:"https://friendica.chilemasto.casa"}
|
||||
ListElement{text:"https://friendica.eskimo.com"}
|
||||
ListElement{text:"https://friendica.me"}
|
||||
ListElement{text:"https://friendica.opensocial.space"}
|
||||
ListElement{text:"https://friendica.utzer.de"}
|
||||
ListElement{text:"https://friendica.vrije-mens.org"}
|
||||
ListElement{text:"https://libranet.de"}
|
||||
ListElement{text:"https://loma.ml"}
|
||||
ListElement{text:"https://nerdica.net"}
|
||||
ListElement{text:"https://nsfw.wnymathguy.com"}
|
||||
ListElement{text:"https://opensocial.at"}
|
||||
ListElement{text:"https://poliverso.org"}
|
||||
ListElement{text:"https://social.isurf.ca"}
|
||||
ListElement{text:"https://social.trom.tf"}
|
||||
ListElement{text:"https://squeet.me"}
|
||||
ListElement{text:"https://venera.social"}
|
||||
}
|
||||
|
||||
MButton {
|
||||
id: ruleButton
|
||||
x: root.fontFactor*osSettings.bigFontSize; y: 6*root.fontFactor*osSettings.bigFontSize; width: root.width-9*mm;
|
||||
visible: (osSettings.osType=="Android") && (userButton.text== qsTr("User"))
|
||||
height: 2*root.fontFactor*osSettings.bigFontSize;
|
||||
text: qsTr("Instance rules")
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked:{
|
||||
xhr.setUrl(servername.text);
|
||||
xhr.setApi("/api/v1/instance/rules");
|
||||
xhr.clearParams();
|
||||
xhr.get();
|
||||
}
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: username
|
||||
x: root.fontFactor*osSettings.bigFontSize; y: 6*root.fontFactor*osSettings.bigFontSize; width: root.width-9*mm; //height: 5*mm;
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
visible: (osSettings.osType=="Android")?(userButton.text!= qsTr("User")):true
|
||||
placeholderText: qsTr("Nickname")
|
||||
selectByMouse: true
|
||||
onEditingFinished: {
|
||||
if (username.text.indexOf('@')>-1){
|
||||
Helperjs.showMessage(qsTr("Error"),qsTr("Nicknames containing @ symbol currently not supported"),accountPage)
|
||||
}
|
||||
imagestoredir=filesystem.homePath+"/"+username.text+"/"
|
||||
//if (imagestore.text==filesystem.homePath+"/.friendiqa/"){imagestore.text=filesystem.homePath+"/.friendiqa/"+username.text+"/"}
|
||||
}
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: password
|
||||
x: root.fontFactor*osSettings.bigFontSize; y: 9*root.fontFactor*osSettings.bigFontSize; width: root.width-9*mm; //height: 5*mm;
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
visible: (osSettings.osType=="Android")?(userButton.text!= qsTr("User")):true
|
||||
selectByMouse: true
|
||||
echoMode: TextInput.Password
|
||||
placeholderText: qsTr("Password")
|
||||
inputMethodHints: Qt.ImhNoAutoUppercase | Qt.ImhNoPredictiveText | Qt.ImhSensitiveData
|
||||
}
|
||||
|
||||
Label {
|
||||
id: imagedirlabel
|
||||
visible: imagestore.text!=""
|
||||
text: qsTr("Image dir.")
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
x: root.fontFactor*osSettings.bigFontSize; y: 12*root.fontFactor*osSettings.bigFontSize
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: imagestore
|
||||
x: root.fontFactor*osSettings.bigFontSize; y: 13*root.fontFactor*osSettings.bigFontSize; width: root.width-17*mm; //height: 5*mm;
|
||||
visible:imagestore.text!=""
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
selectByMouse: true
|
||||
text: "" //filesystem.homePath+"/.friendiqa/"+username.text+"/" //(osSettings.osType=="Android") && (filesystem.fileexist("/storage/emulated/0/Pictures/"))?"/storage/emulated/0/Pictures/":""
|
||||
wrapMode: TextEdit.NoWrap
|
||||
onTextChanged: imagestoredir=imagestore.text
|
||||
}
|
||||
|
||||
MButton {
|
||||
x: root.width-3*root.fontFactor*osSettings.bigFontSize; y: 13*root.fontFactor*osSettings.bigFontSize;
|
||||
height: 2*root.fontFactor*osSettings.bigFontSize;
|
||||
visible:imagestore.text!=""
|
||||
text: "..."
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked:{imagestoreDialog.open()}
|
||||
}
|
||||
|
||||
FileDialog {
|
||||
id: imagestoreDialog
|
||||
title: "Please choose a directory"
|
||||
folder: shortcuts.pictures
|
||||
selectFolder: true
|
||||
onAccepted: {
|
||||
var imagestoreString=imagestoreDialog.folder.toString();
|
||||
imagestoreString=imagestoreString.replace(/^(file:\/{2})/,"")+"/"
|
||||
imagestore.text=imagestoreString
|
||||
}
|
||||
}
|
||||
|
||||
BusyIndicator{
|
||||
id: accountBusy
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
y: 16*root.fontFactor*osSettings.bigFontSize
|
||||
width:10*mm
|
||||
height: 10*mm
|
||||
running: false
|
||||
}
|
||||
|
||||
MButton {
|
||||
id:confirmationOAuth
|
||||
x: root.fontFactor*osSettings.bigFontSize; y: 16*root.fontFactor*osSettings.bigFontSize
|
||||
text: qsTr("Connect")
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
visible: (osSettings.osType=="Android")?userButton.text!= qsTr("User"):true
|
||||
onClicked:{
|
||||
if (servername.text==""){Helperjs.showMessage(qsTr("Error"), qsTr("No server given!"),root)}
|
||||
else{
|
||||
xhr.setUrl(servername.text);
|
||||
xhr.setApi("/api/v1/apps");
|
||||
xhr.clearParams();
|
||||
if (osSettings.osType=="Android"){
|
||||
xhr.setParam("client_name","Friendiqa-Android");
|
||||
} else {
|
||||
xhr.setParam("client_name","Friendiqa-"+filesystem.hostname);
|
||||
}
|
||||
xhr.setParam("redirect_uris","http://127.0.0.1:1337/");
|
||||
xhr.setParam("scopes","read write follow push");
|
||||
xhr.setParam("website","https://friendiqa.ma-nic.de");
|
||||
xhr.post();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections{
|
||||
target: xhr
|
||||
function onSuccess(text,api){
|
||||
if(api=="/api/v1/instance/rules"){
|
||||
let rulestext="";
|
||||
let rulesarray=JSON.parse(text)
|
||||
for (let rule in rulesarray){
|
||||
rulestext=rulestext+rulesarray[rule].text+"\n"
|
||||
}
|
||||
var component = Qt.createComponent("qrc:/qml/configqml/AcceptRules.qml");
|
||||
var rulesdialog = component.createObject(accountPage,{"rules": rulestext});
|
||||
rulesdialog.open();
|
||||
}
|
||||
else if(api=="/api/statusnet/config"){
|
||||
try{let serverdata = JSON.parse(text);
|
||||
servericon.visible=true;
|
||||
servericon.source=serverdata.site.logo;
|
||||
servericon.serverconfig=serverdata;
|
||||
}
|
||||
catch(e){print(e)}
|
||||
}
|
||||
|
||||
else if (api=="/api/v1/apps"){print("/api/v1/apps text "+text)
|
||||
let app=JSON.parse(text);
|
||||
accountPage.appdata=app;
|
||||
oauth2.setClientId(app.client_id);
|
||||
oauth2.setClientSecret(app.client_secret);
|
||||
oauth2.setServer(servername.text);
|
||||
oauth2.grant();
|
||||
}
|
||||
}
|
||||
function onError(text,api){
|
||||
print(api + " Error "+ text)
|
||||
}
|
||||
}
|
||||
|
||||
Connections{
|
||||
target: oauth2
|
||||
function onSuccess(text){
|
||||
var userconfig={server: servername.displayText, username:"", password:"", imagestore: imagestoredir,interval:"",token: text,client:Qt.btoa(JSON.stringify(appdata))}
|
||||
verify(userconfig)
|
||||
}
|
||||
function onError(text){
|
||||
Helperjs.showMessage(qsTr("Error"), qsTr("Couldn't connect to server"),root)
|
||||
print ("oauth2 onerror "+text)
|
||||
}
|
||||
}
|
||||
|
||||
MButton {
|
||||
id:confirmation
|
||||
x: root.fontFactor*osSettings.bigFontSize; y: 16*root.fontFactor*osSettings.bigFontSize
|
||||
text: qsTr("Confirm")
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
visible: false// (osSettings.osType=="Android")?userButton.text!= qsTr("User"):true
|
||||
onClicked:{
|
||||
accountBusy.running=true;
|
||||
var userconfig={server: servername.displayText, username: username.text, password:Qt.btoa(password.text), imagestore:imagestoredir,interval:""};
|
||||
var errormessage="";
|
||||
if (servername.text==""){errormessage=qsTr("No server given! ")}
|
||||
else if (username.text==""){errormessage+=qsTr("No nickname given! ")}
|
||||
else if (password.text=="") {errormessage+=qsTr("No password given! ")}
|
||||
else if (imagestoredir=="") {errormessage+=qsTr("No image directory given!")}
|
||||
else {errormessage=""}
|
||||
if (errormessage=="") {verify(userconfig)}
|
||||
else {Helperjs.showMessage(qsTr("Error"), errormessage,root)}
|
||||
}}
|
||||
|
||||
MButton {
|
||||
id: setDefault
|
||||
x: 10*root.fontFactor*osSettings.bigFontSize; y: 16*root.fontFactor*osSettings.bigFontSize
|
||||
text: qsTr("Set as default")
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
visible: false
|
||||
onClicked:{
|
||||
accountBusy.running=true;
|
||||
let users=updatenews.getAccounts("username",username.text)
|
||||
Service.storeConfig(db,users[0]);
|
||||
Service.readConfig(db,function(userconfig){
|
||||
//reset values
|
||||
login=userconfig;
|
||||
news=[];
|
||||
contactlist=[];
|
||||
rootstack.currentIndex=0;
|
||||
newstypeSignal("refresh");
|
||||
},"isActive",0);
|
||||
Helperjs.showMessage(qsTr("Success"),"Screen Name: "+users[0].username,root)
|
||||
rootstackView.pop()
|
||||
}}
|
||||
|
||||
Row{
|
||||
spacing:0.5*mm
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: root.fontFactor*osSettings.bigFontSize
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: 1*mm
|
||||
MButton {
|
||||
width: 5*mm;
|
||||
visible: users.length>0
|
||||
text: "-"
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked:{
|
||||
var userconfig={server: servername.text, username: username.text, password: Qt.btoa(password.text)};
|
||||
|
||||
Service.readConfig(db,function(user){
|
||||
if(userdata.token!=""){xhr.setUrl(servername.text);
|
||||
xhr.setApi("/oauth/revoke");
|
||||
xhr.clearParams();
|
||||
xhr.setParam("client_id",user.client.client_id);
|
||||
xhr.setParam("client_secret",user.client.client_secret);
|
||||
xhr.setParam("token",user.token);
|
||||
xhr.post();
|
||||
}
|
||||
},"username",username.text);
|
||||
|
||||
|
||||
Service.deleteConfig(db,userconfig,function(){
|
||||
filesystem.Directory=imagestore.text+"contacts";
|
||||
filesystem.rmDir();
|
||||
filesystem.Directory=imagestore.text+"albums";
|
||||
filesystem.rmDir();
|
||||
servername.text="https://";
|
||||
servericon.visible=false;
|
||||
servericon.source="";
|
||||
username.text="";
|
||||
password.text="";
|
||||
imagestore.text="";
|
||||
userButton.text=qsTr("User");
|
||||
Helperjs.readData(db,"config","",function(storedUsers){
|
||||
storedUsers.sort(function(obj1, obj2) {
|
||||
return obj1.isActive - obj2.isActive;
|
||||
})
|
||||
accountPage.users=storedUsers;})
|
||||
accountPage.state="new_oauth"
|
||||
})
|
||||
}}
|
||||
|
||||
MButton {
|
||||
width: 5*mm;
|
||||
visible: users.length>0
|
||||
text: "+"
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked:{
|
||||
servername.text="https://"
|
||||
servericon.visible=false;
|
||||
servericon.source="";
|
||||
username.text=""
|
||||
password.text=""
|
||||
imagestore.text=""
|
||||
userButton.text=qsTr("User")
|
||||
accountPage.state="new_oauth"
|
||||
}
|
||||
}
|
||||
|
||||
MButton {
|
||||
width: 5*mm;
|
||||
text: "?"
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked:{
|
||||
rootstackView.push("qrc:/qml/configqml/InfoBox.qml");
|
||||
}
|
||||
}
|
||||
MButton{
|
||||
id:closeButton
|
||||
width: 5*mm;
|
||||
visible: users.length>0
|
||||
text: "\uf057"
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked:{rootstackView.pop()}
|
||||
}
|
||||
}
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: "new_oauth"
|
||||
PropertyChanges {target: username; visible: false }
|
||||
PropertyChanges {target: password; visible: false}
|
||||
PropertyChanges {target: ruleButton; visible: true}
|
||||
},
|
||||
},
|
||||
State {
|
||||
name:"oauth"
|
||||
PropertyChanges {target: username; visible: true}
|
||||
|
|
@ -561,34 +561,34 @@ Page{
|
|||
}
|
||||
]
|
||||
|
||||
Component.onCompleted: { //print("filesystem.osType " +filesystem.osType)
|
||||
try{Helperjs.readData(db,"config","",function(storedUsers){
|
||||
storedUsers.sort(function(obj1, obj2) {
|
||||
return obj1.isActive - obj2.isActive;
|
||||
})
|
||||
accountPage.users=storedUsers;
|
||||
Service.readConfig(db,function(obj){
|
||||
if (obj==null){
|
||||
accountPage.state="new_oauth"
|
||||
}
|
||||
else{
|
||||
userButton.text=obj.username;
|
||||
servername.text=obj.server;
|
||||
serverModel.insert(0,{text:obj.server})
|
||||
accountPage.setServericon(obj.server);
|
||||
username.text= obj.username;
|
||||
password.text=Qt.atob(obj.password);
|
||||
imagestore.text=obj.imagestore;
|
||||
imagestoredir=obj.imagestore;
|
||||
if( obj.isActive==0){userButton.font.bold='true'} else {userButton.font.bold='false'}
|
||||
if(obj.password!=""){accountPage.state="password"}
|
||||
else if (obj.token!=""){accountPage.state="oauth"}
|
||||
else {accountPage.state="new_oauth"}
|
||||
}
|
||||
Component.onCompleted: { //print("filesystem.osType " +filesystem.osType)
|
||||
try{Helperjs.readData(db,"config","",function(storedUsers){
|
||||
storedUsers.sort(function(obj1, obj2) {
|
||||
return obj1.isActive - obj2.isActive;
|
||||
})
|
||||
accountPage.users=storedUsers;
|
||||
Service.readConfig(db,function(obj){
|
||||
if (obj==null){
|
||||
accountPage.state="new_oauth"
|
||||
}
|
||||
else{
|
||||
userButton.text=obj.username;
|
||||
servername.text=obj.server;
|
||||
serverModel.insert(0,{text:obj.server})
|
||||
accountPage.setServericon(obj.server);
|
||||
username.text= obj.username;
|
||||
password.text=Qt.atob(obj.password);
|
||||
imagestore.text=obj.imagestore;
|
||||
imagestoredir=obj.imagestore;
|
||||
if( obj.isActive==0){userButton.font.bold='true'} else {userButton.font.bold='false'}
|
||||
if(obj.password!=""){accountPage.state="password"}
|
||||
else if (obj.token!=""){accountPage.state="oauth"}
|
||||
else {accountPage.state="new_oauth"}
|
||||
}
|
||||
|
||||
},"isActive",0)
|
||||
},"isActive",0)
|
||||
})}
|
||||
catch (e){//print("onCompleted" +users.count +e)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,179 +30,218 @@
|
|||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import QtQuick 2.11
|
||||
import QtQuick.Dialogs 1.2
|
||||
//import QtQuick.Dialogs 1.2
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/js/service.js" as Service
|
||||
import "qrc:/qml/configqml"
|
||||
import "qrc:/qml/genericqml"
|
||||
|
||||
Page{
|
||||
//anchors.fill: parent
|
||||
width:root.width
|
||||
height:root.height
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
ScrollView{
|
||||
anchors.fill: parent
|
||||
contentHeight: 40*root.fontFactor*osSettings.bigFontSize
|
||||
contentWidth: root.width
|
||||
clip:true
|
||||
|
||||
Label {
|
||||
text: qsTr("News as")
|
||||
font.pointSize:osSettings.systemFontSize
|
||||
x: root.fontFactor*osSettings.bigFontSize; y: 2*root.fontFactor*osSettings.bigFontSize
|
||||
}
|
||||
|
||||
Rectangle{
|
||||
x: root.fontFactor*osSettings.bigFontSize; y: 4*root.fontFactor*osSettings.bigFontSize;
|
||||
width: newsTypeField.contentWidth+2*mm; height: 2*root.fontFactor*osSettings.bigFontSize
|
||||
color: Material.dialogColor//"#F3F3F3"
|
||||
radius: 0.5*mm
|
||||
Label{
|
||||
id: newsTypeField
|
||||
anchors.fill: parent
|
||||
font.pointSize:osSettings.bigFontSize
|
||||
text:qsTr("Conversations")
|
||||
Label {
|
||||
text: qsTr("News as")
|
||||
font.pointSize:osSettings.systemFontSize
|
||||
x: root.fontFactor*osSettings.bigFontSize; y: 2*root.fontFactor*osSettings.bigFontSize
|
||||
}
|
||||
MouseArea{
|
||||
anchors.fill:parent
|
||||
onClicked:newstypemenu.popup()
|
||||
}
|
||||
}
|
||||
Menu {
|
||||
id:newstypemenu
|
||||
width:12*root.fontFactor*osSettings.bigFontSize
|
||||
MenuItem {
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
text: qsTr("Timeline")
|
||||
onTriggered: {newsTypeField.text=qsTr("Timeline");
|
||||
Service.updateglobaloptions(root.db,"newsViewType","Timeline");}
|
||||
}
|
||||
MenuItem {
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
text: qsTr("Conversations")
|
||||
onTriggered: {newsTypeField.text=qsTr("Conversations");
|
||||
Service.updateglobaloptions(root.db,"newsViewType","Conversations");}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Label {
|
||||
text: qsTr("Max. News")
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
x: root.fontFactor*osSettings.bigFontSize; y:8*root.fontFactor*osSettings.bigFontSize
|
||||
}
|
||||
|
||||
Slider{ id: maxNews
|
||||
x:6*root.fontFactor*osSettings.bigFontSize; y: 10*root.fontFactor*osSettings.bigFontSize;
|
||||
width: root.width/2;height:2*root.fontFactor*osSettings.bigFontSize
|
||||
from: 0;to:2000; stepSize: 100
|
||||
value: root.globaloptions.hasOwnProperty("max_news")?root.globaloptions.max_news:1000
|
||||
}
|
||||
|
||||
Rectangle{
|
||||
color: Material.dialogColor
|
||||
x: root.fontFactor*osSettings.bigFontSize; y: 10*root.fontFactor*osSettings.bigFontSize;
|
||||
width: 4*root.fontFactor*osSettings.bigFontSize; height: 2*root.fontFactor*osSettings.bigFontSize;
|
||||
radius: 0.5*mm
|
||||
TextEdit{id:maxNewsText;
|
||||
anchors.fill: parent
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
verticalAlignment:TextEdit.AlignRight
|
||||
color: Material.primaryTextColor
|
||||
text:maxNews.value
|
||||
selectByMouse: true
|
||||
onTextChanged: {
|
||||
Service.updateglobaloptions(root.db,"max_news",text);
|
||||
Rectangle{
|
||||
x: root.fontFactor*osSettings.bigFontSize; y: 4*root.fontFactor*osSettings.bigFontSize;
|
||||
width: newsTypeField.contentWidth+2*mm; height: 2*root.fontFactor*osSettings.bigFontSize
|
||||
color: osSettings.backgroundDimColor//"#F3F3F3"
|
||||
radius: 0.5*mm
|
||||
Label{
|
||||
id: newsTypeField
|
||||
anchors.fill: parent
|
||||
font.pointSize:osSettings.bigFontSize
|
||||
text:qsTr("Conversations")
|
||||
}
|
||||
MouseArea{
|
||||
anchors.fill:parent
|
||||
onClicked:newstypemenu.popup()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CheckBox{
|
||||
id: nsfwCheckbox
|
||||
x: root.fontFactor*osSettings.bigFontSize
|
||||
y: 14*root.fontFactor*osSettings.bigFontSize
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
text: qsTr("Hide #nsfw?")
|
||||
checked:(globaloptions["hide_nsfw"]==1)?true:false
|
||||
onClicked: {
|
||||
toggle();
|
||||
if(nsfwCheckbox.checked==true){
|
||||
Service.updateglobaloptions(root.db,"hide_nsfw",0);nsfwCheckbox.checked=false;
|
||||
Menu {
|
||||
id:newstypemenu
|
||||
width:12*root.fontFactor*osSettings.bigFontSize
|
||||
MenuItem {
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
text: qsTr("Timeline")
|
||||
onTriggered: {newsTypeField.text=qsTr("Timeline");
|
||||
Service.updateglobaloptions(root.db,"newsViewType","Timeline");}
|
||||
}
|
||||
else{
|
||||
Service.updateglobaloptions(root.db,"hide_nsfw",1);nsfwCheckbox.checked=true;
|
||||
MenuItem {
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
text: qsTr("Conversations")
|
||||
onTriggered: {newsTypeField.text=qsTr("Conversations");
|
||||
Service.updateglobaloptions(root.db,"newsViewType","Conversations");}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// CheckBox{
|
||||
// id: darkmodeCheckbox
|
||||
// tristate:true
|
||||
// x: root.fontFactor*osSettings.bigFontSize
|
||||
// y: 24*root.fontFactor*osSettings.bigFontSize
|
||||
// font.pointSize: osSettings.bigFontSize
|
||||
// text: qsTr("Dark Mode")
|
||||
// checked:(globaloptions["view_darkmode"]==1)?true:false
|
||||
// onClicked: {
|
||||
// toggle();
|
||||
// if(darkmodeCheckbox.checked==true){
|
||||
// Service.updateglobaloptions(root.db,"view_darkmode",0);darkmodeCheckbox.checked=false;
|
||||
// root.Material.theme=Material.Light
|
||||
// }
|
||||
// else{
|
||||
// Service.updateglobaloptions(root.db,"view_darkmode",1);darkmodeCheckbox.checked=true;
|
||||
// root.Material.theme=Material.Dark
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
Column{
|
||||
x: root.fontFactor*osSettings.bigFontSize
|
||||
y: 18*root.fontFactor*osSettings.bigFontSize
|
||||
Label{
|
||||
text: qsTr("Dark Mode")
|
||||
font.pointSize: osSettings.systemFontSize}
|
||||
Label {
|
||||
text: qsTr("Max. News")
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
x: root.fontFactor*osSettings.bigFontSize; y:8*root.fontFactor*osSettings.bigFontSize
|
||||
}
|
||||
|
||||
RadioButton{
|
||||
text: qsTr("System")
|
||||
checked: (globaloptions["view_darkmode"]==0 || globaloptions["view_darkmode"]==undefined)?true:false
|
||||
Slider{ id: maxNews
|
||||
x:6*root.fontFactor*osSettings.bigFontSize; y: 10*root.fontFactor*osSettings.bigFontSize;
|
||||
width: root.width/2;height:2*root.fontFactor*osSettings.bigFontSize
|
||||
from: 0;to:2000; stepSize: 100
|
||||
value: root.globaloptions.hasOwnProperty("max_news")?root.globaloptions.max_news:1000
|
||||
}
|
||||
|
||||
Rectangle{
|
||||
color: osSettings.backgroundDimColor
|
||||
x: root.fontFactor*osSettings.bigFontSize; y: 10*root.fontFactor*osSettings.bigFontSize;
|
||||
width: 4*root.fontFactor*osSettings.bigFontSize; height: 2*root.fontFactor*osSettings.bigFontSize;
|
||||
radius: 0.5*mm
|
||||
TextEdit{id:maxNewsText;
|
||||
anchors.fill: parent
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
verticalAlignment:TextEdit.AlignRight
|
||||
color: osSettings.primaryTextColor
|
||||
text:maxNews.value
|
||||
selectByMouse: true
|
||||
onTextChanged: {
|
||||
Service.updateglobaloptions(root.db,"max_news",text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CheckBox{
|
||||
id: nsfwCheckbox
|
||||
x: root.fontFactor*osSettings.bigFontSize
|
||||
y: 14*root.fontFactor*osSettings.bigFontSize
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
text: qsTr("Hide #nsfw?")
|
||||
checked:(globaloptions["hide_nsfw"]==1)?true:false
|
||||
onClicked: {
|
||||
if(checked==true){
|
||||
Service.updateglobaloptions(root.db,"view_darkmode",0);
|
||||
root.Material.theme=Material.System
|
||||
}
|
||||
toggle();
|
||||
if(nsfwCheckbox.checked==true){
|
||||
Service.updateglobaloptions(root.db,"hide_nsfw",0);nsfwCheckbox.checked=false;
|
||||
}
|
||||
else{
|
||||
Service.updateglobaloptions(root.db,"hide_nsfw",1);nsfwCheckbox.checked=true;
|
||||
}
|
||||
}
|
||||
}
|
||||
RadioButton{
|
||||
text: qsTr("Dark")
|
||||
checked: (globaloptions["view_darkmode"]==1)?true:false
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked: {
|
||||
if(checked==true){
|
||||
Service.updateglobaloptions(root.db,"view_darkmode",1);
|
||||
root.Material.theme=Material.Dark
|
||||
}
|
||||
}
|
||||
}
|
||||
RadioButton{
|
||||
text: qsTr("Light")
|
||||
checked: (globaloptions["view_darkmode"]==2)?true:false
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked: {
|
||||
if(checked==true){
|
||||
Service.updateglobaloptions(root.db,"view_darkmode",2);
|
||||
root.Material.theme=Material.Light
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MButton {
|
||||
anchors.right: parent.right; //anchors.rightMargin: mm;
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: 2*root.fontFactor*osSettings.bigFontSize
|
||||
width: 2*root.fontFactor*osSettings.bigFontSize;
|
||||
text: "?"
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked:{
|
||||
rootstackView.push("qrc:/qml/configqml/InfoBox.qml");
|
||||
|
||||
// CheckBox{
|
||||
// id: darkmodeCheckbox
|
||||
// tristate:true
|
||||
// x: root.fontFactor*osSettings.bigFontSize
|
||||
// y: 24*root.fontFactor*osSettings.bigFontSize
|
||||
// font.pointSize: osSettings.bigFontSize
|
||||
// text: qsTr("Dark Mode")
|
||||
// checked:(globaloptions["view_darkmode"]==1)?true:false
|
||||
// onClicked: {
|
||||
// toggle();
|
||||
// if(darkmodeCheckbox.checked==true){
|
||||
// Service.updateglobaloptions(root.db,"view_darkmode",0);darkmodeCheckbox.checked=false;
|
||||
// root.Material.theme=Material.Light
|
||||
// }
|
||||
// else{
|
||||
// Service.updateglobaloptions(root.db,"view_darkmode",1);darkmodeCheckbox.checked=true;
|
||||
// root.Material.theme=Material.Dark
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
Column{
|
||||
visible: osSettings.osType=="Android"
|
||||
x: root.fontFactor*osSettings.bigFontSize
|
||||
y: 18*root.fontFactor*osSettings.bigFontSize
|
||||
Label{
|
||||
text: qsTr("Dark Mode")
|
||||
font.pointSize: osSettings.systemFontSize}
|
||||
|
||||
RadioButton{
|
||||
text: qsTr("System")
|
||||
checked: (globaloptions["view_darkmode"]==0 || globaloptions["view_darkmode"]==undefined)?true:false
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked: {
|
||||
if(checked==true){
|
||||
Service.updateglobaloptions(root.db,"view_darkmode",0);
|
||||
root.Material.theme=Material.System
|
||||
}
|
||||
}
|
||||
}
|
||||
RadioButton{
|
||||
text: qsTr("Dark")
|
||||
checked: (globaloptions["view_darkmode"]==1)?true:false
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked: {
|
||||
if(checked==true){
|
||||
Service.updateglobaloptions(root.db,"view_darkmode",1);
|
||||
root.Material.theme=Material.Dark
|
||||
}
|
||||
}
|
||||
}
|
||||
RadioButton{
|
||||
text: qsTr("Light")
|
||||
checked: (globaloptions["view_darkmode"]==2)?true:false
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked: {
|
||||
if(checked==true){
|
||||
Service.updateglobaloptions(root.db,"view_darkmode",2);
|
||||
root.Material.theme=Material.Light
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Column{
|
||||
x: root.fontFactor*osSettings.bigFontSize
|
||||
y: 28*root.fontFactor*osSettings.bigFontSize
|
||||
Label{
|
||||
text: qsTr("Toolbar Postion")
|
||||
font.pointSize: osSettings.systemFontSize}
|
||||
|
||||
RadioButton{
|
||||
text: qsTr("Top")
|
||||
checked: (globaloptions["toolbarposition"]==0 || globaloptions["toolbarposition"]==undefined)?true:false
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked: {
|
||||
if(checked==true){
|
||||
Service.updateglobaloptions(root.db,"roottoolbarposition",0);
|
||||
globaloptions.toolbarposition=0;
|
||||
root.roottoolbar.position=ToolBar.Header
|
||||
}
|
||||
}
|
||||
}
|
||||
RadioButton{
|
||||
text: qsTr("Bottom")
|
||||
checked: (globaloptions["toolbarposition"]==1)?true:false
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked: {
|
||||
if(checked==true){
|
||||
Service.updateglobaloptions(root.db,"roottoolbarposition",1);
|
||||
globaloptions.toolbarposition=1;
|
||||
root.roottoolbar.position=ToolBar.Footer
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
MButton {
|
||||
anchors.right: parent.right; anchors.rightMargin: mm;
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: 3*root.fontFactor*osSettings.bigFontSize
|
||||
//width: 2*root.fontFactor*osSettings.bigFontSize;
|
||||
text: "?"
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked:{
|
||||
rootstackView.push("qrc:/qml/configqml/InfoBox.qml");
|
||||
}
|
||||
}
|
||||
}
|
||||
// MButton{
|
||||
|
|
|
|||
|
|
@ -30,10 +30,9 @@
|
|||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import QtQuick 2.11
|
||||
import QtQuick.Dialogs 1.2
|
||||
//import QtQuick.Dialogs 1.2
|
||||
import QtQuick.Layouts 1.11
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/js/service.js" as Service
|
||||
import "qrc:/qml/configqml"
|
||||
import "qrc:/qml/genericqml"
|
||||
|
|
@ -119,7 +118,7 @@ Page{
|
|||
MButton{
|
||||
id:closeButton
|
||||
// height: 2*root.fontFactor*osSettings.bigFontSize
|
||||
width: 2*root.fontFactor*osSettings.bigFontSize;
|
||||
//width: 2*root.fontFactor*osSettings.bigFontSize;
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin:2*root.fontFactor*osSettings.bigFontSize
|
||||
anchors.right: parent.right
|
||||
|
|
|
|||
|
|
@ -31,8 +31,6 @@
|
|||
|
||||
import QtQuick 2.11
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
|
||||
|
||||
Page{
|
||||
//anchors.fill: parent
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/qml/genericqml"
|
||||
|
||||
Page{
|
||||
|
|
@ -41,9 +40,9 @@ Page{
|
|||
textFormat: Text.RichText
|
||||
width: root.width-mm
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
color:Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
wrapMode: Text.WrapAtWordBoundaryOrAnywhere
|
||||
text: "<b>Friendiqa v0.6.8 </b><br>Licensed under GPL 3 with the exception of OpenSSL <br> "+
|
||||
text: "<b>Friendiqa v0.6.9 </b><br>Licensed under GPL 3 with the exception of OpenSSL <br> "+
|
||||
"Website <a href='https://friendiqa.ma-nic.de'>https://friendiqa.ma-nic.de</a><br>"+
|
||||
"Sourcecode: <a href='https://git.friendi.ca/LubuWest/Friendiqa'>https://git.friendi.ca/LubuWest/Friendiqa</a><br>"+
|
||||
"Privacy Policy: <a href='https://git.friendi.ca/lubuwest/Friendiqa/src/branch/master/PrivacyPolicy.md'>http://git.friendi.ca/lubuwest/Friendiqa/src/branch/master/PrivacyPolicy.md</a><br>"+
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ ScrollView{
|
|||
spacing: 0.7*root.fontFactor*osSettings.bigFontSize
|
||||
Label{
|
||||
width:implicitWidth
|
||||
font.family: fontAwesome.name
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
text: "\uf085 "+ qsTr("Settings")
|
||||
MouseArea{
|
||||
|
|
@ -63,6 +64,7 @@ ScrollView{
|
|||
|
||||
Label{y: 2*root.fontFactor*osSettings.bigFontSize
|
||||
width:implicitWidth
|
||||
font.family: fontAwesome.name
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
text: "\uf2bb " + qsTr("Accounts")
|
||||
MouseArea{
|
||||
|
|
@ -75,6 +77,7 @@ ScrollView{
|
|||
|
||||
Label{y: 4*root.fontFactor*osSettings.bigFontSize
|
||||
width:implicitWidth
|
||||
font.family: fontAwesome.name
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
text: "\uf08b " +qsTr("Quit")
|
||||
MouseArea{
|
||||
|
|
|
|||
|
|
@ -31,16 +31,40 @@
|
|||
|
||||
import QtQuick.Window 2.0
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls.Material 2.12
|
||||
|
||||
QtObject{
|
||||
property int appWidth: Screen.desktopAvailableWidth
|
||||
property int appHeight: Screen.desktopAvailableHeight
|
||||
property int backKey: Qt.Key_Back
|
||||
//property string attachImageDir:filesystem.cameraPath+"/"
|
||||
property string osType: "Android"
|
||||
|
||||
property int systemFontSize: root.font.pointSize*1.1
|
||||
property int bigFontSize: systemFontSize*1.3
|
||||
property string imagePickQml: "ImagePicker"
|
||||
property string imagePicker:'import QtQuick 2.0; import "qrc:/qml/genericqml";'+
|
||||
imagePickQml+'{multiple : true;onReady: {attachImageURLs.push(imageUrl);'+
|
||||
'attachImage(imageUrl)}}'
|
||||
|
||||
Material.theme: Material.System
|
||||
property color backgroundColor: Material.backgroundColor
|
||||
property color backgroundDimColor:Material.backgroundDimColor
|
||||
property color primaryTextColor: Material.primaryTextColor
|
||||
property color secondaryTextColor: Material.secondaryTextColor
|
||||
property color dialogColor: Material.dialogColor
|
||||
property color accentColor: Material.accentColor
|
||||
property color buttonColor: Material.buttonColor
|
||||
|
||||
function setTheme(theme){
|
||||
if (theme=="system"){
|
||||
Material.theme=Material.System
|
||||
}
|
||||
else if (theme=="dark"){
|
||||
Material.theme=Material.Dark
|
||||
}
|
||||
else if (theme=="light"){
|
||||
Material.theme=Material.Light
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,7 +30,9 @@
|
|||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import QtQuick.Window 2.0
|
||||
import QtQuick 2.0
|
||||
import QtQuick 6.3
|
||||
import QtQuick.Controls 6.3
|
||||
|
||||
QtObject{
|
||||
property real appWidth: Screen.desktopAvailableWidth/4*3
|
||||
property real appHeight: Screen.desktopAvailableHeight/4*3
|
||||
|
|
@ -40,4 +42,25 @@ QtObject{
|
|||
property int bigFontSize: systemFontSize*1.5
|
||||
//property string attachImageDir:filesystem.homePath+"/Pictures/"
|
||||
property string imagePickQml: "ImagePickerLinux"
|
||||
//SystemPalette { id: sysPalette; colorGroup: SystemPalette.Active }
|
||||
//property SystemPalette name: value
|
||||
property color backgroundColor: palette.window
|
||||
property color backgroundDimColor: palette.button
|
||||
property color primaryTextColor: palette.windowText
|
||||
property color secondaryTextColor: palette.buttonText
|
||||
property color dialogColor: palette.base
|
||||
property color accentColor: palette.highlightedText
|
||||
property color buttonColor: palette.button
|
||||
|
||||
function setTheme(theme){
|
||||
if (theme=="system"){
|
||||
//Material.theme=Material.System
|
||||
}
|
||||
else if (theme=="dark"){
|
||||
//Material.theme=Material.Dark
|
||||
}
|
||||
else if (theme=="light"){
|
||||
//Material.theme=Material.Light
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,12 +32,11 @@
|
|||
|
||||
import QtQuick 2.11
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/qml/configqml"
|
||||
import "qrc:/js/service.js" as Service
|
||||
|
||||
Rectangle{
|
||||
color: Material.dialogColor
|
||||
color: osSettings.dialogColor
|
||||
property string adapter: ""
|
||||
width: parent.width
|
||||
height: 4*root.fontFactor*osSettings.bigFontSize
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
import QtQuick 2.11
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/qml/configqml"
|
||||
import "qrc:/qml/genericqml"
|
||||
import "qrc:/js/service.js" as Service
|
||||
|
|
@ -59,14 +58,14 @@ Page{
|
|||
Rectangle{
|
||||
x: root.fontFactor*osSettings.bigFontSize; y:4*root.fontFactor*osSettings.bigFontSize;
|
||||
width: 4*root.fontFactor*osSettings.bigFontSize; height: 2*root.fontFactor*osSettings.bigFontSize;
|
||||
color: Material.dialogColor
|
||||
color: osSettings.dialogColor
|
||||
radius: 0.5*mm
|
||||
TextEdit{
|
||||
id: messageIntervalField
|
||||
anchors.fill: parent
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
verticalAlignment:TextEdit.AlignRight
|
||||
color: Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
text:messageIntervalSlider.value
|
||||
focus: true
|
||||
selectByMouse: true
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
import QtQuick 2.11
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import QtQuick.Layouts 1.11
|
||||
import QtQuick.LocalStorage 2.0
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
|
|
@ -115,7 +114,7 @@ Page{
|
|||
x:1.5*root.fontFactor*osSettings.systemFontSize;
|
||||
width:root.width-(7*root.fontFactor*osSettings.systemFontSize+mm);
|
||||
height: 2.5*root.fontFactor*osSettings.systemFontSize;
|
||||
color:Material.dialogColor
|
||||
color:osSettings.dialogColor
|
||||
selfdestroying:false
|
||||
}
|
||||
|
||||
|
|
@ -132,10 +131,10 @@ Page{
|
|||
Rectangle {
|
||||
width: contactsSearchView.width
|
||||
height: childrenRect.height
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
required property string section
|
||||
Text {
|
||||
color: Material.secondaryTextColor
|
||||
color: osSettings.secondaryTextColor
|
||||
text: parent.section
|
||||
font.bold: true
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
import QtQuick 2.11
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import QtQuick.Layouts 1.11
|
||||
import QtQuick.LocalStorage 2.0
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
|
|
@ -146,14 +145,15 @@ Item{
|
|||
Rectangle {
|
||||
id:searchComponent
|
||||
x: mm; y:mm
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
radius:0.5*mm
|
||||
width: 10*root.fontFactor*osSettings.bigFontSize
|
||||
height: 2*root.fontFactor*osSettings.bigFontSize
|
||||
TextField {
|
||||
id: searchText
|
||||
color: Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
focus: true
|
||||
font.family: fontAwesome.name
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
wrapMode: Text.Wrap
|
||||
anchors.fill:parent
|
||||
|
|
@ -193,10 +193,10 @@ Item{
|
|||
Rectangle {
|
||||
width: friendsView.width
|
||||
height: childrenRect.height
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
required property string section
|
||||
Text {
|
||||
color: Material.secondaryTextColor
|
||||
color: osSettings.secondaryTextColor
|
||||
text: parent.section
|
||||
font.bold: true
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
|
|
@ -208,11 +208,12 @@ Item{
|
|||
|
||||
Component { id:headerComponent
|
||||
Rectangle{
|
||||
color: Material.dialogColor
|
||||
color: osSettings.dialogColor
|
||||
width:friendsView.width
|
||||
height:6*mm
|
||||
Text{
|
||||
color: Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
font.family: fontAwesome.name
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
anchors.centerIn: parent
|
||||
text:"\uf234"
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
import QtQuick 2.11
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import QtQuick.Layouts 1.11
|
||||
import QtQuick.LocalStorage 2.0
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
|
|
@ -42,7 +41,7 @@ import "qrc:/qml/genericqml"
|
|||
|
||||
Rectangle {
|
||||
y:1
|
||||
color: Material.backgroundColor//"white"
|
||||
color: osSettings.backgroundColor
|
||||
|
||||
function showContactdetails(contact){
|
||||
// rootstack.currentIndex=0;
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
import QtQuick 2.11
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
import "qrc:/js/news.js" as Newsjs
|
||||
import "qrc:/qml/genericqml"
|
||||
|
|
@ -56,7 +55,7 @@ Item {
|
|||
height: parent.height-mm
|
||||
radius: 0.5*mm
|
||||
border.color: "grey"
|
||||
color:Material.backgroundColor
|
||||
color:osSettings.backgroundColor
|
||||
|
||||
Rectangle{
|
||||
id:namelabelRect
|
||||
|
|
@ -65,13 +64,13 @@ Item {
|
|||
width: wrapper.width-2
|
||||
height: 3*root.fontFactor*osSettings.bigFontSize
|
||||
//border.color: "light grey"
|
||||
color:Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
TextInput {
|
||||
id: namelabel
|
||||
anchors.fill: parent
|
||||
readOnly: true
|
||||
text: group.new?"":group.groupname
|
||||
color: Material.secondaryTextColor//"#303030"
|
||||
color: osSettings.secondaryTextColor//"#303030"
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
}
|
||||
}
|
||||
|
|
@ -122,7 +121,7 @@ Item {
|
|||
Rectangle{
|
||||
id: detailsrectangle
|
||||
anchors.top: namelabelRect.bottom
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
//anchors.topMargin: mm
|
||||
x:mm
|
||||
width: parent.width-2*mm
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/qml/genericqml"
|
||||
import "qrc:/js/service.js" as Service
|
||||
|
||||
|
|
@ -39,7 +38,7 @@ Rectangle {
|
|||
// width:parent.width-2*mm
|
||||
// height:parent.height-14*mm
|
||||
anchors.fill:parent
|
||||
color: Material.backgroundColor//color:"white"
|
||||
color: osSettings.backgroundColor
|
||||
property var profile:({})
|
||||
property var attachImageURLs:[]
|
||||
property var createdAtDate: new Date(profile.friendica_owner.created_at)
|
||||
|
|
@ -176,6 +175,7 @@ Rectangle {
|
|||
Text {
|
||||
id:phototext
|
||||
z:4
|
||||
font.family: fontAwesome.name
|
||||
text: "\uf040"
|
||||
width:5*mm
|
||||
anchors.top: photoImage.top
|
||||
|
|
@ -206,7 +206,7 @@ Rectangle {
|
|||
anchors.topMargin: 0
|
||||
anchors.left: photoImage.left
|
||||
wrapMode: Text.Wrap
|
||||
color: Material.secondaryTextColor//"#303030"
|
||||
color: osSettings.secondaryTextColor
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
anchors.top: photoImage.bottom
|
||||
}
|
||||
|
|
@ -217,13 +217,13 @@ Rectangle {
|
|||
Rectangle{
|
||||
id:profileRect
|
||||
width:profileView.width
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
height: 5*mm+profiletextfield.height
|
||||
Text{
|
||||
y:mm
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
text:"<b>"+qsTr("profile id")+": </b> "+profileid+"<br>"
|
||||
color:Material.primaryTextColor//"black"
|
||||
color:osSettings.primaryTextColor
|
||||
}
|
||||
Text{
|
||||
id:profiletextfield
|
||||
|
|
@ -233,7 +233,7 @@ Rectangle {
|
|||
wrapMode: Text.Wrap
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
text:profiletext
|
||||
color:Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
onLinkActivated: Qt.openUrlExternally(link)
|
||||
}
|
||||
}
|
||||
|
|
@ -242,7 +242,7 @@ Rectangle {
|
|||
id:textcomponent
|
||||
Text{
|
||||
id:namelabeltext
|
||||
color:Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
width: namelabelflickable.width
|
||||
height: implicitHeight
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ import QtQuick 2.5
|
|||
import QtQuick.LocalStorage 2.0
|
||||
import QtQuick.Window 2.0
|
||||
import QtQuick.Controls 2.4
|
||||
import QtQuick.Controls.Material 2.12
|
||||
|
||||
import QtQuick.Layouts 1.11
|
||||
import QSystemTrayIcon 1.0
|
||||
import "qrc:/js/news.js" as Newsjs
|
||||
|
|
@ -45,7 +45,7 @@ ApplicationWindow{
|
|||
id:root
|
||||
title: "Friendiqa"
|
||||
property var globaloptions: Service.readGO(db)
|
||||
property QtObject osSettings: {var tmp=Qt.createComponent("qrc:/qml/configqml/OSSettingsLinux.qml");return tmp.createObject(root)}
|
||||
property QtObject osSettings: {var tmp=Qt.createComponent("qrc:/qml/configqml/OSSettings"+filesystem.osType+".qml");return tmp.createObject(root)}
|
||||
width: globaloptions.hasOwnProperty("appWidth")?globaloptions.appWidth:osSettings.appWidth
|
||||
height:globaloptions.hasOwnProperty("appHeight")?globaloptions.appHeight:osSettings.appHeight
|
||||
visible: filesystem.Visibility// true
|
||||
|
|
@ -75,10 +75,6 @@ ApplicationWindow{
|
|||
property var contactposts:[]
|
||||
property bool imagePicking: false
|
||||
|
||||
|
||||
Material.theme: Material.System
|
||||
color: Material.backgroundColor
|
||||
|
||||
function onLoginChanged(login){
|
||||
if(login=="" || login==null){rootstackView.push("qrc:/qml/configqml/AccountPage.qml")}
|
||||
else{
|
||||
|
|
@ -187,16 +183,18 @@ ApplicationWindow{
|
|||
else {rootstack.currentIndex=0;close.accepted=false}
|
||||
}
|
||||
|
||||
|
||||
Rectangle{
|
||||
anchors.fill: parent
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
}
|
||||
|
||||
header: ToolBar{
|
||||
footer: ToolBar{
|
||||
id: roottoolbar
|
||||
//position: ToolBar.Footer//globaloptions.roottoolbarposition==0 || globaloptions.roottoolbarposition==undefined?ToolBar.Header:ToolBar.Footer
|
||||
width:root.width
|
||||
background: Rectangle{
|
||||
anchors.fill: parent
|
||||
color: Material.backgroundDimColor
|
||||
color: osSettings.backgroundDimColor
|
||||
}
|
||||
RowLayout{
|
||||
anchors.fill: parent
|
||||
|
|
@ -209,38 +207,42 @@ ApplicationWindow{
|
|||
try{while(rootstackView.depth>1){rootstackView.pop()}}catch(e){}
|
||||
}
|
||||
TabButton {
|
||||
font.family: fontAwesome.name
|
||||
text: "\uf03a"
|
||||
background:Rectangle{
|
||||
anchors.fill: parent
|
||||
color: Material.backgroundDimColor
|
||||
color: osSettings.backgroundDimColor
|
||||
}
|
||||
ToolTip.visible: pressed || hovered
|
||||
ToolTip.text: qsTr("Posts")
|
||||
onDoubleClicked: {newstypeSignal("refresh")}
|
||||
}
|
||||
TabButton {
|
||||
font.family: fontAwesome.name
|
||||
text: "\uf0c0"
|
||||
background:Rectangle{
|
||||
anchors.fill: parent
|
||||
color: Material.backgroundDimColor
|
||||
color: osSettings.backgroundDimColor
|
||||
}
|
||||
ToolTip.visible: pressed || hovered
|
||||
ToolTip.text: qsTr("Contacts")
|
||||
}
|
||||
TabButton {
|
||||
font.family: fontAwesome.name
|
||||
text: "\uf03e"
|
||||
background:Rectangle{
|
||||
anchors.fill: parent
|
||||
color: Material.backgroundDimColor
|
||||
color: osSettings.backgroundDimColor
|
||||
}
|
||||
ToolTip.visible: pressed || hovered
|
||||
ToolTip.text: qsTr("Photos")
|
||||
}
|
||||
TabButton {
|
||||
font.family: fontAwesome.name
|
||||
text: "\uf073"
|
||||
background:Rectangle{
|
||||
anchors.fill: parent
|
||||
color: Material.backgroundDimColor
|
||||
color: osSettings.backgroundDimColor
|
||||
}
|
||||
ToolTip.visible: pressed || hovered
|
||||
ToolTip.text: qsTr("Calendar")
|
||||
|
|
@ -249,11 +251,12 @@ ApplicationWindow{
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
StackView{id:rootstackView
|
||||
width:root.width
|
||||
height: root.height
|
||||
initialItem: StackLayout{
|
||||
StackView{id:rootstackView
|
||||
//y:roottoolbar.height
|
||||
//anchors.fill: parent
|
||||
width:root.width
|
||||
height: root.height-roottoolbar.contentHeight
|
||||
initialItem: StackLayout{
|
||||
id:rootstack
|
||||
width:rootstackView.width
|
||||
height: rootstackView.height
|
||||
|
|
@ -283,7 +286,6 @@ StackView{id:rootstackView
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
QSystemTrayIcon {
|
||||
id: systemTray
|
||||
visible: false
|
||||
|
|
@ -299,7 +301,7 @@ StackView{id:rootstackView
|
|||
}
|
||||
}
|
||||
Component.onCompleted: {
|
||||
icon = iconTray
|
||||
icon = root.color<palette.text?iconTrayWhite:iconTrayBlack//iconTray
|
||||
toolTip = qsTr("Click to open Friendiqa")
|
||||
//&hide()
|
||||
}
|
||||
|
|
@ -309,9 +311,9 @@ StackView{id:rootstackView
|
|||
Component.onCompleted: {
|
||||
onLoginChanged(login);
|
||||
globaloptions=Service.readGO(db);
|
||||
if(globaloptions.view_darkmode==1){Material.theme=Material.Dark}
|
||||
else if (globaloptions.view_darkmode==2){Material.theme=Material.Light}
|
||||
else {Material.theme=Material.System}
|
||||
if(globaloptions.view_darkmode==1){osSettings.setTheme("dark")}
|
||||
else if (globaloptions.view_darkmode==2){osSettings.setTheme("light")}
|
||||
else {osSettings.setTheme("system")}
|
||||
if(!filesystem.Visibility){
|
||||
systemTray.icon = iconTray;
|
||||
// systemTray.toolTip = qsTr("Click to open Friendiqa");
|
||||
|
|
@ -324,7 +326,7 @@ StackView{id:rootstackView
|
|||
var IntentReceiverQml = component.createObject(root);
|
||||
}
|
||||
else if (osSettings.osType=="Linux"){
|
||||
if (login!=""){newstypeSignal("refresh")}
|
||||
//if (login!=""){newstypeSignal("refresh")}
|
||||
var component = Qt.createComponent("qrc:/qml/genericqml/LinuxSync.qml");
|
||||
var LinuxSyncQml = component.createObject(root);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls.Material 2.12
|
||||
Rectangle{
|
||||
id: blueButton
|
||||
width: Math.max(mainText.width+2*mm,5*mm)
|
||||
|
|
@ -48,7 +47,7 @@ Rectangle{
|
|||
|
||||
Text{
|
||||
id:mainText
|
||||
color: Material.primaryTextColor//"black"
|
||||
color: osSettings.primaryTextColor
|
||||
anchors.centerIn: parent
|
||||
width: contentWidth
|
||||
height: contentHeight
|
||||
|
|
@ -67,7 +66,7 @@ Rectangle{
|
|||
|
||||
states: [
|
||||
State { name: "Pressed"
|
||||
PropertyChanges { target: blueButton; color: Material.buttonColor} }
|
||||
PropertyChanges { target: blueButton; color: osSettings.buttonColor} }
|
||||
]
|
||||
transitions: [
|
||||
Transition { to:"*"
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/qml/genericqml"
|
||||
|
||||
Item {
|
||||
|
|
@ -46,8 +45,8 @@ Item {
|
|||
width:parent.width
|
||||
height: parent.height
|
||||
radius: 0.5*mm
|
||||
border.color: Material.backgroundDimColor
|
||||
color: Material.backgroundColor
|
||||
border.color: osSettings.backgroundDimColor
|
||||
color: osSettings.backgroundColor
|
||||
Image {
|
||||
id: photoImage
|
||||
x:0.5*mm
|
||||
|
|
@ -70,7 +69,7 @@ Item {
|
|||
height: 1.1*root.fontFactor*osSettings.bigFontSize
|
||||
text: contact.name
|
||||
elide: contentWidth>wrapper.width-4*osSettings.systemFontSize?Text.ElideRight:Text.ElideNone
|
||||
color: Material.secondaryTextColor
|
||||
color: osSettings.secondaryTextColor
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
}
|
||||
Label {
|
||||
|
|
@ -79,7 +78,7 @@ Item {
|
|||
height: 1.1*root.fontFactor*osSettings.bigFontSize
|
||||
text: "(@"+contact.screen_name+")"
|
||||
elide: contentWidth>wrapper.width-4*root.fontFactor*osSettings.systemFontSize?Text.ElideRight:Text.ElideNone
|
||||
color: Material.secondaryTextColor
|
||||
color: osSettings.secondaryTextColor
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
}
|
||||
Label {
|
||||
|
|
@ -89,7 +88,7 @@ Item {
|
|||
maximumLineCount:2
|
||||
text: Qt.atob(contact.description)!=""?contact.description:""
|
||||
elide:Text.ElideRight
|
||||
color: Material.secondaryTextColor
|
||||
color: osSettings.secondaryTextColor
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,8 +29,8 @@
|
|||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Controls 6.3
|
||||
import "qrc:/qml/genericqml"
|
||||
|
||||
Item {
|
||||
|
|
@ -50,6 +50,7 @@ Item {
|
|||
Label{
|
||||
y:2*root.fontFactor*osSettings.bigFontSize
|
||||
width:parent.width
|
||||
font.family: fontAwesome.name
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
text: "\uf021 " + qsTr("Refresh")
|
||||
MouseArea{
|
||||
|
|
@ -69,6 +70,7 @@ Item {
|
|||
Label{
|
||||
y:3.5*root.fontFactor*osSettings.bigFontSize
|
||||
width:parent.width
|
||||
font.family: fontAwesome.name
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
font.bold: account.username==login.username && currentnewstabstatus=="Timeline"
|
||||
text: "\uf1da " + qsTr("Timeline")
|
||||
|
|
@ -87,6 +89,7 @@ Item {
|
|||
Label{
|
||||
y:5*root.fontFactor*osSettings.bigFontSize
|
||||
width:parent.width
|
||||
font.family: fontAwesome.name
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
font.bold: account.username==login.username && currentnewstabstatus=="Conversations"
|
||||
text: "\uf086 " + qsTr("Conversations")
|
||||
|
|
@ -107,6 +110,7 @@ Item {
|
|||
Label{
|
||||
y:6.5*root.fontFactor*osSettings.bigFontSize
|
||||
width:parent.width
|
||||
font.family: fontAwesome.name
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
font.bold: account.username==login.username && currentnewstabstatus=="Replies"
|
||||
text: "\uf0ec " + qsTr("Replies")
|
||||
|
|
@ -125,6 +129,7 @@ Item {
|
|||
Label{
|
||||
y:8*root.fontFactor*osSettings.bigFontSize
|
||||
width:parent.width
|
||||
font.family: fontAwesome.name
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
font.bold: account.username==login.username && currentnewstabstatus=="DirectMessages"
|
||||
text: "\uf0e0 " + qsTr("Direct Messages")
|
||||
|
|
@ -141,6 +146,7 @@ Item {
|
|||
Label{
|
||||
y:9.5*root.fontFactor*osSettings.bigFontSize
|
||||
width:parent.width
|
||||
font.family: fontAwesome.name
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
font.bold: account.username==login.username && currentnewstabstatus=="Favorites"
|
||||
text: "\uf005 " + qsTr("Favorites")
|
||||
|
|
@ -159,6 +165,7 @@ Item {
|
|||
Label{
|
||||
y:11*root.fontFactor*osSettings.bigFontSize
|
||||
width:parent.width
|
||||
font.family: fontAwesome.name
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
font.bold: account.username==login.username && currentnewstabstatus=="Public Timeline"
|
||||
text: "\uf0ac " + qsTr("Public Timeline")
|
||||
|
|
@ -177,6 +184,7 @@ Item {
|
|||
Label{
|
||||
y:12.5*root.fontFactor*osSettings.bigFontSize
|
||||
width:parent.width
|
||||
font.family: fontAwesome.name
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
font.bold: account.username==login.username && currentnewstabstatus=="Groupnews"
|
||||
text: "\uf0c0 " + qsTr("Group news")
|
||||
|
|
@ -195,6 +203,7 @@ Item {
|
|||
Label{
|
||||
y:14*root.fontFactor*osSettings.bigFontSize
|
||||
width:parent.width
|
||||
font.family: fontAwesome.name
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
font.bold: account.username==login.username && currentnewstabstatus=="Search"
|
||||
text: "\uf002 " + qsTr("Search")
|
||||
|
|
@ -213,6 +222,7 @@ Item {
|
|||
Label{
|
||||
y:15.5*root.fontFactor*osSettings.bigFontSize
|
||||
width:parent.width
|
||||
font.family: fontAwesome.name
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
font.bold: account.username==login.username && currentnewstabstatus=="Notifications"
|
||||
text: "\uf0f3 " + qsTr("Notifications")
|
||||
|
|
|
|||
|
|
@ -37,7 +37,8 @@ Item {
|
|||
|
||||
Connections {
|
||||
target: SystemDispatcher
|
||||
onDispatched: {
|
||||
//onDispatched: {
|
||||
function onDispatched(type, message){
|
||||
if ((type === m_CHOSEN_MESSAGE) && (root.imagePicking==true)) {
|
||||
var h=[];
|
||||
for (var n in message.imageUrls){
|
||||
|
|
|
|||
|
|
@ -30,9 +30,8 @@
|
|||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import QtQuick 2.12
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import QtQuick.Dialogs 1.2
|
||||
import QtQuick.Controls 6.3
|
||||
import QtQuick.Dialogs 6.3
|
||||
import Qt.labs.folderlistmodel 2.12
|
||||
import "qrc:/js/service.js" as Service
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
|
|
@ -81,11 +80,12 @@ Item{
|
|||
FileDialog {
|
||||
id: imageFileDialog
|
||||
title: "Please choose a file"
|
||||
folder: shortcuts.pictures
|
||||
selectFolder: false
|
||||
selectMultiple: true
|
||||
currentFolder: StandardPaths.standardLocations(StandardPaths.PicturesLocation)[0]
|
||||
fileMode: FileDialog.OpenFiles
|
||||
//selectMultiple: true
|
||||
onAccepted: {
|
||||
imageUrl=imageFileDialog.fileUrls.toString();
|
||||
//imageUrl=imageFileDialog.fileUrls.toString();
|
||||
imageUrl=imageFileDialog.selectedFiles.toString();
|
||||
ready();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/qml/configqml"
|
||||
|
||||
Rectangle{
|
||||
|
|
@ -40,7 +39,7 @@ Rectangle{
|
|||
// height: root.height-bar.height
|
||||
//y: bar.height
|
||||
signal opened()
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
|
||||
LeftDrawerScrollview{
|
||||
width:parent.width-mm
|
||||
|
|
@ -51,7 +50,7 @@ Rectangle{
|
|||
width: 1
|
||||
height: leftDrawer.height
|
||||
anchors.right: leftDrawer.right
|
||||
color: Material.dialogColor//"#EEEEEE"
|
||||
color: osSettings.dialogColor
|
||||
}
|
||||
//Component.onCompleted: {opened();}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,18 +28,18 @@
|
|||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
import QtQuick 2.6
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import QtQuick 2.9
|
||||
import QtQuick.Controls 6.3
|
||||
Button{
|
||||
id: mButton
|
||||
property alias color: bg.color
|
||||
width: Math.max(text.width+2*mm,2*root.fontFactor*osSettings.bigFontSize)
|
||||
width: Math.max(implicitContentWidth+2*mm,3*root.fontFactor*osSettings.bigFontSize)
|
||||
//radius: mm
|
||||
height: 2*root.fontFactor*osSettings.bigFontSize
|
||||
//color: Material.grey
|
||||
height: 2.5*root.fontFactor*osSettings.bigFontSize
|
||||
//color: Material.foreground
|
||||
font.family: fontAwesome.name
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
//highlighted:true
|
||||
background: Rectangle{id:bg;color: Material.dialogColor//"#F3F3F3";
|
||||
background: Rectangle{id:bg;color: osSettings.dialogColor;
|
||||
radius: 0.5*mm}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,14 +30,13 @@
|
|||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import QtQuick 2.11
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/js/service.js" as Service
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
import "qrc:/qml/genericqml"
|
||||
|
||||
Rectangle{
|
||||
id:permissionDialog
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
// x: mm
|
||||
width: parent.width-5*mm
|
||||
height:root.height/3
|
||||
|
|
@ -66,7 +65,7 @@ Rectangle{
|
|||
Text{ //cid not working in Friendica 02/2022
|
||||
x:0.5*mm
|
||||
y:0.5*mm
|
||||
color: Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
text: qsTr("Friends")
|
||||
}
|
||||
ListView {
|
||||
|
|
@ -86,7 +85,7 @@ Rectangle{
|
|||
id:contactItem
|
||||
Rectangle{
|
||||
id:contactitemRect
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
width:contactView.width
|
||||
height: 5*mm
|
||||
radius: 0.5*mm
|
||||
|
|
@ -94,10 +93,10 @@ Rectangle{
|
|||
onContactstatusChanged:{
|
||||
if(contactstatus=="positive"){contactitemRect.color="light green"}
|
||||
else if (contactstatus=="negative"){contactitemRect.color= "red"}
|
||||
else{contactitemRect.color= Material.backgroundColor}}
|
||||
border.color:Material.frameColor
|
||||
else{contactitemRect.color= osSettings.backgroundColor}}
|
||||
//border.color:Material.frameColor
|
||||
Text{
|
||||
color: Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
text:contact.screen_name
|
||||
}
|
||||
MouseArea{
|
||||
|
|
@ -126,7 +125,7 @@ Rectangle{
|
|||
}
|
||||
}
|
||||
Text{
|
||||
color: Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
x:contactView.width+2*mm
|
||||
y:0.5*mm
|
||||
text: qsTr("Groups")
|
||||
|
|
@ -155,11 +154,11 @@ Rectangle{
|
|||
onGroupstatusChanged:
|
||||
{if(groupstatus=="positive"){groupitemRect.color="light green"}
|
||||
else if (groupstatus=="negative"){groupitemRect.color= "red"}
|
||||
else{groupitemRect.color= Material.backgroundColor}}
|
||||
color: Material.backgroundColor
|
||||
border.color: Material.frameColor
|
||||
else{groupitemRect.color= osSettings.backgroundColor}}
|
||||
color: osSettings.backgroundColor
|
||||
//border.color: Material.frameColor
|
||||
Text{
|
||||
color: Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
text:group.groupname
|
||||
}
|
||||
MouseArea{
|
||||
|
|
|
|||
|
|
@ -31,12 +31,11 @@
|
|||
|
||||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/qml/genericqml"
|
||||
|
||||
Rectangle {
|
||||
id:searchComponent
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
radius:0.5*mm
|
||||
property bool selfdestroying:false
|
||||
/* anchors.left: parent.left
|
||||
|
|
@ -48,7 +47,7 @@ Rectangle {
|
|||
|
||||
TextInput {
|
||||
id: searchText
|
||||
color: Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
focus: true
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
wrapMode: Text.Wrap
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 2.15
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
|
||||
Dialog {
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@
|
|||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
import "qrc:/js/news.js" as Newsjs
|
||||
import "qrc:/js/service.js" as Service
|
||||
|
|
@ -134,9 +133,9 @@ Page {
|
|||
|
||||
Component { id: contactHeader
|
||||
Rectangle{
|
||||
border.color: Material.backgroundDimColor
|
||||
border.color: osSettings.backgroundDimColor
|
||||
border.width: 1
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
width:contactView.width
|
||||
height: contactView.width<35*root.fontFactor*osSettings.systemFontSize?(profileImage.height+namelabel.height+detailtext.height+7*mm):Math.max(profileImage.height,(buttonflow.height+namelabel.height+detailtext.height))+7*mm
|
||||
property var createdAtDate: new Date(contact.created_at)
|
||||
|
|
@ -319,7 +318,7 @@ Page {
|
|||
height: implicitHeight
|
||||
text:contact.name+" (@"+contact.screen_name+")"
|
||||
wrapMode: Text.Wrap
|
||||
color: Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
font.pointSize: 1.2*osSettings.bigFontSize
|
||||
font.family: "Noto Sans"
|
||||
anchors.top: contactView.width<35*root.fontFactor*osSettings.systemFontSize?profileImage.bottom:buttonflow.bottom
|
||||
|
|
@ -337,7 +336,7 @@ Page {
|
|||
font.family: "Noto Sans"
|
||||
textFormat:Text.RichText
|
||||
wrapMode: Text.Wrap
|
||||
color: Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
text:"<b>"+qsTr("Description")+": </b> "+(Qt.atob(contact.description)!=""?contact.description:"")+"<br> <b>"+qsTr("Location")+":</b> "+contact.location+"<br> <b>"+qsTr("Posts")+":</b> "+contact.statuses_count+
|
||||
"<br> <b>"+qsTr("URL")+":</b> <a href='"+ contact.url+"'>"+contact.url+"</a><br>"+
|
||||
"<b>"+qsTr("Created at")+":</b> "+createdAtDate.toLocaleString(Qt.locale())+"<br>"+
|
||||
|
|
|
|||
|
|
@ -31,15 +31,14 @@
|
|||
|
||||
// List of people from Friendica Activities
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
import "qrc:/qml/genericqml"
|
||||
|
||||
Rectangle {
|
||||
id:activitiesRectangle
|
||||
property var activitymembers
|
||||
color: Material.dialogColor
|
||||
border.color: Material.frameColor
|
||||
color: osSettings.dialogColor
|
||||
//border.color: osSettings.frameColor
|
||||
radius:0.5*mm
|
||||
width:root.width/2
|
||||
height:Math.min(root.height/2,(10*mm+6*activitymembers.length*mm))
|
||||
|
|
@ -61,8 +60,8 @@ Rectangle {
|
|||
Component {
|
||||
id:activitiesContact
|
||||
Rectangle{
|
||||
border.color: Material.frameColor
|
||||
color: Material.backgroundColor
|
||||
//border.color: Material.frameColor
|
||||
color: osSettings.backgroundColor
|
||||
border.width: 1
|
||||
radius:0.5*mm
|
||||
width:parent.width
|
||||
|
|
@ -77,7 +76,7 @@ Rectangle {
|
|||
onStatusChanged: if (contactImage.status == Image.Error) {source="qrc:/images/defaultcontact.jpg"}
|
||||
}
|
||||
Text{
|
||||
color: Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
anchors.left: contactImage.right
|
||||
anchors.margins: 1*mm
|
||||
|
|
|
|||
|
|
@ -30,11 +30,10 @@
|
|||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls.Material 2.12
|
||||
|
||||
Rectangle {
|
||||
id:hashtagRectangle
|
||||
color:Material.dialogColor
|
||||
color: osSettings.dialogColor
|
||||
property alias text: hashtagText.text
|
||||
radius:0.3*mm
|
||||
width:hashtagText.contentWidth+mm
|
||||
|
|
@ -42,7 +41,7 @@ Rectangle {
|
|||
Text{
|
||||
id:hashtagText
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
color: Material.secondaryTextColor
|
||||
color: osSettings.secondaryTextColor
|
||||
anchors.centerIn: parent
|
||||
anchors.margins: 0.5*mm
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,9 +29,8 @@
|
|||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import QtQuick 2.5
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import QtQuick 2.12
|
||||
import QtQuick.Controls 6.3
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
import "qrc:/qml/genericqml"
|
||||
|
||||
|
|
@ -177,7 +176,7 @@ Page{
|
|||
Rectangle{
|
||||
width: Math.max(10*root.fontFactor*osSettings.bigFontSize,uploadImage.width)
|
||||
height:imageUploadView.height-4*root.fontFactor*osSettings.bigFontSize
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
Image{
|
||||
id: uploadImage
|
||||
width: parent.width //root.width/2-mm
|
||||
|
|
@ -196,7 +195,7 @@ Page{
|
|||
anchors.right: uploadImage.right
|
||||
color: "black"
|
||||
opacity: 0.5
|
||||
Text{anchors.centerIn:parent;text: "\uf01e";color: "white"}
|
||||
Text{anchors.centerIn:parent;font.family: fontAwesome.name;text: "\uf01e";color: "white"}
|
||||
MouseArea{
|
||||
anchors.fill:parent;
|
||||
onClicked:{
|
||||
|
|
@ -215,7 +214,7 @@ Page{
|
|||
anchors.left: uploadImage.left
|
||||
color: "black"
|
||||
opacity: 0.5
|
||||
Text{anchors.centerIn:parent;text: "\uf00d";color: "white"}
|
||||
Text{anchors.centerIn:parent;font.family: fontAwesome.name; text: "\uf00d";color: "white"}
|
||||
MouseArea{
|
||||
anchors.fill:parent;
|
||||
onClicked:{
|
||||
|
|
@ -238,7 +237,7 @@ Page{
|
|||
|
||||
Rectangle{
|
||||
id:descriptionRectangle
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
border.color: "grey"
|
||||
anchors.top: uploadImage.bottom
|
||||
anchors.topMargin: mm
|
||||
|
|
@ -262,7 +261,7 @@ Page{
|
|||
BlueButton{
|
||||
width: 5*root.fontFactor*osSettings.bigFontSize
|
||||
height:imageUploadView.height-3*root.fontFactor*osSettings.bigFontSize
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
border.color: "transparent"
|
||||
text:"\u002b"
|
||||
fontSize: 3*osSettings.bigFontSize
|
||||
|
|
|
|||
|
|
@ -31,25 +31,30 @@
|
|||
|
||||
// message.qml
|
||||
// message with buttons
|
||||
import QtQuick 2.4
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Controls 2.15
|
||||
import QtQuick.Window 2.0;
|
||||
import QtQuick.Dialogs 6.4;
|
||||
//import Qt.labs.platform 6.3 as Platform
|
||||
import io.qt.examples.texteditor 1.0;
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
import "qrc:/js/smiley.js" as Smileyjs
|
||||
import "qrc:/js/news.js" as Newsjs
|
||||
import "qrc:/qml/genericqml"
|
||||
import "qrc:/qml/newsqml"
|
||||
|
||||
Rectangle{
|
||||
color:Material.dialogColor
|
||||
width:parent.width
|
||||
height: messageColumn.height+2*mm
|
||||
id:messageSend
|
||||
visible:conversation || (newstab.newstabstatus!="Search")?true:false
|
||||
Window{
|
||||
color: osSettings.backgroundColor
|
||||
width: parent.width
|
||||
height: parent.height//messageColumn.height+2*mm
|
||||
id: messageSend
|
||||
property bool wideScreen : width>height
|
||||
// visible: conversation || (newstab.newstabstatus!="Search")?true:false
|
||||
property string parentId: ""
|
||||
property bool textfocus: false
|
||||
property bool conversation: false
|
||||
//property bool textfocus: false
|
||||
//property bool conversation: false
|
||||
property string reply_to_user:""
|
||||
property string windowstate:""
|
||||
property alias bodyMessage: bodyField.text
|
||||
property var media_ids:[]
|
||||
property var contacts: []
|
||||
|
|
@ -59,15 +64,15 @@ Rectangle{
|
|||
property var group_allow:login.hasOwnProperty("permissions")?login.permissions[2]:[]
|
||||
property var group_deny:login.hasOwnProperty("permissions")?login.permissions[3]:[]
|
||||
|
||||
function directmessagePrepare(friend){
|
||||
messageSend.state="active";
|
||||
reply_to_user=friend.screen_name;
|
||||
receiverLabel.text=friend.screen_name;
|
||||
}
|
||||
// function directmessagePrepare(friend){
|
||||
// messageSend.state="active";
|
||||
// reply_to_user=friend.screen_name;
|
||||
// receiverLabel.text=friend.screen_name;
|
||||
// }
|
||||
|
||||
function sendUrls(urls){
|
||||
attachImage(urls);
|
||||
messageSend.state="active";
|
||||
attachImage(urls);
|
||||
messageSend.state="active";
|
||||
}
|
||||
|
||||
function sendtext(text){
|
||||
|
|
@ -88,24 +93,26 @@ Rectangle{
|
|||
}
|
||||
|
||||
function statusUpdate(title,status,in_reply_to_status_id) {
|
||||
print("status: "+status);
|
||||
//xhr.url= login.server + "/api/statuses/update.json";
|
||||
try{newsBusy.running=true;conversationBusy.running=true}catch(e){}
|
||||
xhr.setAccount(login);
|
||||
xhr.setApi("/api/statuses/update");
|
||||
xhr.setParam("source", "Friendiqa");
|
||||
xhr.setParam("htmlstatus", status);
|
||||
if (parentId!="") {xhr.setParam("in_reply_to_status_id", parentId)};
|
||||
xhr.setParam("status", status);
|
||||
if (parentId!="") {xhr.setParam("in_reply_to_status_id", in_reply_to_status_id)};
|
||||
if (title!=="") {xhr.setParam("title", title)};
|
||||
// if (group_allow.length>0) {xhr.setParam("group_allow", Helperjs.cleanArray(group_allow))};
|
||||
// if (group_deny.length>0) {xhr.setParam("group_deny", Helperjs.cleanArray(group_deny))};
|
||||
// if (contact_allow.length>0) {xhr.setParam("contact_allow", Helperjs.cleanArray(contact_allow))};
|
||||
// if (contact_deny.length>0) {xhr.setParam("contact_deny", Helperjs.cleanArray(contact_deny))};
|
||||
// if (group_allow.length>0) {xhr.setParam("group_allow", Helperjs.cleanArray(group_allow))};
|
||||
// if (group_deny.length>0) {xhr.setParam("group_deny", Helperjs.cleanArray(group_deny))};
|
||||
// if (contact_allow.length>0) {xhr.setParam("contact_allow", Helperjs.cleanArray(contact_allow))};
|
||||
// if (contact_deny.length>0) {xhr.setParam("contact_deny", Helperjs.cleanArray(contact_deny))};
|
||||
if (media_ids.length>0) {
|
||||
xhr.setParam("media_ids", media_ids.join());
|
||||
}
|
||||
xhr.post();
|
||||
Newsjs.storeHashtags(login,db,status,root);
|
||||
media_ids=[]
|
||||
messageSend.close()
|
||||
}
|
||||
|
||||
function dmUpdate(title,text,replyto,screen_name) {
|
||||
|
|
@ -116,20 +123,21 @@ Rectangle{
|
|||
xhr.setParam("screen_name", screen_name);
|
||||
if (parentId!="") {xhr.setParam("replyto", replyto)};
|
||||
xhr.post();
|
||||
messageSend.close()
|
||||
}
|
||||
|
||||
function setParent(newsitemobject){
|
||||
if (newsitemobject!=""){
|
||||
messageSend.state="conversation"
|
||||
messageSend.reply_to_user=newsitemobject.user.screen_name;
|
||||
messageSend.parentId=newsitemobject.id
|
||||
} else {
|
||||
messageSend.state=null;
|
||||
messageSend.reply_to_user="";
|
||||
messageSend.parentId="";
|
||||
bodyField.text="";
|
||||
}
|
||||
}
|
||||
// function setParent(newsitemobject){
|
||||
// if (newsitemobject!=""){
|
||||
// messageSend.state="conversation"
|
||||
// messageSend.reply_to_user=newsitemobject.user.screen_name;
|
||||
// messageSend.parentId=newsitemobject.id
|
||||
// } else {
|
||||
// messageSend.state=null;
|
||||
// messageSend.reply_to_user="";
|
||||
// messageSend.parentId="";
|
||||
// bodyField.text="";
|
||||
// }
|
||||
// }
|
||||
|
||||
function contactmenu(letter){
|
||||
Newsjs.listFriends(login,db,function(contacts){
|
||||
|
|
@ -153,18 +161,51 @@ Rectangle{
|
|||
tagSelector.visible=true
|
||||
});
|
||||
}
|
||||
// Flickable{
|
||||
// anchors.fill: parent
|
||||
// contentHeight: messageColumn.height
|
||||
// boundsBehavior: Flickable.StopAtBounds
|
||||
|
||||
Action {
|
||||
id: quitAction
|
||||
shortcut: StandardKey.Quit
|
||||
onTriggered: messageSend.close()
|
||||
}
|
||||
|
||||
Action {
|
||||
id: copyAction
|
||||
shortcut: StandardKey.Copy
|
||||
onTriggered: bodyField.copy()
|
||||
}
|
||||
|
||||
Action {
|
||||
id: cutAction
|
||||
shortcut: StandardKey.Cut
|
||||
onTriggered: bodyField.cut()
|
||||
}
|
||||
|
||||
Action {
|
||||
id: pasteAction
|
||||
shortcut: StandardKey.Paste
|
||||
onTriggered: bodyField.paste()
|
||||
}
|
||||
|
||||
Action {
|
||||
id: boldAction
|
||||
shortcut: StandardKey.Bold
|
||||
onTriggered: document.bold = !document.bold
|
||||
}
|
||||
|
||||
Action {
|
||||
id: italicAction
|
||||
shortcut: StandardKey.Italic
|
||||
onTriggered: document.italic = !document.italic
|
||||
}
|
||||
|
||||
DropArea{
|
||||
anchors.fill: parent
|
||||
onDropped: {
|
||||
if (messageSend.state==""){messageSend.state="active"}
|
||||
//if (messageSend.state==""){messageSend.state="active"}
|
||||
if (drop.keys.includes('text/uri-list')){
|
||||
var droptext = drop.text.replace(/(\r\n|\n|\r)/gm, ",");
|
||||
imageUploadDialog.visible=true;
|
||||
attachImage(droptext)}
|
||||
attachImage(droptext)}
|
||||
else if (drop.keys.includes('text/html')){
|
||||
bodyField.append(drop.html)}
|
||||
else if (drop.keys.includes('text/plain')){
|
||||
|
|
@ -172,121 +213,71 @@ Rectangle{
|
|||
}
|
||||
}
|
||||
}
|
||||
Column {
|
||||
y:0.5*mm
|
||||
id:messageColumn
|
||||
spacing: 0.5*mm
|
||||
width: parent.width
|
||||
height: 2.6*root.fontFactor*osSettings.bigFontSize+stackTypeDescription.height
|
||||
Label{id:stackTypeDescription
|
||||
width: parent.width
|
||||
horizontalAlignment:Text.AlignHCenter
|
||||
text: !conversation &&newsSwipeview.stacktype?qsTr(newsSwipeview.stacktype):""
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
|
||||
BlueButton{
|
||||
width: root.fontFactor*osSettings.bigFontSize
|
||||
height:stackTypeDescription.height
|
||||
anchors.left: stackTypeDescription.left
|
||||
anchors.leftMargin: 2*root.fontFactor*osSettings.bigFontSize
|
||||
visible: newsSwipeview.currentIndex!=0
|
||||
text:"\uf053"
|
||||
fontColor: Material.hintTextColor
|
||||
border.color: "transparent"
|
||||
color:"transparent"
|
||||
radius:0
|
||||
onClicked: {newsSwipeview.currentIndex=newsSwipeview.currentIndex-1}
|
||||
ScrollView{
|
||||
width: messageSend.width-root.fontFactor*osSettings.bigFontSize
|
||||
height: parent.height
|
||||
clip:true
|
||||
Column {
|
||||
y:0.5*mm
|
||||
id:messageColumn
|
||||
spacing: 0.5*mm
|
||||
width: messageSend.width-2*root.fontFactor*osSettings.bigFontSize
|
||||
TextArea{
|
||||
id:receiverLabel
|
||||
x: mm
|
||||
width: parent.width-2*mm
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
placeholderText:qsTr("to:")
|
||||
text: ""
|
||||
visible:false
|
||||
onTextChanged: {
|
||||
if (text!=""){contactmenu(text)} else {var receiver=getText(0,cursorPosition);contactmenu(receiver+preeditText)}}
|
||||
}
|
||||
|
||||
BlueButton{
|
||||
width: root.fontFactor*osSettings.bigFontSize
|
||||
height:stackTypeDescription.height
|
||||
anchors.right: stackTypeDescription.right
|
||||
anchors.rightMargin: 2*root.fontFactor*osSettings.bigFontSize
|
||||
visible: newsSwipeview.currentIndex!=newsSwipeview.count-1
|
||||
text:"\uf054"
|
||||
fontColor: Material.hintTextColor
|
||||
border.color: "transparent"
|
||||
color:"transparent"
|
||||
radius:0
|
||||
onClicked: {newsSwipeview.currentIndex=newsSwipeview.currentIndex+1}
|
||||
TextField {
|
||||
id: titleField
|
||||
x: mm
|
||||
width: parent.width
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
placeholderText: qsTr("Title (optional)")
|
||||
placeholderTextColor: osSettings.secondaryTextColor
|
||||
visible: false
|
||||
background: Rectangle{
|
||||
color: osSettings.backgroundDimColor
|
||||
radius: 0.5*mm
|
||||
}
|
||||
}
|
||||
}
|
||||
TextArea{
|
||||
id:receiverLabel
|
||||
width: messageColumn.width
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
placeholderText:qsTr("to:")
|
||||
text: ""
|
||||
visible:false
|
||||
onTextChanged: {
|
||||
if (text!=""){contactmenu(text)} else {var receiver=getText(0,cursorPosition);contactmenu(receiver+preeditText)}}
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: titleField
|
||||
x: 0.5*mm
|
||||
width: parent.width-mm
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
placeholderText: qsTr("Title (optional)")
|
||||
visible: false
|
||||
onVisibleChanged: if ((visible==true)&&(conversation==true)){
|
||||
conversationView.contentY=conversationView.contentY+titleField.height
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle{
|
||||
color: Material.backgroundColor
|
||||
radius: 0.5*mm
|
||||
visible:(conversation || (newsSwipeview.stacktype!="Notifications"))
|
||||
x:mm
|
||||
width: parent.width-2*mm
|
||||
height:Math.max(bodyField.contentHeight+4*mm,2.5*root.fontFactor*osSettings.bigFontSize)
|
||||
// Rectangle{
|
||||
// color: osSettings.backgroundColor
|
||||
// radius: 0.5*mm
|
||||
// x:mm
|
||||
// width: parent.width-2*mm
|
||||
// height:Math.max(bodyField.contentHeight+4*mm,2.5*root.fontFactor*osSettings.bigFontSize)
|
||||
|
||||
TextArea {
|
||||
id: bodyField
|
||||
property string contactprefix:""
|
||||
property string placeholder: osSettings.osType=="Linux"? qsTr(" Drop your Content here."):""
|
||||
anchors.fill: parent
|
||||
//anchors.fill: parent
|
||||
x:mm
|
||||
height:Math.max(bodyField.contentHeight+4*mm,2.5*root.fontFactor*osSettings.bigFontSize)
|
||||
width: parent.width
|
||||
background: Rectangle{
|
||||
color: osSettings.backgroundDimColor
|
||||
radius: 0.5*mm
|
||||
}
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
font.family: "Noto Sans"
|
||||
wrapMode: Text.Wrap
|
||||
selectByMouse: true
|
||||
placeholderText: conversation?"": (qsTr("What's on your mind?")+placeholder)
|
||||
textFormat: TextEdit.RichText
|
||||
onLineCountChanged: {
|
||||
if (messageSend.ListView.view==null){
|
||||
if (newsitem.ListView.view==null){}
|
||||
else {newsitem.ListView.view.contentY=newsitem.ListView.view.contentY+root.fontFactor*osSettings.systemFontSize}
|
||||
}
|
||||
if(conversation==true){
|
||||
conversationView.contentY=conversationView.contentY+root.fontFactor*osSettings.systemFontSize
|
||||
}
|
||||
else{
|
||||
messageSend.ListView.view.contentY=messageSend.ListView.view.contentY+root.fontFactor*osSettings.systemFontSize
|
||||
}
|
||||
}
|
||||
persistentSelection: true
|
||||
placeholderText: (qsTr("What's on your mind?")+placeholder)
|
||||
placeholderTextColor: osSettings.secondaryTextColor
|
||||
textFormat: TextEdit.MarkdownText
|
||||
onLinkActivated:{Qt.openUrlExternally(link)}
|
||||
onActiveFocusChanged:{
|
||||
if (activeFocus==true){
|
||||
if (messageSend.ListView.view==null){
|
||||
if ((typeof newsitem == 'undefined') || (newsitem.ListView.view==null)){}
|
||||
else {
|
||||
newsitem.ListView.view.contentY=newsitem.ListView.view.contentY+newsitem.height/2}
|
||||
}
|
||||
else if (conversation==true){
|
||||
if(parentId==""){setParent(conversationModel.get(0).newsitemobject);}
|
||||
messageSend.state="conversation";
|
||||
try{conversationView.contentY=conversationView.contentY+20*mm}catch(e){}
|
||||
} else if (textfocus==false){
|
||||
messageSend.state="active";
|
||||
messageSend.ListView.view.positionViewAtBeginning();
|
||||
}
|
||||
else{
|
||||
messageSend.ListView.view.contentY=messageSend.ListView.view.contentY+8*mm
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
onTextChanged:{
|
||||
if (text!=""){
|
||||
var plaintext=getText(0,cursorPosition)
|
||||
|
|
@ -302,200 +293,317 @@ Rectangle{
|
|||
}else {contactSelector.visible=false}
|
||||
}else{contactSelector.visible=false}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ListView{
|
||||
id:contactSelector
|
||||
visible: false
|
||||
z:3
|
||||
x:2*root.fontFactor*osSettings.bigFontSize
|
||||
width: parent.width-2.2*root.fontFactor*osSettings.bigFontSize
|
||||
height: messageSend.height/2
|
||||
model:contactModel
|
||||
function processContactSelection(contact){
|
||||
if(Helperjs.getCount(db,login,"contacts","screen_name",contact.screen_name)>1){
|
||||
contact.screen_name=contact.screen_name+"+"+contacts.cid
|
||||
MouseArea {
|
||||
acceptedButtons: Qt.RightButton
|
||||
anchors.fill: parent
|
||||
onClicked: contextMenu.open()
|
||||
}
|
||||
if (newsSwipeview.stacktype=='DirectMessages'){
|
||||
receiverLabel.text=contact.screen_name;
|
||||
reply_to_user=contact.screen_name
|
||||
} else {
|
||||
bodyField.remove(bodyField.getText(0,bodyField.cursorPosition).lastIndexOf(bodyField.contactprefix,bodyField.cursorPosition),bodyField.cursorPosition);
|
||||
bodyField.insert(bodyField.cursorPosition, bodyField.contactprefix+contact.screen_name+" ");
|
||||
bodyField.cursorPosition=bodyField.cursorPosition+contact.screen_name.length+1
|
||||
}
|
||||
Menu {
|
||||
id: contextMenu
|
||||
MenuItem {
|
||||
text: qsTr("Copy")
|
||||
enabled: bodyField.selectedText
|
||||
action: copyAction
|
||||
//onTriggered: bodyField.copy()
|
||||
}
|
||||
MenuItem {
|
||||
text: qsTr("Cut")
|
||||
enabled: bodyField.selectedText
|
||||
action: cutAction
|
||||
//onTriggered: bodyField.cut()
|
||||
}
|
||||
MenuItem {
|
||||
text: qsTr("Paste")
|
||||
enabled: bodyField.canPaste
|
||||
action: pasteAction
|
||||
//onTriggered: bodyField.paste()
|
||||
}
|
||||
MenuItem {
|
||||
text: qsTr("Text")
|
||||
enabled: bodyField.selectedText
|
||||
onTriggered: print(bodyField.getFormattedText(bodyField.selectionStart,bodyField.selectionEnd))
|
||||
}
|
||||
//receiverLabel.text=contact.screen_name;
|
||||
contactSelector.visible=false
|
||||
}
|
||||
delegate: ContactComponent { }
|
||||
}
|
||||
ListModel{id:contactModel}
|
||||
|
||||
ListView{
|
||||
id: tagSelector
|
||||
visible: false
|
||||
z:3
|
||||
x:2*root.fontFactor*osSettings.bigFontSize
|
||||
width: parent.width-2.2*root.fontFactor*osSettings.bigFontSize
|
||||
height: messageSend.height/2
|
||||
model:tagModel
|
||||
clip: true
|
||||
spacing: 0
|
||||
function processTagSelection(hashtag){
|
||||
bodyField.insert(bodyField.cursorPosition, hashtag+" ");
|
||||
bodyField.cursorPosition=bodyField.cursorPosition+hashtag.length+1
|
||||
tagSelector.visible=false
|
||||
}
|
||||
delegate: MButton {text:tag;onClicked: tagSelector.processTagSelection(tag)}
|
||||
}
|
||||
ListModel{id:tagModel}
|
||||
|
||||
Row{
|
||||
id:buttonRow
|
||||
visible:false
|
||||
spacing: mm
|
||||
height: 2.5*root.fontFactor*osSettings.bigFontSize
|
||||
x: 0.5*mm
|
||||
|
||||
// MButton{id:permButton //Permissions not working in Friendica 02/2022
|
||||
// visible: !conversation && (newsSwipeview.stacktype!=="DirectMessages")
|
||||
// height: 2*root.fontFactor*osSettings.bigFontSize
|
||||
// width: 2*root.fontFactor*osSettings.bigFontSize
|
||||
// text: ((contact_allow.length==0)&&(contact_deny.length==0)&&(group_allow.length==0)&&(group_deny.length==0))?"\uf09c":"\uf023"
|
||||
// onClicked: { if (permissionDialog.visible==false){permissionDialog.visible=true} else{permissionDialog.visible=false}}
|
||||
// }
|
||||
|
||||
MButton{
|
||||
id:smileyButton
|
||||
text: "\uf118"
|
||||
height: 2*root.fontFactor*osSettings.bigFontSize
|
||||
width: 2*root.fontFactor*osSettings.bigFontSize
|
||||
onClicked: {if (smileyDialog.visible==false){smileyDialog.visible=true} else{smileyDialog.visible=false}}
|
||||
DocumentHandler { id: document
|
||||
document: bodyField.textDocument
|
||||
cursorPosition: bodyField.cursorPosition
|
||||
selectionStart: bodyField.selectionStart
|
||||
selectionEnd: bodyField.selectionEnd
|
||||
property alias bold: document.font.bold
|
||||
property alias italic: document.font.italic
|
||||
property alias strikeout: document.font.strikeout
|
||||
//onError: function (message) { errorDialog.text = message errorDialog.open() }
|
||||
}
|
||||
|
||||
MButton{
|
||||
id:hastagButton
|
||||
text: "\uf292"
|
||||
height: 2*root.fontFactor*osSettings.bigFontSize
|
||||
width: 2*root.fontFactor*osSettings.bigFontSize
|
||||
onClicked: {if (tagSelector.visible==false){hashtagmenu()} else{tagSelector.visible=false}}
|
||||
}
|
||||
MButton{
|
||||
id:imagesButton
|
||||
visible:(newsSwipeview.stacktype!="DirectMessages")
|
||||
text: "\uf03e"
|
||||
height: 2*root.fontFactor*osSettings.bigFontSize
|
||||
width: 2*root.fontFactor*osSettings.bigFontSize
|
||||
onClicked: {
|
||||
if (imageUploadDialog.visible==false){
|
||||
imageUploadDialog.visible=true;
|
||||
imageUploadDialog.attach()
|
||||
|
||||
ListView{
|
||||
id:contactSelector
|
||||
visible: false
|
||||
z:3
|
||||
x:2*root.fontFactor*osSettings.bigFontSize
|
||||
width: parent.width-2.2*root.fontFactor*osSettings.bigFontSize
|
||||
height: messageSend.height/2
|
||||
model:contactModel
|
||||
function processContactSelection(contact){
|
||||
if(Helperjs.getCount(db,login,"contacts","screen_name",contact.screen_name)>1){
|
||||
contact.screen_name=contact.screen_name+"+"+contacts.cid
|
||||
}
|
||||
else{imageUploadDialog.visible=false}}
|
||||
if (newsSwipeview.stacktype=='DirectMessages'){
|
||||
receiverLabel.text=contact.screen_name;
|
||||
reply_to_user=contact.screen_name
|
||||
} else {
|
||||
bodyField.remove(bodyField.getText(0,bodyField.cursorPosition).lastIndexOf(bodyField.contactprefix,bodyField.cursorPosition),bodyField.cursorPosition);
|
||||
bodyField.insert(bodyField.cursorPosition, bodyField.contactprefix+contact.screen_name+" ");
|
||||
bodyField.cursorPosition=bodyField.cursorPosition+contact.screen_name.length+1
|
||||
}
|
||||
//receiverLabel.text=contact.screen_name;
|
||||
contactSelector.visible=false
|
||||
}
|
||||
delegate: ContactComponent { }
|
||||
}
|
||||
ListModel{id:contactModel}
|
||||
|
||||
MButton {
|
||||
id: cancelButton
|
||||
height: 2*root.fontFactor*osSettings.bigFontSize
|
||||
width: 2*root.fontFactor*osSettings.bigFontSize
|
||||
text: "\uf057"
|
||||
onClicked: {
|
||||
if (textfocus==true){messageSend.destroy()}
|
||||
else{
|
||||
bodyField.text="";
|
||||
messageSend.state="";
|
||||
permissionDialog.visible=false;
|
||||
smileyDialog.visible=false;
|
||||
imageUploadDialog.visible=false;
|
||||
receiverLabel.visible=false;
|
||||
reply_to_user="";
|
||||
media_ids=[]
|
||||
ListView{
|
||||
id: tagSelector
|
||||
visible: false
|
||||
z:3
|
||||
x:2*root.fontFactor*osSettings.bigFontSize
|
||||
width: parent.width-2.2*root.fontFactor*osSettings.bigFontSize
|
||||
height: messageSend.height/2
|
||||
model:tagModel
|
||||
clip: true
|
||||
spacing: 0
|
||||
function processTagSelection(hashtag){
|
||||
bodyField.insert(bodyField.cursorPosition, hashtag+" ");
|
||||
bodyField.cursorPosition=bodyField.cursorPosition+hashtag.length+1
|
||||
tagSelector.visible=false
|
||||
}
|
||||
delegate: MButton {text:tag;onClicked: tagSelector.processTagSelection(tag)}
|
||||
}
|
||||
ListModel{id:tagModel}
|
||||
Row{
|
||||
id:formatRow
|
||||
visible: wideScreen
|
||||
spacing: mm
|
||||
height: 3.5*root.fontFactor*osSettings.bigFontSize
|
||||
x: 0.5*mm
|
||||
MButton {
|
||||
id: boldButton
|
||||
text: "\uf032" // icon-bold
|
||||
ToolTip.visible: pressed || hovered
|
||||
ToolTip.text: qsTr("Bold")
|
||||
focusPolicy: Qt.NoFocus
|
||||
// Don't want to close the virtual keyboard when this is clicked.
|
||||
// focusPolicy: Qt.NoFocus
|
||||
// checkable: true
|
||||
// checked: document.bold
|
||||
onClicked: {
|
||||
document.bold = !document.bold;
|
||||
bodyField.forceActiveFocus()
|
||||
}
|
||||
}
|
||||
MButton {
|
||||
id: italicButton
|
||||
text: "\uf033" // icon-italic
|
||||
ToolTip.visible: pressed || hovered
|
||||
ToolTip.text: qsTr("Italic")
|
||||
focusPolicy: Qt.NoFocus
|
||||
// focusPolicy: Qt.NoFocus
|
||||
// checkable: true
|
||||
// checked: document.italic
|
||||
onClicked: {document.italic = !document.italic;bodyField.forceActiveFocus()}
|
||||
}
|
||||
|
||||
MButton {
|
||||
id: liststyleButton
|
||||
text: "\uf03a" // icon-align-justify
|
||||
ToolTip.visible: pressed || hovered
|
||||
ToolTip.text: qsTr("Create list")
|
||||
// focusPolicy: Qt.NoFocus
|
||||
// checkable: true
|
||||
// checked: document.alignment == Qt.AlignJustify
|
||||
onClicked: {document.liststyle = !document.liststyle;bodyField.forceActiveFocus()}
|
||||
}
|
||||
MButton {
|
||||
id: codeblockButton
|
||||
text: "\uf121" // icon-code
|
||||
ToolTip.visible: pressed || hovered
|
||||
ToolTip.text: qsTr("Format as code")
|
||||
// focusPolicy: Qt.NoFocus
|
||||
// checkable: true
|
||||
// checked: document.alignment == Qt.AlignJustify
|
||||
onClicked: {document.codeblock = !document.codeblock;bodyField.forceActiveFocus()}
|
||||
}
|
||||
MButton {
|
||||
id: plainButton
|
||||
text: bodyField.textFormat==TextEdit.PlainText?qsTr("Rendered"):qsTr("MD") // icon-code
|
||||
ToolTip.visible: pressed || hovered
|
||||
ToolTip.text: qsTr("Show Markdown code")
|
||||
// focusPolicy: Qt.NoFocus
|
||||
// checkable: true
|
||||
// checked: document.alignment == Qt.AlignJustify
|
||||
onClicked: {
|
||||
if(bodyField.textFormat==TextEdit.PlainText){
|
||||
bodyField.textFormat=TextEdit.MarkdownText;}
|
||||
else {bodyField.textFormat=TextEdit.PlainText}
|
||||
bodyField.forceActiveFocus()
|
||||
}
|
||||
}
|
||||
}
|
||||
MButton {
|
||||
id: sendButton
|
||||
height: 2*root.fontFactor*osSettings.bigFontSize
|
||||
width: 2*root.fontFactor*osSettings.bigFontSize
|
||||
text: "\uf1d9"
|
||||
onClicked: {
|
||||
var title=titleField.text.replace("\"","\'");
|
||||
var body=bodyField.getFormattedText(0,bodyField.length);
|
||||
var dmbody=bodyField.getText(0,bodyField.length);
|
||||
if (conversation || newsSwipeview.stacktype!=="DirectMessages"){
|
||||
if (parentId!=""){
|
||||
statusUpdate(title,dmbody,parentId)
|
||||
}else{
|
||||
statusUpdate(title,body,parentId)}
|
||||
}else {
|
||||
if (reply_to_user!=""){dmUpdate(title,dmbody,parentId,reply_to_user)}
|
||||
else{Helperjs.showMessage(qsTr("Error"),qsTr("No receiver supplied!"),root)}
|
||||
}
|
||||
if (conversation==true){
|
||||
newstab.newstabstatus=root.globaloptions.newsViewType; rootstackView.pop(null)
|
||||
PermissionDialog{id:permissionDialog;x:mm;visible: false}
|
||||
SmileyDialog{id:smileyDialog;x:mm;visible: false}
|
||||
MessageImageUploadDialog{id:imageUploadDialog;visible: false}
|
||||
Row{
|
||||
id:buttonRow
|
||||
visible: true
|
||||
spacing: mm
|
||||
height: 3.5*root.fontFactor*osSettings.bigFontSize
|
||||
x: 0.5*mm
|
||||
|
||||
// MButton{id:permButton //Permissions not working in Friendica 02/2022
|
||||
// visible: !conversation && (newsSwipeview.stacktype!=="DirectMessages")
|
||||
// height: 2*root.fontFactor*osSettings.bigFontSize
|
||||
// width: 2*root.fontFactor*osSettings.bigFontSize
|
||||
// text: ((contact_allow.length==0)&&(contact_deny.length==0)&&(group_allow.length==0)&&(group_deny.length==0))?"\uf09c":"\uf023"
|
||||
// onClicked: { if (permissionDialog.visible==false){permissionDialog.visible=true} else{permissionDialog.visible=false}}
|
||||
// }
|
||||
|
||||
MButton{
|
||||
id:smileyButton
|
||||
text: "\uf118"
|
||||
ToolTip.visible: pressed || hovered
|
||||
ToolTip.text: qsTr("Insert smiley")
|
||||
height: 3*root.fontFactor*osSettings.bigFontSize
|
||||
width: 3*root.fontFactor*osSettings.bigFontSize
|
||||
onClicked: {if (smileyDialog.visible==false){smileyDialog.visible=true} else{smileyDialog.visible=false}}
|
||||
}
|
||||
|
||||
MButton{
|
||||
id:hastagButton
|
||||
text: "\uf292"
|
||||
ToolTip.visible: pressed || hovered
|
||||
ToolTip.text: qsTr("Insert previous hashtag")
|
||||
height: 3*root.fontFactor*osSettings.bigFontSize
|
||||
width: 3*root.fontFactor*osSettings.bigFontSize
|
||||
onClicked: {if (tagSelector.visible==false){hashtagmenu()} else{tagSelector.visible=false}}
|
||||
}
|
||||
MButton{
|
||||
id:imagesButton
|
||||
visible:(newsSwipeview.stacktype!="DirectMessages")
|
||||
text: "\uf03e"
|
||||
ToolTip.visible: pressed || hovered
|
||||
ToolTip.text: qsTr("Insert images")
|
||||
height: 3*root.fontFactor*osSettings.bigFontSize
|
||||
width: 3*root.fontFactor*osSettings.bigFontSize
|
||||
onClicked: {
|
||||
if (imageUploadDialog.visible==false){
|
||||
imageUploadDialog.visible=true;
|
||||
imageUploadDialog.attach()
|
||||
}
|
||||
else{imageUploadDialog.visible=false}}
|
||||
}
|
||||
|
||||
MButton {
|
||||
id: cancelButton
|
||||
ToolTip.visible: pressed || hovered
|
||||
ToolTip.text: qsTr("Cancel message")
|
||||
height: 3*root.fontFactor*osSettings.bigFontSize
|
||||
width: 3*root.fontFactor*osSettings.bigFontSize
|
||||
text: "\uf057"
|
||||
onClicked: {messageSend.close()}
|
||||
}
|
||||
MButton {
|
||||
id: formatButton
|
||||
ToolTip.visible: pressed || hovered
|
||||
ToolTip.text: qsTr("Format message")
|
||||
height: 3*root.fontFactor*osSettings.bigFontSize
|
||||
width: 3*root.fontFactor*osSettings.bigFontSize
|
||||
text: "\uf031"
|
||||
onClicked: {formatRow.visible?formatRow.visible=false:formatRow.visible=true}
|
||||
}
|
||||
MButton {
|
||||
id: sendButton
|
||||
ToolTip.visible: pressed || hovered
|
||||
ToolTip.text: qsTr("Send message")
|
||||
height: 3*root.fontFactor*osSettings.bigFontSize
|
||||
width: 3*root.fontFactor*osSettings.bigFontSize
|
||||
text: "\uf1d9"
|
||||
onClicked: {
|
||||
var title=titleField.text.replace("\"","\'");
|
||||
var body=bodyField.getFormattedText(0,bodyField.length);
|
||||
var dmbody=bodyField.getText(0,bodyField.length);
|
||||
if (windowstate=="directmessage"){
|
||||
if (reply_to_user!=""){dmUpdate(title,dmbody,parentId,reply_to_user)}
|
||||
else{Helperjs.showMessage(qsTr("Error"),qsTr("No receiver supplied!"),root)}
|
||||
|
||||
}else {
|
||||
body=body.replace(/\*\*/g,"__")
|
||||
statusUpdate(title,body,parentId)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
PermissionDialog{id:permissionDialog;x:mm;visible: false}
|
||||
SmileyDialog{id:smileyDialog;x:mm;visible: false}
|
||||
MessageImageUploadDialog{id:imageUploadDialog;visible: false}
|
||||
}
|
||||
Component.onCompleted:{
|
||||
root.replySignal.connect(setParent);
|
||||
root.directmessageSignal.connect(directmessagePrepare);
|
||||
if(parentId!="" &&reply_to_user!=""){
|
||||
receiverLabel.text=reply_to_user;
|
||||
}
|
||||
// root.replySignal.connect(setParent);
|
||||
// root.directmessageSignal.connect(directmessagePrepare);
|
||||
root.uploadSignal.connect(sendUrls);
|
||||
root.sendtextSignal.connect(sendtext);
|
||||
if (textfocus==true){bodyField.forceActiveFocus()}
|
||||
// if (textfocus==true){bodyField.forceActiveFocus()}
|
||||
}
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: "active"
|
||||
PropertyChanges {
|
||||
target: messageColumn; height: implicitHeight
|
||||
}
|
||||
PropertyChanges {
|
||||
target: buttonRow; visible:true
|
||||
}
|
||||
PropertyChanges {
|
||||
target: titleField; visible:(newsSwipeview.stacktype!="DirectMessages")
|
||||
}
|
||||
PropertyChanges {
|
||||
target: receiverLabel; visible:(newsSwipeview.stacktype=="DirectMessages");
|
||||
}
|
||||
},
|
||||
State {
|
||||
name: "conversation"
|
||||
PropertyChanges {
|
||||
target: messageColumn; height: implicitHeight
|
||||
}
|
||||
PropertyChanges {
|
||||
target: buttonRow; visible:true
|
||||
}
|
||||
PropertyChanges {
|
||||
target: titleField; visible:(!conversation&&newsSwipeview.stacktype!="DirectMessages")
|
||||
}
|
||||
},
|
||||
StateGroup{
|
||||
state: windowstate
|
||||
states: [
|
||||
State {
|
||||
name: "active"
|
||||
PropertyChanges {
|
||||
target: messageColumn; height: implicitHeight
|
||||
}
|
||||
PropertyChanges {
|
||||
target: titleField; visible: true
|
||||
}
|
||||
|
||||
State {
|
||||
name: "reply"
|
||||
PropertyChanges {
|
||||
target: messageColumn; height: implicitHeight
|
||||
},
|
||||
State {
|
||||
name: "directmessage"
|
||||
PropertyChanges {
|
||||
target: messageColumn; height: implicitHeight
|
||||
}
|
||||
PropertyChanges {
|
||||
target: formatRow; visible: false
|
||||
}
|
||||
PropertyChanges {
|
||||
target: titleField; visible: false
|
||||
}
|
||||
PropertyChanges {
|
||||
target: receiverLabel; visible: true;
|
||||
}
|
||||
PropertyChanges {
|
||||
target: imagesButton; visible: false
|
||||
}
|
||||
PropertyChanges {
|
||||
target: formatButton; visible: false
|
||||
} },
|
||||
|
||||
State {
|
||||
name: "reply"
|
||||
PropertyChanges {
|
||||
target: messageColumn; height: implicitHeight
|
||||
}
|
||||
PropertyChanges {
|
||||
target: titleField; visible: false
|
||||
}
|
||||
PropertyChanges {
|
||||
target: bodyField; placeholderText:"";focus:true
|
||||
}
|
||||
}
|
||||
PropertyChanges {
|
||||
target: buttonRow; visible:true
|
||||
}
|
||||
PropertyChanges {
|
||||
target: titleField; visible:false
|
||||
}
|
||||
PropertyChanges {
|
||||
target: bodyField; placeholderText:"";focus:true
|
||||
}
|
||||
PropertyChanges {
|
||||
target: stackTypeDescription; visible:false
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,12 +30,12 @@
|
|||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls.Material 2.12
|
||||
|
||||
Rectangle{
|
||||
id: moreComments
|
||||
width: parent.width
|
||||
height: 5*mm
|
||||
color:Material.background//"white"
|
||||
color:osSettings.backgroundColor
|
||||
property int comments:0
|
||||
// border.color:"grey"
|
||||
// border.width:1
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@
|
|||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/qml/genericqml"
|
||||
|
||||
Page{
|
||||
|
|
@ -66,7 +65,7 @@ Page{
|
|||
anchors.topMargin: 1*mm
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: 1*mm
|
||||
color: Material.dialogColor
|
||||
color: osSettings.dialogColor
|
||||
text: "\uf057"
|
||||
onClicked: {
|
||||
if (rootstackView.depth>1){
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
import QtQuick 2.12
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/js/news.js" as Newsjs
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
import "qrc:/js/service.js" as Service
|
||||
|
|
@ -40,11 +39,12 @@ Rectangle{
|
|||
id: newsStack
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
property string updateMethodNews: "refresh"
|
||||
property var allchats: ({})
|
||||
property int lastnewsid:0
|
||||
property string newstabstatus: ""
|
||||
property bool expectScreenUpdate: false
|
||||
|
||||
function newstypeHandling(newstype){
|
||||
try{newsBusy.running=true}catch(e){print(e)};
|
||||
|
|
@ -69,21 +69,25 @@ Rectangle{
|
|||
newsStack.updateMethodNews="refresh";
|
||||
newstab.newstabstatus="Favorites";
|
||||
Service.updateView("Favorites");
|
||||
expectScreenUpdate=true;
|
||||
break;
|
||||
case "replies":
|
||||
newsStack.updateMethodNews="refresh";
|
||||
newstab.newstabstatus="Replies";
|
||||
Service.updateView("Replies");
|
||||
expectScreenUpdate=true;
|
||||
break;
|
||||
case "publictimeline":
|
||||
newsStack.updateMethodNews="refresh";
|
||||
newstab.newstabstatus="Public Timeline";
|
||||
Service.updateView("Public Timeline");
|
||||
expectScreenUpdate=true;
|
||||
break;
|
||||
case "groupnews":
|
||||
newsStack.updateMethodNews="refresh";
|
||||
newstab.newstabstatus="Groupnews";
|
||||
Service.showGroups();
|
||||
expectScreenUpdate=true;
|
||||
break;
|
||||
case "search":
|
||||
newsView.anchors.topMargin=7*mm;
|
||||
|
|
@ -109,6 +113,7 @@ Rectangle{
|
|||
else if (newsSwipeview.stacktype=="Notifications"){
|
||||
Service.updateView("Notifications")
|
||||
}
|
||||
expectScreenUpdate=true;
|
||||
break;
|
||||
default:
|
||||
if (newstab.newstabstatus=="Timeline" || newstabstatus=="Timeline"){
|
||||
|
|
@ -126,6 +131,7 @@ Rectangle{
|
|||
else if (newsSwipeview.stacktype=="Notifications"){
|
||||
Service.updateView("Notifications")
|
||||
}
|
||||
expectScreenUpdate=true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -149,7 +155,9 @@ Rectangle{
|
|||
xhr.setAccount(login);
|
||||
xhr.setApi("/api/search");
|
||||
xhr.setParam("q",term)
|
||||
xhr.get();}
|
||||
xhr.get();
|
||||
expectScreenUpdate=true;
|
||||
}
|
||||
newsView.anchors.topMargin=mm
|
||||
}
|
||||
|
||||
|
|
@ -201,6 +209,7 @@ Rectangle{
|
|||
|
||||
try{xhr.setParam("max_id",newsModel.get(newsModel.count-1).newsitemobject.id-1);}catch(e){}
|
||||
xhr.get()
|
||||
expectScreenUpdate=true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -232,6 +241,7 @@ Rectangle{
|
|||
target:xhr
|
||||
function onError(data,url,api,code){
|
||||
newsBusy.running=false;
|
||||
expectScreenUpdate=false;
|
||||
}
|
||||
function onSuccess(data,api){
|
||||
const newsApiArray=["/api/statuses/friends_timeline",
|
||||
|
|
@ -249,9 +259,11 @@ Rectangle{
|
|||
"/api/statuses/update",
|
||||
"/api/direct_messages/new"
|
||||
];
|
||||
if(newsApiArray.includes(api)){
|
||||
if(newsApiArray.includes(api) && expectScreenUpdate==true){
|
||||
expectScreenUpdate=false;
|
||||
Service.processNews(api,data)
|
||||
root.replySignal("")
|
||||
expectScreenUpdate=false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -261,8 +273,11 @@ Rectangle{
|
|||
newsBusy.running=false;
|
||||
}
|
||||
function onSuccess(api){
|
||||
loadDBNews();
|
||||
newsBusy.running=false;
|
||||
if(expectScreenUpdate){
|
||||
loadDBNews();
|
||||
newsBusy.running=false;
|
||||
expectScreenUpdate=false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -286,6 +301,7 @@ Rectangle{
|
|||
else if (newsSwipeview.stacktype=="Replies"){
|
||||
Service.updateView("Replies")
|
||||
}
|
||||
expectScreenUpdate=true;
|
||||
root.replySignal("")
|
||||
}
|
||||
}
|
||||
|
|
@ -294,12 +310,12 @@ Rectangle{
|
|||
Component { id:footerComponent
|
||||
Rectangle{
|
||||
border.color: "#EEEEEE"
|
||||
color: Material.dialogColor
|
||||
color: osSettings.dialogColor
|
||||
border.width: 1
|
||||
width:newsView.width
|
||||
height:6*mm
|
||||
Text{
|
||||
color: Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
anchors.centerIn: parent
|
||||
text:qsTr("More")
|
||||
|
|
@ -308,6 +324,7 @@ Rectangle{
|
|||
anchors.fill:parent
|
||||
onClicked:{
|
||||
if (newsModel.count==0){
|
||||
expectScreenUpdate=true;
|
||||
if (newsSwipeview.stacktype=="Home"){
|
||||
Service.updateView(newstab.newstabstatus)
|
||||
}
|
||||
|
|
@ -334,11 +351,11 @@ Rectangle{
|
|||
property bool viewdraggedpositive: false
|
||||
property string viewtype: "news"
|
||||
width: parent.width
|
||||
height: parent.height-3*mm
|
||||
height: parent.height//-3*mm
|
||||
anchors.margins: 0.5*mm
|
||||
clip: true
|
||||
spacing: 0
|
||||
header:MessageSend{id:messagesend;onHeightChanged: {if(state=="active"){newsView.positionViewAtBeginning()}}}
|
||||
//header:MessageSend{id:messagesend;onHeightChanged: {if(state=="active"){newsView.positionViewAtBeginning()}}}
|
||||
footer: footerComponent
|
||||
model: newsModel
|
||||
delegate: Newsitem{}
|
||||
|
|
@ -397,18 +414,22 @@ Rectangle{
|
|||
showNews(news)});
|
||||
}
|
||||
} else {
|
||||
expectScreenUpdate=true;
|
||||
Service.updateView(currentnewstabstatus,currentlastnews)
|
||||
}
|
||||
});
|
||||
}
|
||||
else if (newsSwipeview.stacktype=="DirectMessages"){
|
||||
Service.updateView("Direct Messages")
|
||||
expectScreenUpdate=true;
|
||||
}
|
||||
else if (newsSwipeview.stacktype=="Notifications"){
|
||||
Service.updateView("Notifications")
|
||||
expectScreenUpdate=true;
|
||||
}
|
||||
else if (newsSwipeview.stacktype=="Replies"){
|
||||
Service.updateView("Replies")
|
||||
expectScreenUpdate=true;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,18 +29,18 @@
|
|||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import QtQuick 2.11
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Controls 6.3
|
||||
import "qrc:/qml/newsqml"
|
||||
import "qrc:/qml/genericqml"
|
||||
import "qrc:/js/news.js" as Newsjs
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
import "qrc:/js/service.js" as Service
|
||||
|
||||
Rectangle{
|
||||
Page{
|
||||
id:newstabitem
|
||||
width:rootstack.width
|
||||
height: rootstack.height-8*mm
|
||||
height: rootstack.height
|
||||
|
||||
Timer {id:contacttimer; interval: 50; running: false; repeat: false
|
||||
onTriggered: {
|
||||
|
|
@ -85,48 +85,66 @@ Rectangle{
|
|||
function getActivitiesView(newsitemobject){
|
||||
var likeText="";var dislikeText="";var attendyesText="";var attendnoText="";var attendmaybeText=""; var self={};
|
||||
try{if (newsitemobject.messagetype==0&&newsitemobject.hasOwnProperty('friendica_activities')){
|
||||
if (newsitemobject.friendica_activities.like.length>0){
|
||||
if (newsitemobject.friendica_activities.like.length==1){likeText= newsitemobject.friendica_activities.like[0].name+" "+ qsTr("likes this.")}
|
||||
else {likeText= newsitemobject.friendica_activities.like.length+" "+ qsTr("like this.")}
|
||||
}
|
||||
if (newsitemobject.friendica_activities.dislike.length>0){
|
||||
if (newsitemobject.friendica_activities.dislike.length==1){dislikeText= newsitemobject.friendica_activities.dislike[0].name+" "+ qsTr("doesn't like this.")}
|
||||
else {dislikeText= newsitemobject.friendica_activities.dislike.length+" "+ qsTr("don't like this.")}
|
||||
}
|
||||
if (newsitemobject.friendica_activities.attendyes.length>0){
|
||||
if (newsitemobject.friendica_activities.attendyes.length==1){attendyesText=newsitemobject.friendica_activities.attendyes[0].name+" "+ qsTr("will attend.")}
|
||||
else {attendyesText= newsitemobject.friendica_activities.attendyes.length+" "+ qsTr("persons will attend.")}
|
||||
}
|
||||
if (newsitemobject.friendica_activities.attendno.length>0){
|
||||
if (newsitemobject.friendica_activities.attendno.length==1){attendnoText= newsitemobject.friendica_activities.attendno[0].name+" "+ qsTr("will not attend.")}
|
||||
else {attendnoText= newsitemobject.friendica_activities.attendno.length+" "+ qsTr("persons will not attend.")}
|
||||
}
|
||||
if (newsitemobject.friendica_activities.attendmaybe.length>0){
|
||||
if (newsitemobject.friendica_activities.attendmaybe.length==1){attendmaybeText= newsitemobject.friendica_activities.attendmaybe[0].name+" "+ qsTr("may attend.")}
|
||||
else {attendmaybeText= newsitemobject.friendica_activities.attendmaybe.length+" "+ qsTr("persons may attend.")}
|
||||
}
|
||||
//var friendica_activities_self=JSON.parse(newsitemobject.friendica_activities_self);
|
||||
if (newsitemobject.friendica_activities.like.length>0){
|
||||
if (newsitemobject.friendica_activities.like.length==1){likeText= newsitemobject.friendica_activities.like[0].name+" "+ qsTr("likes this.")}
|
||||
else {likeText= newsitemobject.friendica_activities.like.length+" "+ qsTr("like this.")}
|
||||
}
|
||||
if (newsitemobject.friendica_activities.dislike.length>0){
|
||||
if (newsitemobject.friendica_activities.dislike.length==1){dislikeText= newsitemobject.friendica_activities.dislike[0].name+" "+ qsTr("doesn't like this.")}
|
||||
else {dislikeText= newsitemobject.friendica_activities.dislike.length+" "+ qsTr("don't like this.")}
|
||||
}
|
||||
if (newsitemobject.friendica_activities.attendyes.length>0){
|
||||
if (newsitemobject.friendica_activities.attendyes.length==1){attendyesText=newsitemobject.friendica_activities.attendyes[0].name+" "+ qsTr("will attend.")}
|
||||
else {attendyesText= newsitemobject.friendica_activities.attendyes.length+" "+ qsTr("persons will attend.")}
|
||||
}
|
||||
if (newsitemobject.friendica_activities.attendno.length>0){
|
||||
if (newsitemobject.friendica_activities.attendno.length==1){attendnoText= newsitemobject.friendica_activities.attendno[0].name+" "+ qsTr("will not attend.")}
|
||||
else {attendnoText= newsitemobject.friendica_activities.attendno.length+" "+ qsTr("persons will not attend.")}
|
||||
}
|
||||
if (newsitemobject.friendica_activities.attendmaybe.length>0){
|
||||
if (newsitemobject.friendica_activities.attendmaybe.length==1){attendmaybeText= newsitemobject.friendica_activities.attendmaybe[0].name+" "+ qsTr("may attend.")}
|
||||
else {attendmaybeText= newsitemobject.friendica_activities.attendmaybe.length+" "+ qsTr("persons may attend.")}
|
||||
}
|
||||
//var friendica_activities_self=JSON.parse(newsitemobject.friendica_activities_self);
|
||||
}} catch(e){print("Activities "+e+ " "+JSON.stringify(newsitemobject.friendica_activities))}
|
||||
return {likeText:likeText,dislikeText:dislikeText,attendyesText:attendyesText,attendnoText:attendnoText,attendmaybeText:attendmaybeText}
|
||||
}
|
||||
|
||||
function openMessageSend(messageState,newsitemobject){
|
||||
var parentId=""
|
||||
var replyUser=""
|
||||
if(newsitemobject!=""){
|
||||
parentId=newsitemobject.id
|
||||
replyUser=newsitemobject.user.screen_name;
|
||||
}
|
||||
// var messageString='import QtQuick 2.15; import QtQuick.Window 2.0; import "qrc:/qml/newsqml";'+
|
||||
// ' Window{id:messageWindow; title:"Message"; width:root.width; height:root.height; '+
|
||||
// 'MessageSend{state:"'+messageState+'"} Component.onCompleted: {x=Screen.width/2-width/2; y=Screen.height/2-height/2}}';
|
||||
// var messageObject=Qt.createQmlObject(messageString,root,"messageOutput");
|
||||
var messageObject = Qt.createComponent("qrc:/qml/newsqml/MessageSend.qml");
|
||||
var messageWindow=messageObject.createObject(root, { parentId: parentId, reply_to_user: replyUser, windowstate: messageState });
|
||||
messageWindow.show();
|
||||
}
|
||||
|
||||
// CalendarTab{
|
||||
// visible: wideScreen&&rootstackView.depth<2
|
||||
// width: newstabitem.width/3
|
||||
// x: newsSwipeview.width
|
||||
// //anchors.left: newsSwipeview.right
|
||||
// //anchors.fill: null
|
||||
// }
|
||||
// Rectangle{
|
||||
// color: "#F8F8F8"
|
||||
// height: parent.height
|
||||
// width: 0.5*mm
|
||||
// anchors.left: newsSwipeview.right
|
||||
// }
|
||||
|
||||
MessageSend{}
|
||||
|
||||
// CalendarTab{
|
||||
// visible: wideScreen&&rootstackView.depth<2
|
||||
// width: newstabitem.width/3
|
||||
// x: newsSwipeview.width
|
||||
// //anchors.left: newsSwipeview.right
|
||||
// //anchors.fill: null
|
||||
// }
|
||||
// Rectangle{
|
||||
// color: "#F8F8F8"
|
||||
// height: parent.height
|
||||
// width: 0.5*mm
|
||||
// anchors.left: newsSwipeview.right
|
||||
// }
|
||||
BlueButton{
|
||||
z:2
|
||||
anchors.right: parent.right
|
||||
visible: !wideScreen
|
||||
fontColor: "grey"
|
||||
border.color: "transparent"
|
||||
|
|
@ -136,6 +154,20 @@ Rectangle{
|
|||
leftDrawerAndroid.visible?leftDrawerAndroid.close():leftDrawerAndroid.open()}
|
||||
}
|
||||
|
||||
MButton{
|
||||
z:2
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: parent.bottom
|
||||
// fontColor: "grey"
|
||||
// border.color: "transparent"
|
||||
text: "\uf040"
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
onClicked:{
|
||||
if (newsSwipeview.stacktype=="DirectMessages"){openMessageSend("directmessage","")}
|
||||
else {openMessageSend("active","")}
|
||||
}
|
||||
}
|
||||
|
||||
LeftDrawerLinux{
|
||||
id:leftDrawer
|
||||
property var newstabstatus: newstab.newstabstatus
|
||||
|
|
@ -148,22 +180,87 @@ Rectangle{
|
|||
id: leftDrawerAndroid
|
||||
}
|
||||
|
||||
TabBar {
|
||||
id: newstabbar
|
||||
x: leftDrawer.width
|
||||
width: newsSwipeview.width
|
||||
spacing: 1
|
||||
position: TabBar.Header
|
||||
onCurrentIndexChanged: {
|
||||
newsSwipeview.currentIndex=newstabbar.currentIndex;
|
||||
}
|
||||
TabButton {
|
||||
font.family: fontAwesome.name
|
||||
font.pointSize : osSettings.bigFontSize
|
||||
width: newstabbar.width/5
|
||||
text: "\uf015"
|
||||
background:Rectangle{
|
||||
anchors.fill: parent
|
||||
color: osSettings.backgroundDimColor
|
||||
border.color: newsSwipeview.currentIndex==0?osSettings.accentColor:color
|
||||
}
|
||||
ToolTip.visible: pressed || hovered
|
||||
ToolTip.text: qsTr("Home")
|
||||
onDoubleClicked: {newstypeSignal("refresh")}
|
||||
}
|
||||
TabButton {
|
||||
font.family: fontAwesome.name
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
width: newstabbar.width/5
|
||||
text: "\uf0ec"
|
||||
background:Rectangle{
|
||||
anchors.fill: parent
|
||||
color: osSettings.backgroundDimColor
|
||||
border.color: newsSwipeview.currentIndex==1?osSettings.accentColor:color
|
||||
}
|
||||
ToolTip.visible: pressed || hovered
|
||||
ToolTip.text: qsTr("Replies")
|
||||
}
|
||||
TabButton {
|
||||
font.family: fontAwesome.name
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
width: newstabbar.width/5
|
||||
text: "\uf0e0"
|
||||
background:Rectangle{
|
||||
anchors.fill: parent
|
||||
color: osSettings.backgroundDimColor
|
||||
border.color: newsSwipeview.currentIndex==2?osSettings.accentColor:color
|
||||
}
|
||||
ToolTip.visible: pressed || hovered
|
||||
ToolTip.text: qsTr("Direct Messages")
|
||||
}
|
||||
TabButton {
|
||||
font.family: fontAwesome.name
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
width: newstabbar.width/5
|
||||
text: "\uf0f3"
|
||||
background:Rectangle{
|
||||
anchors.fill: parent
|
||||
color: osSettings.backgroundDimColor
|
||||
border.color: newsSwipeview.currentIndex==3?osSettings.accentColor:color
|
||||
}
|
||||
ToolTip.visible: pressed || hovered
|
||||
ToolTip.text: qsTr("Notifications")
|
||||
}
|
||||
}
|
||||
|
||||
SwipeView{
|
||||
id: newsSwipeview
|
||||
property string stacktype:"Home"
|
||||
currentIndex: 0
|
||||
width: wideScreen&&rootstackView.depth<2?newstabitem.width-leftDrawer.width:newstabitem.width//newstabitem.width/3*2:newstabitem.width
|
||||
height: newstabitem.height-4*mm
|
||||
height: newstabitem.height-newstabbar.height
|
||||
x: leftDrawer.width
|
||||
y: newstabbar.height
|
||||
function onDirectMessage(friend){currentIndex=2}
|
||||
|
||||
onCurrentIndexChanged: {
|
||||
switch(currentIndex){
|
||||
case 0: stacktype="Home";break;
|
||||
case 1: stacktype="Replies";break;
|
||||
case 2: stacktype="DirectMessages";break;
|
||||
case 3: stacktype="Notifications";break;
|
||||
default: stacktype="Home";
|
||||
case 0: stacktype="Home";break;
|
||||
case 1: stacktype="Replies";break;
|
||||
case 2: stacktype="DirectMessages";break;
|
||||
case 3: stacktype="Notifications";break;
|
||||
default: stacktype="Home";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/js/news.js" as Newsjs
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
import "qrc:/qml/genericqml"
|
||||
|
|
@ -59,17 +58,18 @@ Item {
|
|||
if (model.newsitemobject.hasOwnProperty("currentconversation")){
|
||||
rootstackView.push("qrc:/qml/newsqml/Conversation.qml",{"news": model.newsitemobject.currentconversation})}
|
||||
else{rootstackView.push("qrc:/qml/newsqml/Conversation.qml")};
|
||||
expectScreenUpdate=true;
|
||||
showConversation(index,newsitemobject)
|
||||
}
|
||||
|
||||
Rectangle{width:newsitem.width; height: 1; anchors.bottom: newsitem.bottom;
|
||||
color: Material.backgroundDimColor
|
||||
color: osSettings.backgroundDimColor
|
||||
}
|
||||
|
||||
Rectangle{
|
||||
width:newsitem.width
|
||||
height:newsitem.height-1
|
||||
color: Material.background
|
||||
color: osSettings.backgroundColor
|
||||
|
||||
Column {
|
||||
id:toprow
|
||||
|
|
@ -112,20 +112,20 @@ Item {
|
|||
|
||||
Label {
|
||||
id:messageTypeLabel
|
||||
color: Material.secondaryTextColor
|
||||
color: osSettings.secondaryTextColor
|
||||
text: if (newsitemobject.messagetype==1){ qsTr("Direct Message")} else if(newsitemobject.messagetype==2) {" Notification"} else {qsTr("Source: ")+newsitemobject.source}
|
||||
font.pointSize: 0.6*osSettings.systemFontSize
|
||||
}
|
||||
Label {
|
||||
id:createdAtLabel
|
||||
color: Material.secondaryTextColor
|
||||
color: osSettings.secondaryTextColor
|
||||
font.pointSize: 0.6*osSettings.systemFontSize
|
||||
horizontalAlignment: Label.AlignRight
|
||||
text: " \u00B7 "+getDateDiffString(newsitemobject.dateDiff) + " " +qsTr("ago")
|
||||
}
|
||||
Label {
|
||||
id:replytoLabel
|
||||
color: Material.secondaryTextColor
|
||||
color: osSettings.secondaryTextColor
|
||||
font.pointSize: 0.6*osSettings.systemFontSize
|
||||
font.family: "Noto Sans"
|
||||
horizontalAlignment: Label.AlignRight
|
||||
|
|
@ -139,8 +139,8 @@ Item {
|
|||
height: itemMessage.height
|
||||
onClicked: {pushConversation()}
|
||||
Text {
|
||||
color: Material.primaryTextColor
|
||||
linkColor: Material.accentColor
|
||||
color: osSettings.primaryTextColor
|
||||
linkColor: osSettings.accentColor
|
||||
id: itemMessage
|
||||
textFormat: Text.RichText
|
||||
font.family: "Noto Sans"
|
||||
|
|
@ -189,12 +189,12 @@ Item {
|
|||
anchors.bottom: toprow.bottom
|
||||
visible: toprow.implicitHeight>3/4*root.height || newsitemobject.nsfw
|
||||
text:"\uf078"
|
||||
fontColor: Material.secondaryTextColor
|
||||
fontColor: osSettings.secondaryTextColor
|
||||
border.color: "transparent"
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
// gradient: Gradient {
|
||||
// GradientStop { position: 0.0; color: "transparent" }
|
||||
// GradientStop { position: 0.5; color: Material.backgroundDimColor}
|
||||
// GradientStop { position: 0.5; color: osSettings.backgroundDimColor}
|
||||
// }
|
||||
radius:0
|
||||
onClicked: {
|
||||
|
|
@ -215,7 +215,7 @@ Item {
|
|||
width:parent.width
|
||||
spacing:mm
|
||||
|
||||
Label{color: Material.secondaryTextColor
|
||||
Label{color: osSettings.secondaryTextColor
|
||||
height:3.5*mm
|
||||
font.pointSize: 0.75*osSettings.systemFontSize
|
||||
text: newsitemobject.hasOwnProperty("isLastComment")?"":friendica_activities_view.likeText
|
||||
|
|
@ -224,7 +224,7 @@ Item {
|
|||
onClicked: { showActivityContacts(newsitemobject.friendica_activities.like)}
|
||||
}
|
||||
}
|
||||
Label{color: Material.secondaryTextColor
|
||||
Label{color: osSettings.secondaryTextColor
|
||||
height:3.5*mm
|
||||
font.pointSize: 0.75*osSettings.systemFontSize
|
||||
text: newsitemobject.hasOwnProperty("isLastComment")?"":friendica_activities_view.dislikeText
|
||||
|
|
@ -233,7 +233,7 @@ Item {
|
|||
onClicked: { showActivityContacts(newsitemobject.friendica_activities.dislike)}
|
||||
}
|
||||
}
|
||||
Label{color: Material.secondaryTextColor
|
||||
Label{color: osSettings.secondaryTextColor
|
||||
height:3.5*mm
|
||||
font.pointSize: 0.75*osSettings.systemFontSize
|
||||
text: newsitemobject.hasOwnProperty("isLastComment")?"":friendica_activities_view.attendyesText
|
||||
|
|
@ -241,7 +241,7 @@ Item {
|
|||
anchors.fill: parent
|
||||
onClicked: { showActivityContacts(newsitemobject.friendica_activities.attendyes)}
|
||||
}}
|
||||
Label{color: Material.secondaryTextColor
|
||||
Label{color: osSettings.secondaryTextColor
|
||||
height:3.5*mm
|
||||
font.pointSize: 0.75*osSettings.systemFontSize
|
||||
text: newsitemobject.hasOwnProperty("isLastComment")?"":friendica_activities_view.attendnoText
|
||||
|
|
@ -250,7 +250,7 @@ Item {
|
|||
onClicked: { showActivityContacts(newsitemobject.friendica_activities.attendno)}
|
||||
}
|
||||
}
|
||||
Label{color: Material.secondaryTextColor
|
||||
Label{color: osSettings.secondaryTextColor
|
||||
height:3.5*mm
|
||||
font.pointSize: 0.75*osSettings.systemFontSize
|
||||
text: newsitemobject.hasOwnProperty("isLastComment")?"":friendica_activities_view.attendmaybeText
|
||||
|
|
@ -261,7 +261,7 @@ Item {
|
|||
}
|
||||
Label{
|
||||
id:attendLabel
|
||||
color: Material.secondaryTextColor
|
||||
color: osSettings.secondaryTextColor
|
||||
height:3.5*mm
|
||||
font.pointSize: 0.75*osSettings.systemFontSize
|
||||
horizontalAlignment: Label.AlignRight
|
||||
|
|
@ -288,7 +288,7 @@ Item {
|
|||
anchors.centerIn: parent
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
font.family:fontAwesome.name
|
||||
color:likeCheckbox.checked?Material.primaryTextColor: Material.secondaryTextColor
|
||||
color:likeCheckbox.checked?osSettings.primaryTextColor: osSettings.secondaryTextColor
|
||||
text:likeCheckbox.checked?"\uf118"+"!":"\uf118"
|
||||
}
|
||||
}
|
||||
|
|
@ -317,7 +317,7 @@ Item {
|
|||
anchors.centerIn: parent
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
font.family:fontAwesome.name
|
||||
color:dislikeCheckbox.checked?Material.primaryTextColor: Material.secondaryTextColor
|
||||
color:dislikeCheckbox.checked?osSettings.primaryTextColor: osSettings.secondaryTextColor
|
||||
text: dislikeCheckbox.checked?"\uf119"+"!":"\uf119"
|
||||
}
|
||||
}
|
||||
|
|
@ -346,7 +346,7 @@ Item {
|
|||
anchors.centerIn: parent
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
font.family:fontAwesome.name
|
||||
color: favoritedCheckbox.checked?Material.primaryTextColor: Material.secondaryTextColor
|
||||
color: favoritedCheckbox.checked?osSettings.primaryTextColor: osSettings.secondaryTextColor
|
||||
text:"\uf005"
|
||||
}
|
||||
}
|
||||
|
|
@ -365,7 +365,7 @@ Item {
|
|||
color:"transparent"
|
||||
Text{
|
||||
id:replysymbol
|
||||
color: Material.secondaryTextColor
|
||||
color: osSettings.secondaryTextColor
|
||||
anchors.centerIn: parent
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
font.family:fontAwesome.name
|
||||
|
|
@ -374,21 +374,24 @@ Item {
|
|||
MouseArea{
|
||||
anchors.fill:parent
|
||||
onClicked: {
|
||||
var directmessage=0;
|
||||
if (newsitemobject.messagetype==1){ directmessage=1}
|
||||
var replycomp=Qt.createComponent("qrc:/qml/newsqml/MessageSend.qml");
|
||||
var conversation;
|
||||
if (newsitem.ListView.view==null){conversation=true}
|
||||
else if (newsitem.ListView.view.viewtype=="conversation"){
|
||||
conversation=true
|
||||
newsitem.ListView.view.currentIndex=itemindex
|
||||
}
|
||||
else{
|
||||
conversation=false;
|
||||
newsitem.ListView.view.currentIndex=itemindex
|
||||
};
|
||||
var reply=replycomp.createObject(friendicaActivities,{parentId:newsitemobject.id,reply_to_user:newsitemobject.user.screen_name, state:"reply",conversation:conversation,textfocus:true})
|
||||
openMessageSend("reply",newsitemobject)
|
||||
}
|
||||
|
||||
// var directmessage=0;
|
||||
// if (newsitemobject.messagetype==1){ directmessage=1}
|
||||
// var replycomp=Qt.createComponent("qrc:/qml/newsqml/MessageSend.qml");
|
||||
// var conversation;
|
||||
// if (newsitem.ListView.view==null){conversation=true}
|
||||
// else if (newsitem.ListView.view.viewtype=="conversation"){
|
||||
// conversation=true
|
||||
// newsitem.ListView.view.currentIndex=itemindex
|
||||
// }
|
||||
// else{
|
||||
// conversation=false;
|
||||
// newsitem.ListView.view.currentIndex=itemindex
|
||||
// };
|
||||
// var reply=replycomp.createObject(friendicaActivities,{parentId:newsitemobject.id,reply_to_user:newsitemobject.user.screen_name, state:"reply",conversation:conversation,textfocus:true})
|
||||
// }
|
||||
}
|
||||
}
|
||||
Rectangle{
|
||||
|
|
@ -398,7 +401,7 @@ Item {
|
|||
color:"transparent"
|
||||
Text{
|
||||
id:newsmenusymbol
|
||||
color: Material.secondaryTextColor
|
||||
color: osSettings.secondaryTextColor
|
||||
anchors.centerIn: parent
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
font.family:fontAwesome.name
|
||||
|
|
@ -416,7 +419,7 @@ Item {
|
|||
delegate: MenuItem{
|
||||
contentItem: Text{
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
color: Material.secondaryTextColor
|
||||
color: osSettings.secondaryTextColor
|
||||
text: parent.text
|
||||
}
|
||||
}
|
||||
|
|
@ -483,7 +486,7 @@ Item {
|
|||
delegate: MenuItem{
|
||||
contentItem: Text{
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
color: Material.secondaryTextColor
|
||||
color: osSettings.secondaryTextColor
|
||||
text: parent.text
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 2.15
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
|
||||
Dialog {
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@
|
|||
import QtQuick 2.11
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Layouts 1.11
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/js/smiley.js" as Smileyjs
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
import "qrc:/qml/genericqml"
|
||||
|
|
@ -42,7 +41,7 @@ Rectangle{
|
|||
x: mm
|
||||
width: messageColumn.width-5*mm
|
||||
height:root.height/2
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
|
||||
MButton{
|
||||
id:closeButton
|
||||
|
|
@ -64,22 +63,8 @@ Rectangle{
|
|||
text:qsTr("Unicode")
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
}
|
||||
TabButton {
|
||||
text: qsTr("Standard")
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
}
|
||||
TabButton {
|
||||
text: qsTr("Addon")
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
}
|
||||
|
||||
TabButton {
|
||||
text: qsTr("Adult")
|
||||
font.pointSize: osSettings.systemFontSize
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
StackLayout{
|
||||
id:smileyTabView
|
||||
currentIndex: smileybar.currentIndex
|
||||
|
|
@ -89,7 +74,7 @@ Rectangle{
|
|||
height: smileyDialog.height-4*root.fontFactor*osSettings.bigFontSize
|
||||
Rectangle{
|
||||
id: htmlGridTab
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
GridView {
|
||||
id:htmlView
|
||||
anchors.fill: parent
|
||||
|
|
@ -109,97 +94,7 @@ Rectangle{
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle{
|
||||
id: coreGridTab
|
||||
color: Material.backgroundColor
|
||||
GridView {
|
||||
id: coreSmileyView
|
||||
anchors.fill: parent
|
||||
cellWidth: 5*mm
|
||||
cellHeight: 5*mm
|
||||
clip: true
|
||||
model: coreSmileyModel
|
||||
delegate: smileyItem
|
||||
}
|
||||
|
||||
ListModel{
|
||||
id: coreSmileyModel
|
||||
}
|
||||
|
||||
Component.onCompleted:{
|
||||
var smileyarray=Smileyjs.core
|
||||
for (var icon in smileyarray){
|
||||
coreSmileyModel.append({"emoji":smileyarray[icon]})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle{
|
||||
id: addonGridTab
|
||||
color: Material.backgroundColor
|
||||
GridView {
|
||||
id: addonView
|
||||
anchors.fill: parent
|
||||
cellWidth: 5*mm
|
||||
cellHeight: 5*mm
|
||||
clip: true
|
||||
model: addonModel
|
||||
delegate: smileyItem
|
||||
}
|
||||
|
||||
ListModel{
|
||||
id: addonModel
|
||||
}
|
||||
Component.onCompleted:{
|
||||
for (var icon in Smileyjs.addon){
|
||||
addonModel.append({"emoji":Smileyjs.addon[icon]})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Rectangle{
|
||||
id: adultGridTab
|
||||
color: Material.backgroundColor
|
||||
GridView {
|
||||
id: adultView
|
||||
anchors.fill: parent
|
||||
cellWidth: 5*mm
|
||||
cellHeight: 5*mm
|
||||
clip: true
|
||||
model: adultModel
|
||||
delegate: smileyItem
|
||||
}
|
||||
|
||||
ListModel{
|
||||
id: adultModel
|
||||
}
|
||||
Component.onCompleted:{
|
||||
for (var icon in Smileyjs.adult){
|
||||
adultModel.append({"emoji":Smileyjs.adult[icon]})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Component{
|
||||
id:smileyItem
|
||||
AnimatedImage{id:smileyImage
|
||||
width:4.5*mm
|
||||
height: 4.5*mm
|
||||
fillMode:Image.PreserveAspectFit
|
||||
source:emoji.url
|
||||
|
||||
MouseArea{
|
||||
anchors.fill: parent
|
||||
onClicked:{
|
||||
//bodyField.append(emoji.name+" ")
|
||||
bodyField.insert(bodyField.cursorPosition,emoji.name+" ");
|
||||
smileyDialog.visible=false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component{
|
||||
id:htmlItem
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
import QtQuick 2.5
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
import "qrc:/js/image.js" as Imagejs
|
||||
import "qrc:/qml/genericqml"
|
||||
|
|
@ -237,7 +236,7 @@ Page{
|
|||
Rectangle{
|
||||
width:root.width/2 //Math.max(20*mm,descriptionInput.contentWidth)
|
||||
height:imageUploadView.height-3*root.fontFactor*osSettings.bigFontSize// 20*mm
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
Image{
|
||||
id: uploadImage
|
||||
width: root.width/2-mm //20*mm
|
||||
|
|
@ -256,7 +255,7 @@ Page{
|
|||
}
|
||||
|
||||
Rectangle{
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
border.color: "grey"
|
||||
anchors.top: uploadImage.bottom
|
||||
anchors.topMargin: mm
|
||||
|
|
@ -282,7 +281,7 @@ Page{
|
|||
BlueButton{
|
||||
width: 5*root.fontFactor*osSettings.bigFontSize
|
||||
height:imageUploadView.height-3*root.fontFactor*osSettings.bigFontSize
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
text:"\u002b"
|
||||
fontSize: 3*osSettings.bigFontSize
|
||||
onClicked:{
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
import QtQuick 2.5
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Controls.Material 2.12
|
||||
import QtQml.Models 2.1
|
||||
import "qrc:/js/image.js" as Imagejs
|
||||
import "qrc:/js/helper.js" as Helperjs
|
||||
|
|
@ -44,7 +43,7 @@ StackView{
|
|||
initialItem:Rectangle {
|
||||
id:fotorectangle
|
||||
anchors.fill:parent
|
||||
color: Material.backgroundColor
|
||||
color: osSettings.backgroundColor
|
||||
property var newimages:[]
|
||||
property int currentimageno: 0
|
||||
property bool remoteContact: false
|
||||
|
|
@ -174,7 +173,7 @@ StackView{
|
|||
BlueButton{
|
||||
z:2
|
||||
visible: !wideScreen
|
||||
fontColor: Material.secondaryTextColor//"grey"
|
||||
fontColor: osSettings.secondaryTextColor//"grey"
|
||||
border.color: "transparent"
|
||||
text: "\uf0c9"
|
||||
font.pointSize: osSettings.bigFontSize
|
||||
|
|
@ -287,13 +286,13 @@ StackView{
|
|||
clip: true
|
||||
model: visualphotoModel.parts.album
|
||||
footer:Rectangle{
|
||||
border.color: Material.backgroundDimColor
|
||||
border.color: osSettings.backgroundDimColor
|
||||
border.width: 1
|
||||
color: Material.dialogColor
|
||||
color: osSettings.dialogColor
|
||||
width:12*mm
|
||||
height:6*mm
|
||||
Text{
|
||||
color: Material.primaryTextColor
|
||||
color: osSettings.primaryTextColor
|
||||
font.pointSize: 0.75*osSettings.systemFontSize
|
||||
anchors.centerIn: parent
|
||||
text:qsTr("More")
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
[Controls]
|
||||
Style=Material
|
||||
Style=Fusion
|
||||
#Style=Material
|
||||
|
||||
[Default]
|
||||
Font\Family=Noto Sans
|
||||
|
|
|
|||