v.0.5
This commit is contained in:
		
					parent
					
						
							
								63dfb9b197
							
						
					
				
			
			
				commit
				
					
						d48847d183
					
				
			
		
					 135 changed files with 8879 additions and 3693 deletions
				
			
		| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
<?xml version="1.0"?>
 | 
			
		||||
<manifest package="org.qtproject.friendiqa" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.4" android:versionCode="12" android:installLocation="auto">
 | 
			
		||||
<manifest package="org.qtproject.friendiqa" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.5" android:versionCode="13" android:installLocation="auto">
 | 
			
		||||
    <application android:hardwareAccelerated="true" android:vmSafeMode="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="Friendiqa" android:icon="@drawable/friendiqa" android:logo="@drawable/friendiqa" android:theme="@android:style/Theme.Holo.Light">
 | 
			
		||||
        <activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="androidnative.friendiqa.FriendiqaActivity" android:label="Friendiqa" android:screenOrientation="unspecified" android:launchMode="singleInstance" android:taskAffinity="">
 | 
			
		||||
            <intent-filter>
 | 
			
		||||
| 
						 | 
				
			
			@ -78,13 +78,12 @@
 | 
			
		|||
            <!--  Messages maps -->
 | 
			
		||||
            <meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/splash"/>
 | 
			
		||||
        </service>
 | 
			
		||||
        
 | 
			
		||||
        <service android:process=":qt" android:name="androidnative.friendiqa.FriendiqaStopService" android:permission="android.permission.BIND_JOB_SERVICE"
 | 
			
		||||
        android:exported="true">
 | 
			
		||||
 | 
			
		||||
        <service android:process=":qt" android:name="androidnative.friendiqa.FriendiqaStopService" android:permission="android.permission.BIND_JOB_SERVICE" android:exported="true">
 | 
			
		||||
            <meta-data android:name="android.app.background_running" android:value="true"/>
 | 
			
		||||
        </service>
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </application>
 | 
			
		||||
    <uses-sdk android:minSdkVersion="18" android:targetSdkVersion="26"/>
 | 
			
		||||
    <supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,6 +26,9 @@ dependencies {
 | 
			
		|||
    compile 'com.android.support:support-v4:25.3.1'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dependencies {
 | 
			
		||||
    compile 'com.android.support:support-compat:25.3.1'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
android {
 | 
			
		||||
    /*******************************************************
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								source-android/android/gradle.properties
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								source-android/android/gradle.properties
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
androidBuildToolsVersion=25.0.3
 | 
			
		||||
androidCompileSdkVersion=27
 | 
			
		||||
buildDir=.build
 | 
			
		||||
qt5AndroidDir=/home/pankraz/Qt/5.11.1/android_armv7/src/android/java
 | 
			
		||||
							
								
								
									
										0
									
								
								source-android/android/libcrypto.so
									
										
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										0
									
								
								source-android/android/libcrypto.so
									
										
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
								
								
									
										0
									
								
								source-android/android/libssl.so
									
										
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										0
									
								
								source-android/android/libssl.so
									
										
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
								
								
									
										1
									
								
								source-android/android/local.properties
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								source-android/android/local.properties
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
sdk.dir=/home/pankraz/android-sdk_alt
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 460 B  | 
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 430 B  | 
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 540 B  | 
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 718 B  | 
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 892 B  | 
							
								
								
									
										
											BIN
										
									
								
								source-android/android/res/drawable/friendiqanotification.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								source-android/android/res/drawable/friendiqanotification.png
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 892 B  | 
| 
						 | 
				
			
			@ -38,7 +38,7 @@ public class AndroidNativeActivity extends org.qtproject.qt5.android.bindings.Qt
 | 
			
		|||
        	// app-defined int constant. The callback method gets the
 | 
			
		||||
        	// result of the request.
 | 
			
		||||
	} else {
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	System.loadLibrary("friendiqa");
 | 
			
		||||
        if((getIntent().getFlags() == (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY)) || (getIntent().getFlags() == Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) || (getIntent().getFlags() == Intent.FLAG_ACTIVITY_NEW_TASK) || (getIntent().getFlags() == Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) || (getIntent().getFlags() == (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED))) {
 | 
			
		||||
            SystemDispatcher.onActivityResume();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,12 +10,18 @@ import android.content.Context;
 | 
			
		|||
import android.content.ComponentName;
 | 
			
		||||
import android.app.job.JobScheduler;
 | 
			
		||||
import android.app.job.JobInfo;
 | 
			
		||||
import android.app.PendingIntent;
 | 
			
		||||
import android.support.v4.app.NotificationCompat; 
 | 
			
		||||
import android.support.v4.app.NotificationManagerCompat; 
 | 
			
		||||
import org.qtproject.qt5.android.QtNative;
 | 
			
		||||
import androidnative.friendiqa.FriendiqaService;
 | 
			
		||||
import androidnative.friendiqa.FriendiqaStopService;
 | 
			
		||||
import androidnative.friendiqa.FriendiqaActivity;
 | 
			
		||||
import androidnative.AndroidNativeActivity;
 | 
			
		||||
import androidnative.AndroidNativeService;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import org.qtproject.friendiqa.R;
 | 
			
		||||
 | 
			
		||||
public class Util {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -24,6 +30,7 @@ public class Util {
 | 
			
		|||
    public static final String SET_TRANSLUCENT_STATUS_BAR = "androidnative.Util.setTranslucentStatusBar";
 | 
			
		||||
    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";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    static {
 | 
			
		||||
| 
						 | 
				
			
			@ -35,6 +42,8 @@ public class Util {
 | 
			
		|||
                    setFullScreen(message);
 | 
			
		||||
                } else if (type.equals(SET_SCHEDULE)) {
 | 
			
		||||
                    setSchedule(message);
 | 
			
		||||
                } else if (type.equals(SET_NOTIFICATION)) {
 | 
			
		||||
                    setNotification(message);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
| 
						 | 
				
			
			@ -98,11 +107,39 @@ public class Util {
 | 
			
		|||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static void setNotification(Map message) {
 | 
			
		||||
        //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);
 | 
			
		||||
 | 
			
		||||
	final String textTitle = (String) message.get("title");
 | 
			
		||||
	final String textContent = (String) message.get("message");
 | 
			
		||||
	final int  notificationId = (int) message.get("id");
 | 
			
		||||
	NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
 | 
			
		||||
        .setSmallIcon(R.drawable.friendiqanotification)
 | 
			
		||||
        .setContentIntent(pendingIntent)
 | 
			
		||||
        .setContentTitle(textTitle)
 | 
			
		||||
        .setContentText(textContent)
 | 
			
		||||
        .setStyle(new NotificationCompat.BigTextStyle()
 | 
			
		||||
                .bigText(textContent))
 | 
			
		||||
        
 | 
			
		||||
        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
 | 
			
		||||
        .setAutoCancel(true);
 | 
			
		||||
 | 
			
		||||
	NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
 | 
			
		||||
	notificationManager.notify(notificationId, builder.build());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static void setSchedule(Map message) {
 | 
			
		||||
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        Log.d(TAG,"Friendiqa schedule Androidnative service");
 | 
			
		||||
        //Log.d(TAG,"Friendiqa schedule Androidnative service");
 | 
			
		||||
        final Integer value = (Integer) message.get("value");
 | 
			
		||||
        //final Activity activity = QtNative.activity();
 | 
			
		||||
	//final Service service = QtNative.service();
 | 
			
		||||
| 
						 | 
				
			
			@ -126,7 +163,7 @@ public class Util {
 | 
			
		|||
        jobScheduler.schedule(builder.build());
 | 
			
		||||
        
 | 
			
		||||
        if (QtNative.service() != null){
 | 
			
		||||
                Log.d(TAG,"Schedule Stopping Friendiqa Androidnative service");
 | 
			
		||||
                //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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
<RCC>
 | 
			
		||||
    <qresource prefix="/">
 | 
			
		||||
        <file>qtquickcontrols2.conf</file>
 | 
			
		||||
        <file>qml/friendiqa.qml</file>
 | 
			
		||||
        <file>qml/newsqml/NewsTab.qml</file>
 | 
			
		||||
        <file>qml/newsqml/Newsitem.qml</file>
 | 
			
		||||
| 
						 | 
				
			
			@ -16,7 +17,7 @@
 | 
			
		|||
        <file>qml/photoqml/PhotogroupComponent.qml</file>
 | 
			
		||||
        <file>qml/photoqml/PhotoTab.qml</file>
 | 
			
		||||
        <file>qml/configqml/InfoBox.qml</file>
 | 
			
		||||
        <file>qml/configqml/ConfigTab.qml</file>
 | 
			
		||||
        <file>qml/configqml/ConfigPage.qml</file>
 | 
			
		||||
        <file>js/layout.js</file>
 | 
			
		||||
        <file>js/photoworker.js</file>
 | 
			
		||||
        <file>js/service.js</file>
 | 
			
		||||
| 
						 | 
				
			
			@ -27,6 +28,7 @@
 | 
			
		|||
        <file>images/fontawesome-webfont.ttf</file>
 | 
			
		||||
        <file>images/folder-blue.png</file>
 | 
			
		||||
        <file>qml/configqml/OSSettingsAndroid.qml</file>
 | 
			
		||||
        <file>qml/genericqml/MButton.qml</file>
 | 
			
		||||
        <file>qml/configqml/OSSettingsLinux.qml</file>
 | 
			
		||||
        <file>qml/newsqml/SmileyDialog.qml</file>
 | 
			
		||||
        <file>js/smiley.js</file>
 | 
			
		||||
| 
						 | 
				
			
			@ -225,7 +227,9 @@
 | 
			
		|||
        <file>qml/newsqml/ContactPage.qml</file>
 | 
			
		||||
        <file>qml/newsqml/NewsLink.qml</file>
 | 
			
		||||
        <file>qml/configqml/RegisterPage.qml</file>
 | 
			
		||||
        <file>qml/newsqml/NewsYplayer.qml</file>
 | 
			
		||||
        <file>js/yplayer.html</file>
 | 
			
		||||
        <file>qml/configqml/AccountPage.qml</file>
 | 
			
		||||
        <file>qml/newsqml/NewsStack.qml</file>
 | 
			
		||||
        <file>qml/configqml/SyncConfig.qml</file>
 | 
			
		||||
        <file>qml/configqml/SyncComponent.qml</file>
 | 
			
		||||
    </qresource>
 | 
			
		||||
</RCC>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,6 +51,7 @@ signals:
 | 
			
		|||
 | 
			
		||||
public slots:
 | 
			
		||||
    void setAlarm(int time);
 | 
			
		||||
    void notify(QString title, QString text, int id);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    int m_time;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,8 +29,6 @@
 | 
			
		|||
//  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 <QtAndroidExtras/QAndroidJniObject>
 | 
			
		||||
//#include <QtAndroidExtras/QAndroidJniEnvironment>
 | 
			
		||||
#include "alarm.h"
 | 
			
		||||
#include <QtCore/QDebug>
 | 
			
		||||
#include "AndroidNative/systemdispatcher.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -45,38 +43,20 @@ ALARM::ALARM(QObject *parent) : QObject(parent){}
 | 
			
		|||
 | 
			
		||||
void ALARM::setAlarm(int interval)
 | 
			
		||||
{
 | 
			
		||||
    qDebug() << interval;
 | 
			
		||||
    QVariantMap message;
 | 
			
		||||
    message["value"] = interval;
 | 
			
		||||
    AndroidNative::SystemDispatcher::instance()->loadClass("androidnative.Util");
 | 
			
		||||
    AndroidNative::SystemDispatcher::instance()->dispatch("androidnative.Util.setSchedule", message);
 | 
			
		||||
    //AndroidNative::SystemDispatcher::instance()->dispatch("androidnative.Util.stopService", message);
 | 
			
		||||
//    auto activity = QtAndroid::androidActivity();
 | 
			
		||||
//    auto packageManager = activity.callObjectMethod("getPackageManager",
 | 
			
		||||
//                                                    "()Landroid/content/pm/PackageManager;");
 | 
			
		||||
 | 
			
		||||
//    auto activityIntent = packageManager.callObjectMethod("getLaunchIntentForPackage",
 | 
			
		||||
//                                                          "(Ljava/lang/String;)Landroid/content/Intent;",
 | 
			
		||||
//                                                          activity.callObjectMethod("getPackageName",
 | 
			
		||||
//                                                          "()Ljava/lang/String;").object());
 | 
			
		||||
 | 
			
		||||
//    auto pendingIntent = QAndroidJniObject::callStaticObjectMethod("android/app/PendingIntent", "getActivity",
 | 
			
		||||
//                                                                   "(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;",
 | 
			
		||||
//                                                                   activity.object(), jint(0), activityIntent.object(),
 | 
			
		||||
//                                                                   QAndroidJniObject::getStaticField<jint>("android/content/Intent",
 | 
			
		||||
//                                                                                                           "FLAG_ACTIVITY_CLEAR_TOP"));
 | 
			
		||||
 | 
			
		||||
//    auto alarmManager = activity.callObjectMethod("getSystemService",
 | 
			
		||||
//                                                  "(Ljava/lang/String;)Ljava/lang/Object;",
 | 
			
		||||
//                                                  QAndroidJniObject::getStaticObjectField("android/content/Context",
 | 
			
		||||
//                                                                                          "ALARM_SERVICE",
 | 
			
		||||
//                                                                                          "Ljava/lang/String;").object());
 | 
			
		||||
 | 
			
		||||
//    alarmManager.callMethod<void>("set",
 | 
			
		||||
//                                  "(IJLandroid/app/PendingIntent;)V",
 | 
			
		||||
//                                  QAndroidJniObject::getStaticField<jint>("android/app/AlarmManager", "RTC"),
 | 
			
		||||
//                                  jlong(QDateTime::currentMSecsSinceEpoch() + 100), pendingIntent.object());
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    AndroidNative::SystemDispatcher::instance()->dispatch("androidnative.Util.stopService", message);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ALARM::notify(QString title, QString text, int id)
 | 
			
		||||
{
 | 
			
		||||
    //qDebug() << "notify "<< title << text;
 | 
			
		||||
    QVariantMap message;
 | 
			
		||||
    message["title"] = title;
 | 
			
		||||
    message["message"] =  text;
 | 
			
		||||
    message["id"] =  id;
 | 
			
		||||
    AndroidNative::SystemDispatcher::instance()->loadClass("androidnative.Util");
 | 
			
		||||
    AndroidNative::SystemDispatcher::instance()->dispatch("androidnative.Util.setNotification", message);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										73
									
								
								source-android/common/alarmlinux.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								source-android/common/alarmlinux.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,73 @@
 | 
			
		|||
//  This file is part of Friendiqa
 | 
			
		||||
//  https://git.friendi.ca/lubuwest/Friendiqa
 | 
			
		||||
//  Copyright (C) 2017 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 <QtAndroidExtras/QAndroidJniObject>
 | 
			
		||||
//#include <QtAndroidExtras/QAndroidJniEnvironment>
 | 
			
		||||
#include "alarm.h"
 | 
			
		||||
#include <QtCore/QDebug>
 | 
			
		||||
#include <QtDBus/QtDBus>
 | 
			
		||||
//#include "AndroidNative/systemdispatcher.h"
 | 
			
		||||
 | 
			
		||||
ALARM *ALARM::instance()
 | 
			
		||||
{
 | 
			
		||||
    static ALARM alarm;
 | 
			
		||||
    return &alarm;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ALARM::ALARM(QObject *parent) : QObject(parent){}
 | 
			
		||||
 | 
			
		||||
void ALARM::setAlarm(int interval)
 | 
			
		||||
{
 | 
			
		||||
    qDebug() << interval;
 | 
			
		||||
    QVariantMap message;
 | 
			
		||||
    message["value"] = interval;
 | 
			
		||||
   // AndroidNative::SystemDispatcher::instance()->loadClass("androidnative.Util");
 | 
			
		||||
   // AndroidNative::SystemDispatcher::instance()->dispatch("androidnative.Util.setSchedule", message);
 | 
			
		||||
    //AndroidNative::SystemDispatcher::instance()->dispatch("androidnative.Util.stopService", message);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ALARM::notify(QString title, QString text, int id)
 | 
			
		||||
{
 | 
			
		||||
    qDebug() << title << text;
 | 
			
		||||
    QVariantMap message;
 | 
			
		||||
    message["title"] = title;
 | 
			
		||||
    message["message"] =  text;
 | 
			
		||||
    QDBusConnection bus = QDBusConnection::sessionBus();
 | 
			
		||||
    QDBusInterface dbus_iface("org.freedesktop.Notifications", "/org/freedesktop/Notifications",
 | 
			
		||||
                              "org.freedesktop.Notifications", bus);
 | 
			
		||||
    QString appname="Friendiqa";
 | 
			
		||||
    uint v=12321;
 | 
			
		||||
    if (dbus_iface.isValid()){
 | 
			
		||||
 | 
			
		||||
        dbus_iface.call("Notify",appname,v,"",title,text,"","",5000);
 | 
			
		||||
    }
 | 
			
		||||
   // AndroidNative::SystemDispatcher::instance()->dispatch("Notifier.notify", message);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -32,17 +32,15 @@
 | 
			
		|||
#include <QApplication>
 | 
			
		||||
#include <QtQml/QQmlEngine>
 | 
			
		||||
#include <QAndroidService>
 | 
			
		||||
#include <QtAndroid>
 | 
			
		||||
#include <QtQuick>
 | 
			
		||||
#include "xhr.h"
 | 
			
		||||
#include "updatenews.h"
 | 
			
		||||
#include "filesystem.h"
 | 
			
		||||
#include "remoteauthasyncimageprovider.h"
 | 
			
		||||
#include "alarm.h"
 | 
			
		||||
#include "AndroidNative/systemdispatcher.h"
 | 
			
		||||
#include "AndroidNative/environment.h"
 | 
			
		||||
//#include "AndroidNative/environment.h"
 | 
			
		||||
//#include "AndroidNative/debug.h"
 | 
			
		||||
#include "AndroidNative/mediascannerconnection.h"
 | 
			
		||||
//#include "AndroidNative/mediascannerconnection.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef Q_OS_ANDROID
 | 
			
		||||
| 
						 | 
				
			
			@ -66,13 +64,11 @@ int main(int argc, char *argv[]) {
 | 
			
		|||
        UPDATENEWS* updatenews= UPDATENEWS::instance();
 | 
			
		||||
        updatenews->setDatabase();
 | 
			
		||||
        updatenews->login();
 | 
			
		||||
        updatenews->timeline();
 | 
			
		||||
        updatenews->startsync();
 | 
			
		||||
        app.connect (updatenews,SIGNAL(quitapp()),&app,SLOT(quit()));
 | 
			
		||||
        //QtAndroid::androidService().callMethod<void>("stopSelf");
 | 
			
		||||
        return app.exec();
 | 
			
		||||
    }
 | 
			
		||||
    else{
 | 
			
		||||
    
 | 
			
		||||
    QApplication app(argc, argv);
 | 
			
		||||
    QQuickView view;
 | 
			
		||||
    QTranslator qtTranslator;
 | 
			
		||||
| 
						 | 
				
			
			@ -87,8 +83,8 @@ int main(int argc, char *argv[]) {
 | 
			
		|||
    view.rootContext()->setContextProperty("filesystem", filesystem);
 | 
			
		||||
    ALARM* alarm = ALARM::instance();
 | 
			
		||||
    view.rootContext()->setContextProperty("alarm", alarm);
 | 
			
		||||
//    UPDATENEWS* updatenews = UPDATENEWS::instance();
 | 
			
		||||
//    view.rootContext()->setContextProperty("updatenews", updatenews);
 | 
			
		||||
    UPDATENEWS* updatenews = UPDATENEWS::instance();
 | 
			
		||||
    view.rootContext()->setContextProperty("updatenews", updatenews);
 | 
			
		||||
    view.setSource(QUrl("qrc:/qml/friendiqa.qml"));
 | 
			
		||||
    view.show();
 | 
			
		||||
    view.connect(view.rootContext()->engine(), SIGNAL(quit()), &app, SLOT(quit()));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -100,130 +100,304 @@ void UPDATENEWS::login()
 | 
			
		|||
       m_imagedir=query.value(3).toString();
 | 
			
		||||
       xhr.setImagedir(m_imagedir);
 | 
			
		||||
       QString isActive=query.value(7).toString();
 | 
			
		||||
       m_updateInterval=query.value(5).toInt(); 
 | 
			
		||||
       m_api="/api/statuses/friends_timeline";
 | 
			
		||||
       xhr.setApi(m_api);
 | 
			
		||||
    }
 | 
			
		||||
       //m_updateInterval=query.value(5).toInt(); 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    QSqlQuery syncquery("SELECT * FROM globaloptions",m_db);
 | 
			
		||||
//    QSqlQuery delquery("DELETE FROM globaloptions WHERE k='sync_interval'",m_db);
 | 
			
		||||
//    delquery.exec();
 | 
			
		||||
    m_updateInterval=0;
 | 
			
		||||
    syncindex=0;
 | 
			
		||||
    synclist.clear();
 | 
			
		||||
       //QSqlQuery syncquery("SELECT * FROM globaloptions WHERE k like 'sync_%' AND v=1",m_db);
 | 
			
		||||
    while (syncquery.next()){
 | 
			
		||||
        if (syncquery.value(0).toString()=="syncinterval"){
 | 
			
		||||
            m_updateInterval=syncquery.value(1).toInt();
 | 
			
		||||
        }
 | 
			
		||||
        if (syncquery.value(0).toString().left(5)=="sync_" && syncquery.value(1).toInt()==1){
 | 
			
		||||
            synclist.append(syncquery.value(0).toString());
 | 
			
		||||
            //qDebug() << " sync " << syncquery.value(0).toString() << " " <<syncquery.value(1).toString();
 | 
			
		||||
        }
 | 
			
		||||
        if (syncquery.value(0).toString().left(7)=="notify_" && syncquery.value(1).toInt()==1){
 | 
			
		||||
            notifylist.append(syncquery.value(0).toString());
 | 
			
		||||
            //qDebug() << " notify " << syncquery.value(0).toString() << " " <<syncquery.value(1).toString();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
      // QSqlQuery notifyquery("SELECT * FROM globaloptions WHERE k like 'notify_%' AND v=1",m_db);
 | 
			
		||||
       //qDebug() << "size " << notifyquery.size();
 | 
			
		||||
      // while (notifyquery.next()){
 | 
			
		||||
        //   notifylist.append(syncquery.value(0).toString());
 | 
			
		||||
         //  qDebug() << " notify " << syncquery.value(0).toString();
 | 
			
		||||
       //}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void UPDATENEWS::startsync()
 | 
			
		||||
{        //qDebug()<<"Friendiqa start syncing " <<synclist.length()<<" index "<<syncindex;
 | 
			
		||||
    QObject::connect(&xhr,SIGNAL(success(QByteArray,QString)),this,SLOT(store(QByteArray,QString)));
 | 
			
		||||
    QObject::connect(&xhr,SIGNAL(error(QString,QString,QString,int)),this,SLOT(showError(QString,QString,QString,int)));
 | 
			
		||||
    if (syncindex<synclist.length()){
 | 
			
		||||
        if (synclist[syncindex]=="sync_Timeline"){
 | 
			
		||||
             timeline();
 | 
			
		||||
        } else if (synclist[syncindex]=="sync_Replies") {
 | 
			
		||||
            replies();
 | 
			
		||||
        } else if (synclist[syncindex]=="sync_DirectMessages") {
 | 
			
		||||
            directmessages();
 | 
			
		||||
        } else if (synclist[syncindex]=="sync_Notifications") {
 | 
			
		||||
            notifications();
 | 
			
		||||
        }
 | 
			
		||||
    } else if (syncindex==synclist.length()) {
 | 
			
		||||
        m_api="";
 | 
			
		||||
        if(m_updateInterval!=0){
 | 
			
		||||
            syncindex=0;
 | 
			
		||||
            synclist.clear();
 | 
			
		||||
            m_db.close();
 | 
			
		||||
            m_db.removeDatabase(m_db.connectionName());
 | 
			
		||||
            emit quitapp();
 | 
			
		||||
            alarm.setAlarm(m_updateInterval);
 | 
			
		||||
            m_updateInterval=0;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UPDATENEWS::timeline()
 | 
			
		||||
{
 | 
			
		||||
    qDebug()<<"Friendiqa start timeline";
 | 
			
		||||
    QSqlQuery query("SELECT status_id FROM news WHERE username='"+ username +"' ORDER BY status_id DESC LIMIT 1",m_db);
 | 
			
		||||
    if (query.isActive() && query.isSelect()){query.first();};
 | 
			
		||||
    QString lastid=query.value(0).toString();
 | 
			
		||||
    m_api="/api/statuses/friends_timeline";
 | 
			
		||||
    xhr.clearParams();
 | 
			
		||||
    xhr.setParam("since_id",lastid);
 | 
			
		||||
    xhr.setUrl(m_url);
 | 
			
		||||
    xhr.setApi(m_api);
 | 
			
		||||
    QSqlQuery query("SELECT status_id FROM news WHERE messagetype=0 AND username='"+ username +"' ORDER BY status_id DESC LIMIT 1",m_db);
 | 
			
		||||
    if (query.isActive() && query.isSelect()){
 | 
			
		||||
        if (query.first()){
 | 
			
		||||
            QString lastid=query.value(0).toString();
 | 
			
		||||
            xhr.setParam("since_id",lastid);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    xhr.setParam("count","50");
 | 
			
		||||
    xhr.get();
 | 
			
		||||
    QObject::connect(&xhr,SIGNAL(success(QByteArray,QString)),this,SLOT(store(QByteArray,QString)));
 | 
			
		||||
    QObject::connect(&xhr,SIGNAL(error(QString,QString,QString,int)),this,SLOT(showError(QString,QString,QString,int)));
 | 
			
		||||
    QObject::connect(&xhr, SIGNAL(downloaded(QString, QString, QString, int)), this, SLOT(updateImageLocation(QString,QString, QString, int)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//void UPDATENEWS::startservice(QString type,QVariantMap map)
 | 
			
		||||
//{
 | 
			
		||||
//    qDebug ()<<"Friediqa start service "<<type;
 | 
			
		||||
//    if (type=="androidnativeServiceStarted"){
 | 
			
		||||
//        setDatabase();
 | 
			
		||||
//        login();
 | 
			
		||||
//        timeline();
 | 
			
		||||
//    }
 | 
			
		||||
//}
 | 
			
		||||
 | 
			
		||||
void UPDATENEWS::store(QByteArray serverreply,QString apiname)
 | 
			
		||||
void UPDATENEWS::replies()
 | 
			
		||||
{
 | 
			
		||||
    QJsonDocument news;
 | 
			
		||||
    qDebug()<<apiname << news;
 | 
			
		||||
    QJsonParseError jsonerror;
 | 
			
		||||
    news=QJsonDocument::fromJson(serverreply,&jsonerror);
 | 
			
		||||
    if (news.isArray()){
 | 
			
		||||
        for (int i=0; i < news.array().count();i++){
 | 
			
		||||
            QJsonValue newsitem=news[i];
 | 
			
		||||
            QSqlQuery query(m_db);
 | 
			
		||||
            query.prepare("INSERT INTO news (username,messagetype,text,created_at,in_reply_to_status_id,source,status_id,in_reply_to_user_id,geo,favorited,uid,statusnet_html,statusnet_conversation_id,friendica_activities,friendica_activities_self,attachments,friendica_owner) " "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
 | 
			
		||||
            query.bindValue(0,username);
 | 
			
		||||
            query.bindValue(1,"0");
 | 
			
		||||
            query.bindValue(2, newsitem["text"].toString().toUtf8().toBase64());
 | 
			
		||||
            QString sourcedate=newsitem["created_at"].toString();
 | 
			
		||||
            QString formateddate=sourcedate.mid(0,3)+", "+sourcedate.mid(8,3)+sourcedate.mid(4,3)+sourcedate.mid(25,5)+sourcedate.mid(10,15);
 | 
			
		||||
            query.bindValue(3,QDateTime::fromString(formateddate,Qt::RFC2822Date).toMSecsSinceEpoch() );
 | 
			
		||||
            if(newsitem["in_reply_to_status_id"]!=QJsonValue::Null){query.bindValue(4, newsitem["in_reply_to_status_id"].toInt());};
 | 
			
		||||
            query.bindValue(5,newsitem["source"]);
 | 
			
		||||
            query.bindValue(6,newsitem["id"].toInt());
 | 
			
		||||
            if(newsitem["in_reply_to_user_id"]!=QJsonValue::Null){ query.bindValue(7,newsitem["in_reply_to_user_id"].toInt());};
 | 
			
		||||
            query.bindValue(8,newsitem["geo"]);
 | 
			
		||||
            query.bindValue( 9, newsitem["favorited"].toInt());
 | 
			
		||||
            query.bindValue(10, newsitem["user"]["id"].toInt());
 | 
			
		||||
            query.bindValue(11, newsitem["statusnet_html"].toString().toUtf8().toBase64());
 | 
			
		||||
            query.bindValue(12, newsitem["statusnet_conversation_id"].toInt());
 | 
			
		||||
            QJsonArray likeArray;QJsonArray dislikeArray;QJsonArray attendyesArray;QJsonArray attendnoArray;QJsonArray attendmaybeArray;
 | 
			
		||||
            if (newsitem.toObject().contains("friendica_activities")){
 | 
			
		||||
                for (int a=0; a < newsitem["friendica_activities"]["like"].toArray().count();a++){
 | 
			
		||||
                    likeArray.append(newsitem["friendica_activities"]["like"][a]["url"].toString());
 | 
			
		||||
                }
 | 
			
		||||
                for (int b=0; b < newsitem["friendica_activities"]["dislike"].toArray().count();b++){
 | 
			
		||||
                    dislikeArray.append(newsitem["friendica_activities"]["dislike"][b]["url"].toString());
 | 
			
		||||
                }
 | 
			
		||||
                for (int c=0; c < newsitem["friendica_activities"]["attendyes"].toArray().count();c++){
 | 
			
		||||
                    attendyesArray.append(newsitem["friendica_activities"]["attendyes"][c]["url"].toString());
 | 
			
		||||
                }
 | 
			
		||||
                for (int d=0; d < newsitem["friendica_activities"]["attendno"].toArray().count();d++){
 | 
			
		||||
                    attendnoArray.append(newsitem["friendica_activities"]["attendno"][d]["url"].toString());
 | 
			
		||||
                }
 | 
			
		||||
                for (int e = 0; e < newsitem["friendica_activities"]["attendmaybe"].toArray().count();e++){
 | 
			
		||||
                    attendmaybeArray.append(newsitem["friendica_activities"]["attendmaybe"][e]["url"].toString());
 | 
			
		||||
                }
 | 
			
		||||
             };
 | 
			
		||||
            QJsonArray friendica_activities; friendica_activities={likeArray,dislikeArray,attendyesArray,attendnoArray,attendmaybeArray};
 | 
			
		||||
            QJsonDocument activities; activities.setArray(friendica_activities);
 | 
			
		||||
            query.bindValue(13,activities.toJson(QJsonDocument::Compact).toBase64());
 | 
			
		||||
            query.bindValue(14,"[]");
 | 
			
		||||
 | 
			
		||||
            if (newsitem["attachments"]!=QJsonValue::Undefined){
 | 
			
		||||
                query.bindValue(15, QJsonDocument(newsitem["attachments"].toArray()).toJson(QJsonDocument::Compact).toBase64());
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            query.bindValue(16, newsitem["friendica_owner"]["url"]);
 | 
			
		||||
            query.exec() ;
 | 
			
		||||
    m_api="/api/statuses/replies";
 | 
			
		||||
    xhr.clearParams();
 | 
			
		||||
    xhr.setUrl(m_url);
 | 
			
		||||
    xhr.setApi(m_api);
 | 
			
		||||
    QSqlQuery query("SELECT status_id FROM news WHERE messagetype=3 AND username='"+ username +"' ORDER BY status_id DESC LIMIT 1",m_db);
 | 
			
		||||
    if (query.isActive() && query.isSelect()){
 | 
			
		||||
        if (query.first()){
 | 
			
		||||
            QString lastid=query.value(0).toString();
 | 
			
		||||
            xhr.setParam("since_id",lastid);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        qDebug()<< "Friendiqa updatenews error";
 | 
			
		||||
        emit this->error(m_api,QTextCodec::codecForName("utf-8")->toUnicode(serverreply));
 | 
			
		||||
        if(m_updateInterval!=0){
 | 
			
		||||
            m_db.close();
 | 
			
		||||
            m_db.removeDatabase(m_db.connectionName());
 | 
			
		||||
            emit quitapp();
 | 
			
		||||
            alarm.setAlarm(m_updateInterval);
 | 
			
		||||
        };
 | 
			
		||||
    xhr.setParam("count","50");
 | 
			
		||||
    xhr.get();
 | 
			
		||||
    QObject::connect(&xhr,SIGNAL(success(QByteArray,QString)),this,SLOT(store(QByteArray,QString)));
 | 
			
		||||
    QObject::connect(&xhr,SIGNAL(error(QString,QString,QString,int)),this,SLOT(showError(QString,QString,QString,int)));
 | 
			
		||||
    QObject::connect(&xhr, SIGNAL(downloaded(QString, QString, QString, int)), this, SLOT(updateImageLocation(QString,QString, QString, int)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void UPDATENEWS::directmessages()
 | 
			
		||||
{
 | 
			
		||||
    m_api="/api/direct_messages/all";
 | 
			
		||||
    xhr.clearParams();
 | 
			
		||||
    xhr.setUrl(m_url);
 | 
			
		||||
    xhr.setApi(m_api);
 | 
			
		||||
    QSqlQuery query("SELECT status_id FROM news WHERE messagetype=1 AND username='"+ username +"' ORDER BY status_id DESC LIMIT 1",m_db);
 | 
			
		||||
    if (query.isActive() && query.isSelect()){
 | 
			
		||||
        if (query.first()){
 | 
			
		||||
            QString lastid=query.value(0).toString();
 | 
			
		||||
            xhr.setParam("since_id",lastid);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    xhr.get();
 | 
			
		||||
    QObject::connect(&xhr,SIGNAL(success(QByteArray,QString)),this,SLOT(store(QByteArray,QString)));
 | 
			
		||||
    QObject::connect(&xhr,SIGNAL(error(QString,QString,QString,int)),this,SLOT(showError(QString,QString,QString,int)));
 | 
			
		||||
    QObject::connect(&xhr, SIGNAL(downloaded(QString, QString, QString, int)), this, SLOT(updateImageLocation(QString,QString, QString, int)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void UPDATENEWS::notifications()
 | 
			
		||||
{
 | 
			
		||||
    m_api="/api/friendica/notifications";
 | 
			
		||||
    xhr.clearParams();
 | 
			
		||||
    xhr.setUrl(m_url);
 | 
			
		||||
    xhr.setApi(m_api);
 | 
			
		||||
    xhr.get();
 | 
			
		||||
    QObject::connect(&xhr,SIGNAL(success(QByteArray,QString)),this,SLOT(store(QByteArray,QString)));
 | 
			
		||||
    QObject::connect(&xhr,SIGNAL(error(QString,QString,QString,int)),this,SLOT(showError(QString,QString,QString,int)));
 | 
			
		||||
    QObject::connect(&xhr, SIGNAL(downloaded(QString, QString, QString, int)), this, SLOT(updateImageLocation(QString,QString, QString, int)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UPDATENEWS::store(QByteArray serverreply,QString apiname)
 | 
			
		||||
{   if (apiname!=m_api || xhr.downloadtype()!=""){} else {
 | 
			
		||||
        QJsonDocument news;
 | 
			
		||||
        //qDebug()<<apiname << serverreply;
 | 
			
		||||
        QJsonParseError jsonerror;
 | 
			
		||||
        news=QJsonDocument::fromJson(serverreply,&jsonerror);
 | 
			
		||||
        if (news.isArray()){
 | 
			
		||||
            for (int i=0; i < news.array().count();i++){
 | 
			
		||||
                QJsonValue newsitem=news[i];
 | 
			
		||||
                if (apiname=="/api/friendica/notifications"){
 | 
			
		||||
                    QSqlQuery testquery("SELECT status_id FROM news WHERE status_id=" + QString::number(newsitem["id"].toInt()) + " AND messagetype=2 AND username='"+ username +"'",m_db);
 | 
			
		||||
                    if (testquery.first()) {continue;}
 | 
			
		||||
                }
 | 
			
		||||
                QSqlQuery query(m_db);
 | 
			
		||||
                query.prepare("INSERT INTO news (username,messagetype,text,created_at,in_reply_to_status_id,source,status_id,in_reply_to_user_id,geo,favorited,uid,statusnet_html,statusnet_conversation_id,friendica_activities,friendica_activities_self,attachments,friendica_owner) " "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
 | 
			
		||||
                query.bindValue(0,username);
 | 
			
		||||
                query.bindValue(1,"0");
 | 
			
		||||
                query.bindValue(2, newsitem["text"].toString().toUtf8().toBase64());
 | 
			
		||||
                QString sourcedate=newsitem["created_at"].toString();
 | 
			
		||||
                QString formateddate=sourcedate.mid(0,3)+", "+sourcedate.mid(8,3)+sourcedate.mid(4,3)+sourcedate.mid(25,5)+sourcedate.mid(10,15);
 | 
			
		||||
                query.bindValue(3,QDateTime::fromString(formateddate,Qt::RFC2822Date).toMSecsSinceEpoch() );
 | 
			
		||||
                if(newsitem["in_reply_to_status_id"]!=QJsonValue::Null){query.bindValue(4, newsitem["in_reply_to_status_id"].toInt());}
 | 
			
		||||
                query.bindValue(5,newsitem["source"]);
 | 
			
		||||
                query.bindValue(6,newsitem["id"].toInt());
 | 
			
		||||
                if(newsitem["in_reply_to_user_id"]!=QJsonValue::Null){ query.bindValue(7,newsitem["in_reply_to_user_id"].toInt());}
 | 
			
		||||
                query.bindValue(8,newsitem["geo"]);
 | 
			
		||||
                query.bindValue( 9, newsitem["favorited"].toInt());
 | 
			
		||||
                query.bindValue(10, newsitem["user"]["id"].toInt());
 | 
			
		||||
                query.bindValue(11, newsitem["statusnet_html"].toString().toUtf8().toBase64());
 | 
			
		||||
                query.bindValue(12, newsitem["statusnet_conversation_id"].toInt());
 | 
			
		||||
                QJsonArray likeArray;QJsonArray dislikeArray;QJsonArray attendyesArray;QJsonArray attendnoArray;QJsonArray attendmaybeArray;
 | 
			
		||||
                if (newsitem.toObject().contains("friendica_activities")){
 | 
			
		||||
                    for (int a=0; a < newsitem["friendica_activities"]["like"].toArray().count();a++){
 | 
			
		||||
                        likeArray.append(newsitem["friendica_activities"]["like"][a]["url"].toString());
 | 
			
		||||
                    }
 | 
			
		||||
                    for (int b=0; b < newsitem["friendica_activities"]["dislike"].toArray().count();b++){
 | 
			
		||||
                        dislikeArray.append(newsitem["friendica_activities"]["dislike"][b]["url"].toString());
 | 
			
		||||
                    }
 | 
			
		||||
                    for (int c=0; c < newsitem["friendica_activities"]["attendyes"].toArray().count();c++){
 | 
			
		||||
                        attendyesArray.append(newsitem["friendica_activities"]["attendyes"][c]["url"].toString());
 | 
			
		||||
                    }
 | 
			
		||||
                    for (int d=0; d < newsitem["friendica_activities"]["attendno"].toArray().count();d++){
 | 
			
		||||
                        attendnoArray.append(newsitem["friendica_activities"]["attendno"][d]["url"].toString());
 | 
			
		||||
                    }
 | 
			
		||||
                    for (int e = 0; e < newsitem["friendica_activities"]["attendmaybe"].toArray().count();e++){
 | 
			
		||||
                        attendmaybeArray.append(newsitem["friendica_activities"]["attendmaybe"][e]["url"].toString());
 | 
			
		||||
                    }
 | 
			
		||||
                 }
 | 
			
		||||
                QJsonArray friendica_activities; friendica_activities={likeArray,dislikeArray,attendyesArray,attendnoArray,attendmaybeArray};
 | 
			
		||||
                QJsonDocument activities; activities.setArray(friendica_activities);
 | 
			
		||||
                query.bindValue(13,activities.toJson(QJsonDocument::Compact).toBase64());
 | 
			
		||||
                query.bindValue(14,"[]");
 | 
			
		||||
 | 
			
		||||
                if (newsitem["attachments"]!=QJsonValue::Undefined){
 | 
			
		||||
                    query.bindValue(15, QJsonDocument(newsitem["attachments"].toArray()).toJson(QJsonDocument::Compact).toBase64());
 | 
			
		||||
                }else {
 | 
			
		||||
                    query.bindValue(15, "");
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (newsitem["friendica_author"]!=QJsonValue::Undefined){
 | 
			
		||||
                    query.bindValue(16, newsitem["friendica_author"]["url"]);
 | 
			
		||||
                }else {
 | 
			
		||||
                    query.bindValue(16, newsitem["user"]["url"]);
 | 
			
		||||
                   }
 | 
			
		||||
 | 
			
		||||
                if (apiname=="/api/statuses/replies"){
 | 
			
		||||
                    query.bindValue(1,"3");
 | 
			
		||||
                }
 | 
			
		||||
                if (apiname == "/api/direct_messages/all"){
 | 
			
		||||
                    query.bindValue(1,"1");
 | 
			
		||||
                    query.bindValue(5,"Friendica");
 | 
			
		||||
                    if(newsitem["recipient"]["id"]!=QJsonValue::Null){ query.bindValue(7,newsitem["recipient"]["id"].toInt());}
 | 
			
		||||
                    query.bindValue(10, newsitem["sender_id"].toInt());
 | 
			
		||||
                    query.bindValue(11, newsitem["text"].toString().toUtf8().toBase64());
 | 
			
		||||
                    if(newsitem["friendica_parent_uri"]!=QJsonValue::Null){ query.bindValue(12,newsitem["friendica_parent_uri"]);}
 | 
			
		||||
                    query.bindValue(16, newsitem["sender"]["url"]);
 | 
			
		||||
                }
 | 
			
		||||
                if (apiname == "/api/friendica/notifications"){
 | 
			
		||||
                    query.bindValue(1,"2");
 | 
			
		||||
                    query.bindValue(3,QDateTime::fromString(newsitem["date"].toString(),"yyyy-MM-dd hh:mm:ss").toMSecsSinceEpoch());
 | 
			
		||||
                    query.bindValue(5,"Friendica");
 | 
			
		||||
                    QJsonObject cleancontact= findNotificationContact(newsitem["url"].toString());
 | 
			
		||||
                    query.bindValue(10, cleancontact["id"].toInt());
 | 
			
		||||
                    query.bindValue(11, newsitem["msg_html"].toString().toUtf8().toBase64());
 | 
			
		||||
                    if(newsitem["parent"]!=QJsonValue::Null){ query.bindValue(12,newsitem["parent"]);}
 | 
			
		||||
                    query.bindValue(16, newsitem["url"]);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if(!(query.exec())) {qDebug()<<query.lastError();}
 | 
			
		||||
 | 
			
		||||
                // notifications
 | 
			
		||||
                if (apiname=="/api/statuses/friends_timeline"){
 | 
			
		||||
                    if(notifylist.contains("notify_Timeline")){
 | 
			
		||||
                        alarm.notify("Home: "+ newsitem["user"]["name"].toString(),newsitem["text"].toString(),0);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (apiname=="/api/statuses/replies"){
 | 
			
		||||
                    if(notifylist.contains("notify_Replies")){
 | 
			
		||||
                        alarm.notify("Replies: "+newsitem["user"]["name"].toString(),newsitem["text"].toString(),1);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (apiname=="/api/direct_messages/all"){
 | 
			
		||||
                    if(notifylist.contains("notify_DirectMessages")){
 | 
			
		||||
                        alarm.notify("DirectMessage: "+newsitem["sender"]["name"].toString(),newsitem["text"].toString(),2);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (apiname=="/api/friendica/notifications"){
 | 
			
		||||
                    if(notifylist.contains("notify_Notifications")){
 | 
			
		||||
                        alarm.notify("Notification: "+newsitem["name"].toString(),newsitem["text"].toString(),3);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            QList<QJsonValue> newcontacts=findNewContacts(news);
 | 
			
		||||
            //qDebug()<< "new contacts count " << newcontacts.size();
 | 
			
		||||
            if (newcontacts.size()>0){
 | 
			
		||||
                updateContacts(newcontacts);
 | 
			
		||||
                startImagedownload();
 | 
			
		||||
 | 
			
		||||
            } else {
 | 
			
		||||
                if(m_updateInterval!=0){
 | 
			
		||||
                    syncindex+=1;
 | 
			
		||||
                    startsync();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            qDebug()<< "Friendiqa updatenews error " << serverreply;
 | 
			
		||||
            emit this->error(m_api,QTextCodec::codecForName("utf-8")->toUnicode(serverreply));
 | 
			
		||||
            syncindex+=1;
 | 
			
		||||
            startsync();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    QList<QJsonValue> newcontacts=findNewContacts(news);
 | 
			
		||||
    updateContacts(newcontacts);
 | 
			
		||||
    startImagedownload();
 | 
			
		||||
    connect(&xhr, SIGNAL(downloaded(QString, QString, QString, int)), this, SLOT(updateImageLocation(QString,QString, QString, int)));
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UPDATENEWS::updateImageLocation(QString downloadtype,QString imageurl, QString filename, int index){
 | 
			
		||||
    if (downloadtype=="contactlist"){
 | 
			
		||||
        QSqlQuery testquery("SELECT profile_image FROM contacts WHERE profile_image_url ='"+imageurl+ "' AND username = '" +username+"'",m_db);
 | 
			
		||||
        testquery.exec();
 | 
			
		||||
        testquery.first();
 | 
			
		||||
        //qDebug()<< "update imageurl for " <<imageurl << " from " <<testquery.value(0).toString() <<" to "<< filename <<" index " << index << " newcontactnames.length " <<newcontactnames.length();
 | 
			
		||||
        QSqlQuery query("UPDATE contacts SET profile_image='"+ filename +"' WHERE profile_image_url ='"+imageurl+ "' AND username = '" +username+"'",m_db);
 | 
			
		||||
        query.exec();
 | 
			
		||||
        if (index==(newcontactnames.length()-1)){
 | 
			
		||||
            newcontactnames.clear();
 | 
			
		||||
            newcontactimagelinks.clear();
 | 
			
		||||
            if(m_updateInterval!=0){
 | 
			
		||||
                m_db.close();
 | 
			
		||||
                m_db.removeDatabase(m_db.connectionName());
 | 
			
		||||
                emit quitapp();
 | 
			
		||||
                alarm.setAlarm(m_updateInterval);
 | 
			
		||||
            };
 | 
			
		||||
                syncindex+=1;
 | 
			
		||||
                startsync();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QJsonObject UPDATENEWS::findNotificationContact(QString contacturl){
 | 
			
		||||
    QSqlQuery query("SELECT id,url FROM contacts WHERE url='"+contacturl+"' AND username='"+ username+"'",m_db);
 | 
			
		||||
    query.first();
 | 
			
		||||
    QJsonObject contact{
 | 
			
		||||
        {"id", query.value(0).toInt()},
 | 
			
		||||
        {"url", query.value(1).toString()}
 | 
			
		||||
    };
 | 
			
		||||
    return contact;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QList <QJsonValue> UPDATENEWS::findNewContacts(QJsonDocument news){
 | 
			
		||||
    QSqlQuery query("SELECT profile_image_url FROM contacts",m_db);
 | 
			
		||||
    QList<QString> imageurls;
 | 
			
		||||
| 
						 | 
				
			
			@ -231,46 +405,46 @@ QList <QJsonValue> UPDATENEWS::findNewContacts(QJsonDocument news){
 | 
			
		|||
        imageurls.append(query.value(0).toString());
 | 
			
		||||
    }
 | 
			
		||||
    QList<QJsonValue> newcontacts;
 | 
			
		||||
    qDebug()<<"updatenews findcontacts count "<<news.array().count();
 | 
			
		||||
    //qDebug()<<"updatenews findcontacts news count "<<news.array().count();
 | 
			
		||||
 | 
			
		||||
    for (int i=0; i<news.array().count();i++){
 | 
			
		||||
        //main contacts
 | 
			
		||||
        if(imageurls.contains(news[i]["user"]["profile_image_url"].toString()) || newcontactimagelinks.contains(news[i]["user"]["profile_image_url"].toString())){
 | 
			
		||||
        if(imageurls.contains(news[i]["user"]["profile_image_url"].toString().section('?',0,0)) || newcontactimagelinks.contains(news[i]["user"]["profile_image_url"].toString().section('?',0,0))){
 | 
			
		||||
            }
 | 
			
		||||
        else{
 | 
			
		||||
            newcontacts.append(news[i]["user"]);
 | 
			
		||||
            newcontactimagelinks.append(news[i]["user"]["profile_image_url"].toString());
 | 
			
		||||
            newcontactimagelinks.append(news[i]["user"]["profile_image_url"].toString().section('?',0,0));
 | 
			
		||||
            newcontactnames.append(news[i]["user"]["screen_name"].toString());
 | 
			
		||||
        }
 | 
			
		||||
        //like/dislike contacts
 | 
			
		||||
        if (news[i].toObject().contains("friendica_activities") ){
 | 
			
		||||
            for (int a=0; a < news[i]["friendica_activities"]["like"].toArray().count();a++){
 | 
			
		||||
                if(imageurls.contains(news[i]["friendica_activities"]["like"][a]["profile_image_url"].toString()) || newcontactimagelinks.contains(news[i]["friendica_activities"]["like"][a]["profile_image_url"].toString())){
 | 
			
		||||
                if(imageurls.contains(news[i]["friendica_activities"]["like"][a]["profile_image_url"].toString().section('?',0,0)) || newcontactimagelinks.contains(news[i]["friendica_activities"]["like"][a]["profile_image_url"].toString().section('?',0,0))){
 | 
			
		||||
                    }
 | 
			
		||||
                else{
 | 
			
		||||
                    newcontacts.append(news[i]["friendica_activities"]["like"][a]);
 | 
			
		||||
                    newcontactimagelinks.append(news[i]["friendica_activities"]["like"][a]["profile_image_url"].toString());
 | 
			
		||||
                    newcontactimagelinks.append(news[i]["friendica_activities"]["like"][a]["profile_image_url"].toString().section('?',0,0));
 | 
			
		||||
                    newcontactnames.append(news[i]["friendica_activities"][a]["screen_name"].toString());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            for (int b=0; b < news[i]["friendica_activities"]["dislike"].toArray().count();b++){
 | 
			
		||||
                if(imageurls.contains(news[i]["friendica_activities"]["dislike"][b]["profile_image_url"].toString()) || newcontactimagelinks.contains(news[i]["friendica_activities"]["dislike"][b]["profile_image_url"].toString())){
 | 
			
		||||
                if(imageurls.contains(news[i]["friendica_activities"]["dislike"][b]["profile_image_url"].toString().section('?',0,0)) || newcontactimagelinks.contains(news[i]["friendica_activities"]["dislike"][b]["profile_image_url"].toString().section('?',0,0))){
 | 
			
		||||
                    }
 | 
			
		||||
                else{
 | 
			
		||||
                    newcontacts.append(news[i]["friendica_activities"]["dislike"][b]);
 | 
			
		||||
                    newcontactimagelinks.append(news[i]["friendica_activities"]["dislike"][b]["profile_image_url"].toString());
 | 
			
		||||
                    newcontactimagelinks.append(news[i]["friendica_activities"]["dislike"][b]["profile_image_url"].toString().section('?',0,0));
 | 
			
		||||
                    newcontactnames.append(news[i]["friendica_activities"][b]["screen_name"].toString());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //owner contacts
 | 
			
		||||
        if (news[i].toObject().contains("friendica_owner") ){
 | 
			
		||||
            if(imageurls.contains(news[i]["friendica_owner"]["profile_image_url"].toString()) || newcontactimagelinks.contains(news[i]["friendica_owner"]["profile_image_url"].toString())){
 | 
			
		||||
        if (news[i].toObject().contains("friendica_author") ){
 | 
			
		||||
            if(imageurls.contains(news[i]["friendica_author"]["profile_image_url"].toString().section('?',0,0)) || newcontactimagelinks.contains(news[i]["friendica_owner"]["profile_image_url"].toString().section('?',0,0))){
 | 
			
		||||
                }
 | 
			
		||||
            else{
 | 
			
		||||
                newcontacts.append(news[i]["friendica_owner"]);
 | 
			
		||||
                newcontactimagelinks.append(news[i]["friendica_owner"]["profile_image_url"].toString());
 | 
			
		||||
                newcontactnames.append(news[i]["friendica_owner"]["screen_name"].toString());
 | 
			
		||||
                newcontacts.append(news[i]["friendica_author"]);
 | 
			
		||||
                newcontactimagelinks.append(news[i]["friendica_author"]["profile_image_url"].toString().section('?',0,0));
 | 
			
		||||
                newcontactnames.append(news[i]["friendica_author"]["screen_name"].toString());
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -296,8 +470,8 @@ void UPDATENEWS::updateContacts(QList<QJsonValue> contacts){
 | 
			
		|||
            query.bindValue(2, contact["screen_name"]);
 | 
			
		||||
            query.bindValue(3, contact["location"]);
 | 
			
		||||
            query.bindValue(4, currentTime);
 | 
			
		||||
            query.bindValue(5, contact["profile_image_url"]);
 | 
			
		||||
            if(contact["description"].isNull() ){query.bindValue(6,"");}else{query.bindValue(6, contact["description"].toString().toUtf8().toBase64());};
 | 
			
		||||
            query.bindValue(5, contact["profile_image_url"].toString().section('?',0,0));
 | 
			
		||||
            if(contact["description"].isNull() ){query.bindValue(6,"");}else{query.bindValue(6, contact["description"].toString().toUtf8().toBase64());}
 | 
			
		||||
            query.bindValue(7,contact["protected"].toBool());
 | 
			
		||||
            query.bindValue(8,contact["followers_count"].toInt());
 | 
			
		||||
            query.bindValue(9,contact["friends_count"].toInt());
 | 
			
		||||
| 
						 | 
				
			
			@ -317,7 +491,7 @@ void UPDATENEWS::updateContacts(QList<QJsonValue> contacts){
 | 
			
		|||
            query.bindValue(21,contact["network"]);
 | 
			
		||||
            qint64 timestamp=0;
 | 
			
		||||
            QString timestamphelper=contact["profile_image_url"].toString();
 | 
			
		||||
            try {timestamp=timestamphelper.mid(timestamphelper.indexOf("?ts")+4,timestamphelper.length()).toUInt();} catch(...){};
 | 
			
		||||
            try {timestamp=timestamphelper.mid(timestamphelper.indexOf("?ts")+4,timestamphelper.length()).toUInt();} catch(...){}
 | 
			
		||||
            query.bindValue(22,timestamp);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -334,8 +508,8 @@ void UPDATENEWS::updateContacts(QList<QJsonValue> contacts){
 | 
			
		|||
            query.bindValue(3, contact["screen_name"]);
 | 
			
		||||
            query.bindValue(4, contact["location"]);
 | 
			
		||||
            query.bindValue(5, currentTime);
 | 
			
		||||
            query.bindValue(6, contact["profile_image_url"]);
 | 
			
		||||
            if(contact["description"].isNull() ){query.bindValue(7,"");}else{query.bindValue(7, contact["description"].toString().toUtf8().toBase64());};
 | 
			
		||||
            query.bindValue(6, contact["profile_image_url"].toString().section('?',0,0));
 | 
			
		||||
            if(contact["description"].isNull() ){query.bindValue(7,"");}else{query.bindValue(7, contact["description"].toString().toUtf8().toBase64());}
 | 
			
		||||
            query.bindValue(8,"none");
 | 
			
		||||
            query.bindValue(9, contact["url"].toString());
 | 
			
		||||
            query.bindValue(10,contact["protected"].toBool());
 | 
			
		||||
| 
						 | 
				
			
			@ -358,19 +532,12 @@ void UPDATENEWS::updateContacts(QList<QJsonValue> contacts){
 | 
			
		|||
            query.bindValue(25, 0);
 | 
			
		||||
            qint64 timestamp=0;
 | 
			
		||||
            QString timestamphelper=contact["profile_image_url"].toString();
 | 
			
		||||
            try {timestamp=timestamphelper.mid(timestamphelper.indexOf("?ts")+4,timestamphelper.length()).toUInt();} catch(...){};
 | 
			
		||||
            try {timestamp=timestamphelper.mid(timestamphelper.indexOf("?ts")+4,timestamphelper.length()).toUInt();} catch(...){}
 | 
			
		||||
            query.bindValue(26,timestamp);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        query.exec() ;
 | 
			
		||||
    }
 | 
			
		||||
        emit this->success(m_api);
 | 
			
		||||
    if ((contacts.count()==0) && (m_updateInterval!=0)){
 | 
			
		||||
        m_db.close();
 | 
			
		||||
        m_db.removeDatabase(m_db.connectionName());
 | 
			
		||||
        emit quitapp();
 | 
			
		||||
        alarm.setAlarm(m_updateInterval);
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QString UPDATENEWS::url() const
 | 
			
		||||
| 
						 | 
				
			
			@ -380,6 +547,7 @@ QString UPDATENEWS::url() const
 | 
			
		|||
 | 
			
		||||
void UPDATENEWS::startImagedownload()
 | 
			
		||||
{
 | 
			
		||||
    //qDebug() << "start image download";
 | 
			
		||||
    xhr.setDownloadtype("contactlist");
 | 
			
		||||
    xhr.setFilelist(newcontactimagelinks);
 | 
			
		||||
    xhr.setContactlist(newcontactnames);
 | 
			
		||||
| 
						 | 
				
			
			@ -389,11 +557,12 @@ void UPDATENEWS::startImagedownload()
 | 
			
		|||
 | 
			
		||||
void UPDATENEWS::showError(QString data, QString url,QString api, int code )
 | 
			
		||||
{
 | 
			
		||||
    qDebug() << "showerror " << api << " data " << data;
 | 
			
		||||
    emit this->error(api,data);
 | 
			
		||||
    if(m_updateInterval!=0){
 | 
			
		||||
        m_db.close();
 | 
			
		||||
        m_db.removeDatabase(m_db.connectionName());
 | 
			
		||||
        emit quitapp();
 | 
			
		||||
        alarm.setAlarm(m_updateInterval);
 | 
			
		||||
    };
 | 
			
		||||
    if (api!=m_api || xhr.downloadtype()!=""){} else{
 | 
			
		||||
        if(m_updateInterval!=0){
 | 
			
		||||
            syncindex+=1;
 | 
			
		||||
            startsync();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,7 +37,7 @@
 | 
			
		|||
#include <QSqlDatabase>
 | 
			
		||||
#include "xhr.h"
 | 
			
		||||
#include "alarm.h"
 | 
			
		||||
#include "AndroidNative/systemdispatcher.h"
 | 
			
		||||
//#include "AndroidNative/systemdispatcher.h"
 | 
			
		||||
 | 
			
		||||
class UPDATENEWS : public QObject
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -64,6 +64,10 @@ public slots:
 | 
			
		|||
    void setDatabase();
 | 
			
		||||
    void login();
 | 
			
		||||
    void timeline();
 | 
			
		||||
    void replies();
 | 
			
		||||
    void startsync();
 | 
			
		||||
    void directmessages();
 | 
			
		||||
    void notifications();
 | 
			
		||||
    //void startservice(QString type,QVariantMap map);
 | 
			
		||||
    void startImagedownload();
 | 
			
		||||
    void updateImageLocation(QString downloadtype,QString imageurl, QString filename, int index);
 | 
			
		||||
| 
						 | 
				
			
			@ -76,8 +80,12 @@ private:
 | 
			
		|||
    QString m_imagedir;
 | 
			
		||||
    QString m_login;
 | 
			
		||||
    QString username;
 | 
			
		||||
    int syncindex;
 | 
			
		||||
    QSqlDatabase m_db;
 | 
			
		||||
    QList<QString> synclist;
 | 
			
		||||
    QList <QString> notifylist;
 | 
			
		||||
    QList<QJsonValue> findNewContacts(QJsonDocument news);
 | 
			
		||||
    QJsonObject findNotificationContact(QString imagelink);
 | 
			
		||||
    int m_updateInterval;
 | 
			
		||||
    //void timeline();
 | 
			
		||||
    //void store(QByteArray serverreply,QString apiname);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -154,7 +154,7 @@ QString XHR::downloadtype() const
 | 
			
		|||
    return m_downloadtype;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QString XHR::networktype() const
 | 
			
		||||
QString XHR::networktype()
 | 
			
		||||
{
 | 
			
		||||
    return nc.bearerTypeFamily() + nc.bearerTypeName();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -184,7 +184,6 @@ void XHR::download()
 | 
			
		|||
        request.setRawHeader("Authorization", headerData.toLocal8Bit());
 | 
			
		||||
    }
 | 
			
		||||
    request.setUrl(requrl);
 | 
			
		||||
    //qDebug() << requrl;
 | 
			
		||||
    reply = manager.get(request);
 | 
			
		||||
    reply->ignoreSslErrors();
 | 
			
		||||
    connect(reply, &QNetworkReply::readyRead,this, &XHR::onReadyRead);
 | 
			
		||||
| 
						 | 
				
			
			@ -202,10 +201,11 @@ void XHR::get()
 | 
			
		|||
    while(i.hasNext()) {
 | 
			
		||||
        i.next();
 | 
			
		||||
        query.addQueryItem(i.key(), i.value());
 | 
			
		||||
        //qDebug()<<i.key() << " value "<< i.value();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    QUrl requrl(m_url+m_api);
 | 
			
		||||
    //qDebug() << requrl;
 | 
			
		||||
    //qDebug() << "API "<< requrl<<m_api;
 | 
			
		||||
    requrl.setQuery(query);
 | 
			
		||||
    QByteArray loginData = m_login.toLocal8Bit().toBase64();
 | 
			
		||||
    QString headerData = "Basic " + loginData;
 | 
			
		||||
| 
						 | 
				
			
			@ -229,7 +229,7 @@ void XHR::getlist()
 | 
			
		|||
        else {
 | 
			
		||||
            XHR::setUrl(m_filelist.at(dlindex));}
 | 
			
		||||
        XHR::download();
 | 
			
		||||
    } else {dlindex=0;}
 | 
			
		||||
    } else {dlindex=0;m_downloadtype="";m_contactlist.clear();m_filelist.clear();}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -297,6 +297,7 @@ void XHR::onReplySuccess()
 | 
			
		|||
 | 
			
		||||
void XHR::onRequestFinished()
 | 
			
		||||
{
 | 
			
		||||
    qDebug()<<"download requestFinished ";
 | 
			
		||||
    // Save the file here
 | 
			
		||||
    if (buffer.isNull()){qDebug() << "File empty"<<m_url; buffer.clear(); emit this->error(m_downloadtype,m_url,m_api,1);}
 | 
			
		||||
    else if (m_downloadtype=="picturelist") {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -49,7 +49,7 @@ class XHR : public QObject
 | 
			
		|||
    Q_PROPERTY(QList<QString> contactlist READ contactlist WRITE setContactlist NOTIFY contactlistChanged)
 | 
			
		||||
    Q_PROPERTY(QList<QString> filelist READ filelist WRITE setFilelist NOTIFY filelistChanged)
 | 
			
		||||
    Q_PROPERTY(QString downloadtype READ downloadtype WRITE setDownloadtype NOTIFY downloadtypeChanged)
 | 
			
		||||
    Q_PROPERTY(QString networktype READ networktype NOTIFY networktypeChanged)
 | 
			
		||||
    Q_PROPERTY(QString networktype READ networktype() NOTIFY networktypeChanged)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
| 
						 | 
				
			
			@ -65,7 +65,7 @@ public:
 | 
			
		|||
    QList<QString> filelist() const;
 | 
			
		||||
    QString imagedir() const;
 | 
			
		||||
    QString downloadtype() const;
 | 
			
		||||
    QString networktype() const;
 | 
			
		||||
    QString networktype();
 | 
			
		||||
 | 
			
		||||
signals:
 | 
			
		||||
    void urlChanged();
 | 
			
		||||
| 
						 | 
				
			
			@ -98,6 +98,7 @@ public slots:
 | 
			
		|||
    void get();
 | 
			
		||||
    void getlist();
 | 
			
		||||
    void download();
 | 
			
		||||
 | 
			
		||||
//    void networktype();
 | 
			
		||||
 | 
			
		||||
private slots:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -125,10 +125,11 @@ function friendicaRemoteAuthRequest(login,url,c_url,rootwindow,callback) {
 | 
			
		|||
 | 
			
		||||
function readData(database,table,username,callback,filter,filtervalue, sort) { // reads and applies data from DB
 | 
			
		||||
 if (filter){
 | 
			
		||||
 var where = " AND "+ filter +" = '" + filtervalue+"'";
 | 
			
		||||
    if (username){var where = " AND "+ filter +" = '" + filtervalue+"'";} else{
 | 
			
		||||
     var where = " WHERE "+ filter +" = '" + filtervalue+"'";}
 | 
			
		||||
 } else { var where="";}
 | 
			
		||||
 if (username){
 | 
			
		||||
 var user = ' where username= "'+ username +'"';
 | 
			
		||||
    var user = ' where username= "'+ username +'"';
 | 
			
		||||
 } else { var user='';}
 | 
			
		||||
 | 
			
		||||
 if (sort){
 | 
			
		||||
| 
						 | 
				
			
			@ -138,7 +139,7 @@ function readData(database,table,username,callback,filter,filtervalue, sort) { /
 | 
			
		|||
 if(!db) { return; }
 | 
			
		||||
 db.transaction( function(tx) {
 | 
			
		||||
     //print('select * from '+table+user+where+sortparam);
 | 
			
		||||
        var rsArray=[];
 | 
			
		||||
     var rsArray=[];
 | 
			
		||||
     var rs = tx.executeSql('select * from '+table+user+where+sortparam);
 | 
			
		||||
     for(var i = 0; i < rs.rows.length; i++) {
 | 
			
		||||
         rsArray.push(rs.rows.item(i))
 | 
			
		||||
| 
						 | 
				
			
			@ -165,7 +166,7 @@ var where = " AND "+ filter +" = '" + filtervalue+"'";
 | 
			
		|||
 });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function showMessage(header,message,rootwindow){print(message);
 | 
			
		||||
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.Dialogs 1.2; MessageDialog{ visible: true; title:"'+header+'";standardButtons: StandardButton.Ok; text:" '+cleanmessage+'"}';
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,7 +36,7 @@ function showFriends(db) {
 | 
			
		|||
}
 | 
			
		||||
function displayFriends(obj){
 | 
			
		||||
     for (var i=0; i<obj.length; i++){
 | 
			
		||||
                print(obj[i]);
 | 
			
		||||
                //print(obj[i]);
 | 
			
		||||
                if (obj[i]) {friendsModel.append({"friendName": obj[i]});
 | 
			
		||||
                };
 | 
			
		||||
         
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,16 +65,21 @@ function requestGroups(login,database,rootwindow,callback){
 | 
			
		|||
        });
 | 
			
		||||
})}
 | 
			
		||||
 | 
			
		||||
function listFriends(login,database,callback){
 | 
			
		||||
function listFriends(login,database,callback,filter){
 | 
			
		||||
    var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
 | 
			
		||||
        db.transaction( function(tx) {
 | 
			
		||||
             var result = tx.executeSql('SELECT * from contacts WHERE username="'+login.username+'" AND isFriend>0'); // check for friends
 | 
			
		||||
             var contactlist=[];
 | 
			
		||||
             for (var i=0;i<result.rows.length;i++){
 | 
			
		||||
                 contactlist.push(result.rows.item(i))
 | 
			
		||||
             }
 | 
			
		||||
             callback(contactlist)
 | 
			
		||||
        });
 | 
			
		||||
    var filtertext='';
 | 
			
		||||
    try {filtertext=' AND screen_name like "' + filter+'%"'}catch(e){}
 | 
			
		||||
    db.transaction( function(tx) {
 | 
			
		||||
        //var result = tx.executeSql('SELECT * from contacts WHERE username="'+login.username+'" AND isFriend>0'+filtertext);
 | 
			
		||||
        //print('SELECT * from contacts WHERE username="'+login.username+'"'+filtertext);
 | 
			
		||||
        var result = tx.executeSql('SELECT * from contacts WHERE username="'+login.username+'" AND isFriend>0'+filtertext);
 | 
			
		||||
        // check for friends
 | 
			
		||||
        var contactlist=[];
 | 
			
		||||
        for (var i=0;i<result.rows.length;i++){
 | 
			
		||||
            contactlist.push(result.rows.item(i))
 | 
			
		||||
        }
 | 
			
		||||
        callback(contactlist)
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function deleteGroup(login,database,rootwindow,group, callback){
 | 
			
		||||
| 
						 | 
				
			
			@ -88,14 +93,14 @@ function deleteGroup(login,database,rootwindow,group, callback){
 | 
			
		|||
        });
 | 
			
		||||
}})}
 | 
			
		||||
 | 
			
		||||
function getLastNews(login,database){
 | 
			
		||||
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
 | 
			
		||||
var lastnewsid=0;
 | 
			
		||||
db.transaction( function(tx) {
 | 
			
		||||
        var result = tx.executeSql('SELECT status_id from news WHERE username="'+login.username+'" AND messagetype=0 ORDER BY status_id  DESC LIMIT 1');
 | 
			
		||||
        try{lastnewsid=result.rows.item(0).status_id;}catch(e){};
 | 
			
		||||
        return lastnewsid
 | 
			
		||||
    })
 | 
			
		||||
function getLastNews(login,database,callback){
 | 
			
		||||
    var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
 | 
			
		||||
    var lastnewsid=0;
 | 
			
		||||
    db.transaction( function(tx) {
 | 
			
		||||
            var result = tx.executeSql('SELECT status_id from news WHERE username="'+login.username+'" AND messagetype=0 ORDER BY status_id  DESC LIMIT 1');
 | 
			
		||||
            try{lastnewsid=result.rows.item(0).status_id;}catch(e){print(e)};
 | 
			
		||||
            callback(lastnewsid)
 | 
			
		||||
        })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -163,11 +168,11 @@ function findNewContacts(news,contacts){
 | 
			
		|||
            }
 | 
			
		||||
         }
 | 
			
		||||
 | 
			
		||||
         if(news[i].hasOwnProperty('friendica_owner')){
 | 
			
		||||
             var owner_url=news[i].friendica_owner.url;
 | 
			
		||||
         if(news[i].hasOwnProperty('friendica_author')){
 | 
			
		||||
             var owner_url=news[i].friendica_author.url;
 | 
			
		||||
             if(contacts.indexOf(owner_url)==-1 &&  !(inArray(newContacts,"url",owner_url))){
 | 
			
		||||
                 news[i].friendica_owner.isFriend=0;
 | 
			
		||||
                 newContacts.push(news[i].friendica_owner);
 | 
			
		||||
                 news[i].friendica_author.isFriend=0;
 | 
			
		||||
                 newContacts.push(news[i].friendica_author);
 | 
			
		||||
                 }
 | 
			
		||||
         }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -178,7 +183,7 @@ function storeNews(login,database,news,rootwindow){
 | 
			
		|||
// save news after contacts download, call next function
 | 
			
		||||
    var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
 | 
			
		||||
    for (var i=0;i<news.length;i++){
 | 
			
		||||
        //print('store news data for ' + news[i].id+JSON.stringify(news[i].friendica_activities));
 | 
			
		||||
        //print('store news data for ' + news[i].id+JSON.stringify(news[i].friendica_author));
 | 
			
		||||
        //var ausdruck=news[i];
 | 
			
		||||
        var likearray=[];var dislikearray=[];var attendyesarray=[];var attendnoarray=[];var attendmaybearray=[];
 | 
			
		||||
        if(news[i].hasOwnProperty('friendica_activities')){
 | 
			
		||||
| 
						 | 
				
			
			@ -191,12 +196,12 @@ function storeNews(login,database,news,rootwindow){
 | 
			
		|||
        var friendica_activities=[likearray,dislikearray,attendyesarray,attendnoarray,attendmaybearray]
 | 
			
		||||
        var attachments="";if (news[i].attachments){attachments=Qt.btoa(JSON.stringify(news[i].attachments))}
 | 
			
		||||
        db.transaction( function(tx) {
 | 
			
		||||
            var result = tx.executeSql('SELECT * from news where username="'+login.username+'" AND status_id = "'+news[i].id+'" AND messagetype=0'); // check for news id
 | 
			
		||||
            var result = tx.executeSql('SELECT * from news where username="'+login.username+'" AND status_id = "'+news[i].id+'" AND messagetype='+news[i].messagetype); // check for news id
 | 
			
		||||
            if(result.rows.length === 1) {// use update
 | 
			
		||||
                //print(news[i].id +' news exists, update it'+'UPDATE news SET username="'+login.username+'", messagetype=0, text="'+Qt.btoa(news[i].text)+'", created_at="'+Date.parse(cleanDate(news[i].created_at))+'", in_reply_to_status_id="'+news[i].in_reply_to_status_id+'", source="'+news[i].source+'", status_id="'+news[i].id+'", in_reply_to_user_id="'+news[i].in_reply_to_user_id+'", geo="'+news[i].geo+'", favorited="'+news[i].favorited+'", uid="'+news[i].user.id+'", statusnet_html="'+Qt.btoa(news[i].status_html)+'", statusnet_conversation_id="'+news[i].statusnet_conversation_id+'",friendica_activities="'+Qt.btoa(JSON.stringify(friendica_activities))+'",attachments="'+attachments+'",friendica_owner="'+news[i].friendica_owner.url+'" where username="'+login.username+'" AND status_id="'+news[i].status_id+'" AND messagetype=0')
 | 
			
		||||
                result = tx.executeSql('UPDATE news SET username="'+login.username+'", messagetype=0, text="'+Qt.btoa(news[i].text)+'", created_at="'+news[i].created_at+'", in_reply_to_status_id="'+news[i].in_reply_to_status_id+'", source="'+news[i].source+'", status_id="'+news[i].id+'", in_reply_to_user_id="'+news[i].in_reply_to_user_id+'", geo="'+news[i].geo+'", favorited="'+news[i].favorited+'", uid="'+news[i].user.id+'", statusnet_html="'+Qt.btoa(news[i].status_html)+'", statusnet_conversation_id="'+news[i].statusnet_conversation_id+'",friendica_activities="'+Qt.btoa(JSON.stringify(friendica_activities))+'",attachments="'+attachments+'",friendica_owner="'+news[i].friendica_owner.url+'" where username="'+login.username+'" AND status_id="'+news[i].status_id+'" AND messagetype=0');
 | 
			
		||||
                result = tx.executeSql('UPDATE news SET username="'+login.username+'", messagetype='+news[i].messagetype+', text="'+Qt.btoa(news[i].text)+'", created_at="'+news[i].created_at+'", in_reply_to_status_id="'+news[i].in_reply_to_status_id+'", source="'+news[i].source+'", status_id="'+news[i].id+'", in_reply_to_user_id="'+news[i].in_reply_to_user_id+'", geo="'+news[i].geo+'", favorited="'+news[i].favorited+'", uid="'+news[i].user.id+'", statusnet_html="'+Qt.btoa(news[i].status_html)+'", statusnet_conversation_id="'+news[i].statusnet_conversation_id+'",friendica_activities="'+Qt.btoa(JSON.stringify(friendica_activities))+'",attachments="'+attachments+'",friendica_owner="'+news[i].friendica_author.url+'" where username="'+login.username+'" AND status_id="'+news[i].status_id+'" AND messagetype=0');
 | 
			
		||||
            } else {// use insert
 | 
			
		||||
                result = tx.executeSql('INSERT INTO news (username,messagetype,text,created_at,in_reply_to_status_id,source,status_id,in_reply_to_user_id,geo,favorited,uid,statusnet_html,statusnet_conversation_id,friendica_activities,friendica_activities_self,attachments,friendica_owner) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [login.username,0,Qt.btoa(news[i].text),news[i].created_at, news[i].in_reply_to_status_id, news[i].source, news[i].id,news[i].in_reply_to_user_id,news[i].geo,news[i].favorited, news[i].user.id,Qt.btoa(news[i].statusnet_html),news[i].statusnet_conversation_id, Qt.btoa(JSON.stringify(friendica_activities)),"[]",attachments,news[i].friendica_owner.url])}})
 | 
			
		||||
                result = tx.executeSql('INSERT INTO news (username,messagetype,text,created_at,in_reply_to_status_id,source,status_id,in_reply_to_user_id,geo,favorited,uid,statusnet_html,statusnet_conversation_id,friendica_activities,friendica_activities_self,attachments,friendica_owner) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [login.username,news[i].messagetype,Qt.btoa(news[i].text),news[i].created_at, news[i].in_reply_to_status_id, news[i].source, news[i].id,news[i].in_reply_to_user_id,news[i].geo,news[i].favorited, news[i].user.id,Qt.btoa(news[i].statusnet_html),news[i].statusnet_conversation_id, Qt.btoa(JSON.stringify(friendica_activities)),"[]",attachments,news[i].friendica_author.url])}})
 | 
			
		||||
            }
 | 
			
		||||
   // getDirectMessage(login,database,rootwindow,callback)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -260,35 +265,41 @@ function getActivitiesUserData(allcontacts,userUrlArray){//print(JSON.stringify(
 | 
			
		|||
    return helpArray
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function newsfromdb(database,user,callback,contact,stop_time){
 | 
			
		||||
function newsfromdb(database,login,messagetype,callback,contact,stop_time){
 | 
			
		||||
// return news before stop_time (used by More button), in brackets of 20 entries, or by specified contact
 | 
			
		||||
    var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
 | 
			
		||||
    db.transaction( function(tx) {
 | 
			
		||||
    if (!stop_time){var stop="";
 | 
			
		||||
        try{var rs = tx.executeSql('select created_at from news WHERE username="'+user+'" ORDER BY created_at DESC LIMIT 1');
 | 
			
		||||
        stop="<="+rs.rows.item(0).created_at}catch(e){stop="<99999999999999"}}
 | 
			
		||||
    else{var stop="<"+stop_time}
 | 
			
		||||
    var contactfilter="";if(contact){contactfilter=" AND (uid='"+contact+"' OR friendica_owner='"+contact+"')"}
 | 
			
		||||
    //print('select * from news WHERE username="'+username+'" AND created_at'+stop+contactfilter+' ORDER BY created_at DESC LIMIT 20');
 | 
			
		||||
    var newsrs=tx.executeSql('select * from news WHERE username="'+user+'" AND created_at'+stop+contactfilter+' ORDER BY created_at DESC LIMIT 20');
 | 
			
		||||
    var newsArray=[];
 | 
			
		||||
    var allcontacts=getAllContacts(database,user);
 | 
			
		||||
    for(var i = 0; i < newsrs.rows.length; i++) {
 | 
			
		||||
        newsArray.push(newsrs.rows.item(i));
 | 
			
		||||
        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;
 | 
			
		||||
        newsArray[i]=fetchUsersForNews(database,user,newsArray[i],allcontacts);
 | 
			
		||||
        if (newsArray[i].attachments!==null){newsArray[i].attachments=JSON.parse(Qt.atob(newsArray[i].attachments))};
 | 
			
		||||
    }
 | 
			
		||||
  callback(newsArray)});
 | 
			
		||||
        var result = tx.executeSql('SELECT status_id from news WHERE username="'+login.username+'" AND messagetype=0 ORDER BY status_id  DESC LIMIT 1');
 | 
			
		||||
        try{var lastid=result.rows.item(0).status_id;}catch(e){var lastid=0};
 | 
			
		||||
 | 
			
		||||
        if (!stop_time){var stop="";
 | 
			
		||||
            try{var rs = tx.executeSql('select created_at from news WHERE username="'+login.username+'" AND messagetype="'+messagetype+'" ORDER BY created_at DESC LIMIT 1');
 | 
			
		||||
            stop="<="+rs.rows.item(0).created_at}catch(e){stop="<99999999999999"}}
 | 
			
		||||
        else{var stop="<"+stop_time}
 | 
			
		||||
        var contactfilter="";if(contact){contactfilter=" AND (uid='"+contact+"' OR friendica_owner='"+contact+"')"}
 | 
			
		||||
        //print('select * from news WHERE username="'+username+'" AND created_at'+stop+contactfilter+' ORDER BY created_at DESC LIMIT 20');
 | 
			
		||||
        var newsrs=tx.executeSql('select * from news WHERE username="'+login.username+'" AND messagetype="'+messagetype+'" AND created_at'+stop+contactfilter+' ORDER BY created_at DESC LIMIT 20');
 | 
			
		||||
        var newsArray=[];
 | 
			
		||||
        var allcontacts=getAllContacts(database,login.username);
 | 
			
		||||
 | 
			
		||||
        for(var i = 0; i < newsrs.rows.length; i++) {
 | 
			
		||||
            newsArray.push(newsrs.rows.item(i));
 | 
			
		||||
            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;
 | 
			
		||||
            newsArray[i].friendica_author=newsArray[i].friendica_owner
 | 
			
		||||
            newsArray[i]=fetchUsersForNews(database,login.username,newsArray[i],allcontacts);
 | 
			
		||||
            if (newsArray[i].attachments!="" && newsArray[i].attachments!==null){newsArray[i].attachments=JSON.parse(Qt.atob(newsArray[i].attachments))};
 | 
			
		||||
        }
 | 
			
		||||
    callback(newsArray,lastid)});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function fetchUsersForNews(database,username,news,allcontacts){//print(JSON.stringify(news))
 | 
			
		||||
 | 
			
		||||
function fetchUsersForNews(database,username,news,allcontacts){//print("fetchusers "+JSON.stringify(news))
 | 
			
		||||
    news.user=objFromArray(allcontacts,"id",news.uid);
 | 
			
		||||
    if(news.in_reply_to_user_id){news.reply_user=objFromArray(allcontacts,"id",news.in_reply_to_user_id)}
 | 
			
		||||
    //news.friendica_owner_object=objFromArray(allcontacts,"url",news.friendica_owner);
 | 
			
		||||
    news.friendica_owner=objFromArray(allcontacts,"url",news.friendica_owner);
 | 
			
		||||
    news.friendica_author=objFromArray(allcontacts,"url",news.friendica_author);
 | 
			
		||||
    if (news.messagetype==0){
 | 
			
		||||
       var friendicaArray=JSON.parse(Qt.atob(news.friendica_activities));
 | 
			
		||||
        delete news.friendica_activities;
 | 
			
		||||
| 
						 | 
				
			
			@ -413,7 +424,7 @@ function conversationfromdb(database,user,conversationId,callback){
 | 
			
		|||
            newsArray[i].text=Qt.atob(newsArray[i].text);
 | 
			
		||||
            newsArray[i].id=newsArray[i].status_id;
 | 
			
		||||
            newsArray[i]=fetchUsersForNews(database,user,newsArray[i],allcontacts);
 | 
			
		||||
            if (newsArray[i].attachments!==null){newsArray[i].attachments=JSON.parse(Qt.atob(newsArray[i].attachments))};
 | 
			
		||||
            if (helpernews.attachments!="" && newsArray[i].attachments!==null){newsArray[i].attachments=JSON.parse(Qt.atob(newsArray[i].attachments))};
 | 
			
		||||
        }
 | 
			
		||||
    callback(newsArray)})
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -443,32 +454,36 @@ function requestFavorites(login,database,contacts,rootwindow,callback){
 | 
			
		|||
//            callback(newsArray);
 | 
			
		||||
// }})}
 | 
			
		||||
 | 
			
		||||
function chatsfromdb(database,user,callback,stop_time){
 | 
			
		||||
function chatsfromdb(database,login,messagetype,callback,stop_time){
 | 
			
		||||
 | 
			
		||||
    var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
 | 
			
		||||
    db.transaction( function(tx) {
 | 
			
		||||
    if (!stop_time){var stop="";
 | 
			
		||||
        try{var rs = tx.executeSql('select created_at from news WHERE username="'+username+'" ORDER BY created_at DESC LIMIT 1');
 | 
			
		||||
        try{var rs = tx.executeSql('select created_at from news WHERE username="'+login.username+'" AND messagetype="'+messagetype+'" ORDER BY created_at DESC LIMIT 1');
 | 
			
		||||
        stop="<="+rs.rows.item(0).created_at}catch(e){stop="<99999999999999"}}
 | 
			
		||||
    else{var stop="<"+stop_time}
 | 
			
		||||
     var conversationsrs=tx.executeSql('select DISTINCT statusnet_conversation_id from news WHERE username="'+user+'" AND created_at'+stop+' ORDER BY created_at DESC LIMIT 20'); //+' ORDER BY created_at DESC LIMIT 20');
 | 
			
		||||
    var conversationsrs=tx.executeSql('select DISTINCT statusnet_conversation_id from news WHERE username="'+login.username+'" AND created_at'+stop+' AND messagetype="'+messagetype+'" ORDER BY created_at DESC LIMIT 20'); //+' ORDER BY created_at DESC LIMIT 20');
 | 
			
		||||
    var result = tx.executeSql('SELECT status_id from news WHERE username="'+login.username+'" AND messagetype=0 ORDER BY status_id  DESC LIMIT 1');
 | 
			
		||||
    try{var lastid=result.rows.item(0).status_id;}catch(e){var lastid=0};
 | 
			
		||||
    var conversations=[];
 | 
			
		||||
    for(var i = 0; i < conversationsrs.rows.length; i++) {
 | 
			
		||||
        conversations.push(conversationsrs.rows.item(i).statusnet_conversation_id);
 | 
			
		||||
     }
 | 
			
		||||
    var newsArray=[];
 | 
			
		||||
    var allcontacts=getAllContacts(database,user);
 | 
			
		||||
    var allcontacts=getAllContacts(database,login.username);
 | 
			
		||||
 | 
			
		||||
    for(var j = 0; j< conversations.length; j++) {
 | 
			
		||||
        var newsrs=tx.executeSql('select * from news WHERE username="'+user+'"  AND statusnet_conversation_id="'+conversations[j] +'" ORDER BY created_at ASC');
 | 
			
		||||
        var newsrs=tx.executeSql('select * from news WHERE username="'+login.username+'"  AND statusnet_conversation_id="'+conversations[j] +'" AND messagetype="'+messagetype+'" ORDER BY created_at ASC');
 | 
			
		||||
        var helpernews=newsrs.rows.item(0);
 | 
			
		||||
        helpernews.newscount=newsrs.rows.length;
 | 
			
		||||
        helpernews=fetchUsersForNews(database,user,helpernews,allcontacts);
 | 
			
		||||
        helpernews=fetchUsersForNews(database,login.username,helpernews,allcontacts);
 | 
			
		||||
        helpernews.statusnet_html=Qt.atob(helpernews.statusnet_html);
 | 
			
		||||
        helpernews.text=Qt.atob(helpernews.text);
 | 
			
		||||
        helpernews.id=helpernews.status_id;
 | 
			
		||||
        if (helpernews.attachments!==null){helpernews.attachments=JSON.parse(Qt.atob(helpernews.attachments))};
 | 
			
		||||
        if (helpernews.attachments!="" && helpernews.attachments!==null){helpernews.attachments=JSON.parse(Qt.atob(helpernews.attachments))};
 | 
			
		||||
        newsArray.push(helpernews);
 | 
			
		||||
    }
 | 
			
		||||
    callback(newsArray);
 | 
			
		||||
    callback(newsArray,lastid);
 | 
			
		||||
})}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -495,7 +510,7 @@ function allchatsfromdb(database,user,callback){
 | 
			
		|||
        helpernews.statusnet_html=Qt.atob(helpernews.statusnet_html);
 | 
			
		||||
        helpernews.text=Qt.atob(helpernews.text);
 | 
			
		||||
        helpernews.id=helpernews.status_id;
 | 
			
		||||
        if (helpernews.attachments!==null){helpernews.attachments=JSON.parse(Qt.atob(helpernews.attachments))};
 | 
			
		||||
        if (helpernews.attachments!="" && helpernews.attachments!==null){helpernews.attachments=JSON.parse(Qt.atob(helpernews.attachments))};
 | 
			
		||||
        newsArray.push(helpernews);
 | 
			
		||||
        countArray.push(newsrs.rows.length)
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -520,7 +535,7 @@ function oldchatfromdb(database,user,conversationId,lastpost,allcontacts,callbac
 | 
			
		|||
    helpernews.statusnet_html=Qt.atob(helpernews.statusnet_html);
 | 
			
		||||
    helpernews.text=Qt.atob(helpernews.text);
 | 
			
		||||
    helpernews.id=helpernews.status_id;
 | 
			
		||||
    if (helpernews.attachments!==null){helpernews.attachments=JSON.parse(Qt.atob(helpernews.attachments))};
 | 
			
		||||
    if (helpernews.attachments!="" && helpernews.attachments!==null){helpernews.attachments=JSON.parse(Qt.atob(helpernews.attachments))};
 | 
			
		||||
    callback(helpernews,newscount);}
 | 
			
		||||
//    var conversationobject={news:helpernews,newscount:newscount};
 | 
			
		||||
//    return conversationobject;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,9 +53,12 @@ else{
 | 
			
		|||
//            newsitemobject.user.profile_image_url="";
 | 
			
		||||
//            newsitemobject.user.name="";
 | 
			
		||||
//        }
 | 
			
		||||
        var forumname="";try{if (newsitemobject.messagetype==0&&newsitemobject.hasOwnProperty('friendica_owner')&&((newsitemobject.friendica_owner.url)!=(newsitemobject.user.url))){
 | 
			
		||||
            //print(newsitemobject.friendica_owner+" Friendica Owner "+JSON.stringify(newsitemobject));
 | 
			
		||||
            forumname=" via "+newsitemobject.friendica_owner.name
 | 
			
		||||
        var forumname="";
 | 
			
		||||
        try{if (newsitemobject.messagetype==0&&newsitemobject.hasOwnProperty('friendica_author')&&
 | 
			
		||||
                    ((newsitemobject.friendica_author.url)!=(newsitemobject.user.url))&&((newsitemobject.friendica_author.url)!=null)){
 | 
			
		||||
            print(" Friendica Author "+JSON.stringify(newsitemobject.friendica_author));
 | 
			
		||||
            forumname=" via "+newsitemobject.user.name;
 | 
			
		||||
            newsitemobject.user=newsitemobject.friendica_author;
 | 
			
		||||
        }}catch(e){print("forum name "+e)}
 | 
			
		||||
        var likeText="";var dislikeText="";var attendyesText="";var attendnoText="";var attendmaybeText="";  var self={};
 | 
			
		||||
        try{if (newsitemobject.messagetype==0&&newsitemobject.hasOwnProperty('friendica_activities')){
 | 
			
		||||
| 
						 | 
				
			
			@ -166,7 +169,6 @@ else{
 | 
			
		|||
//      }
 | 
			
		||||
 | 
			
		||||
        newsitemobject.attachmentList=attachmentList;
 | 
			
		||||
 | 
			
		||||
        var seconds=(msg.currentTime-newsitemobject.created_at)/1000;
 | 
			
		||||
        var timestring="";
 | 
			
		||||
        if (seconds<60) {timestring=seconds+" "+qsTr("seconds") +" "+qsTr("ago");}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,7 +38,7 @@
 | 
			
		|||
 | 
			
		||||
function initDatabase(database) { // initialize the database object
 | 
			
		||||
    var db =Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
 | 
			
		||||
    print('initDatabase()'+database[0]+database[1]+database[2]+database[3])
 | 
			
		||||
    //print('initDatabase()'+database[0]+database[1]+database[2]+database[3])
 | 
			
		||||
    db.transaction( function(tx) {
 | 
			
		||||
        //var version=tx.executeSql('PRAGMA user_version');print(JSON.stringify(version.rows.item(0)))
 | 
			
		||||
        tx.executeSql('CREATE TABLE IF NOT EXISTS imageData(username TEXT,id INT, created TEXT,edited TEXT, title TEXT, desc TEXT, album TEXT,filename TEXT, type TEXT, height INT, width INT, profile INT, link TEXT,location TEXT)');
 | 
			
		||||
| 
						 | 
				
			
			@ -194,13 +194,11 @@ function storeConfig(database,obj) { // stores config to DB
 | 
			
		|||
     //print(JSON.stringify(obj));
 | 
			
		||||
     var result = tx.executeSql('SELECT * from config WHERE username="'+obj.username+'"');
 | 
			
		||||
     if(result.rows.length === 1) {// use update
 | 
			
		||||
        var result2 = tx.executeSql('UPDATE config SET server="'+obj.server+'",password="'+obj.password+'", imagestore="'+obj.imagestore+'", maxnews='+obj.maxnews+',  timerInterval='+obj.interval+', newsViewType="'+obj.newsViewType+'", isActive=0 WHERE username="'+obj.username +'"');
 | 
			
		||||
        var result2 = tx.executeSql('UPDATE config SET server="'+obj.server+'",password="'+obj.password+'", imagestore="'+obj.imagestore+'", maxnews=0,  timerInterval=0, newsViewType="'+obj.newsViewType+'", isActive=0 WHERE username="'+obj.username +'"');
 | 
			
		||||
        var result3 = tx.executeSql('UPDATE config SET isActive=1 WHERE username !="'+obj.username +'"');
 | 
			
		||||
        var result4 = tx.executeSql('UPDATE config SET maxnews='+obj.maxnews);
 | 
			
		||||
      } else {// use insert print('... does not exists, create it')
 | 
			
		||||
        var result2 = tx.executeSql('INSERT INTO config VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)', [obj.server, obj.username, obj.password, obj.imagestore, obj.maxnews, obj.interval,obj.newsViewType,0,"[[],[],[],[]]",0,"","",""]);
 | 
			
		||||
        var result2 = tx.executeSql('INSERT INTO config VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)', [obj.server, obj.username, obj.password, obj.imagestore, 0, 0,obj.newsViewType,0,"[[],[],[],[]]",0,"","",""]);
 | 
			
		||||
        var result3 = tx.executeSql('UPDATE config SET isActive=1 WHERE username !="'+obj.username +'"');
 | 
			
		||||
        var result4 = tx.executeSql('UPDATE config SET maxnews='+obj.maxnews);
 | 
			
		||||
        }
 | 
			
		||||
 })}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -283,7 +281,7 @@ function readConfig(database,callback,filter,filtervalue) { // reads config
 | 
			
		|||
            for(var i = 0; i < rs.rows.length; i++) {
 | 
			
		||||
                rsArray.push(rs.rows.item(i))
 | 
			
		||||
            }
 | 
			
		||||
        var rsObject={server:rsArray[0].server,username:rsArray[0].username, password:rsArray[0].password,imagestore:rsArray[0].imagestore,maxnews:rsArray[0].maxnews,isActive:rsArray[0].isActive,timerInterval:rsArray[0].timerInterval, newsViewType:rsArray[0].newsViewType,permissions:JSON.parse(rsArray[0].permissions),maxContactAge:rsArray[0].maxContactAge,APIVersion:rsArray[0].APIVersion,addons:rsArray[0].addons};
 | 
			
		||||
        var rsObject={server:rsArray[0].server,username:rsArray[0].username, password:rsArray[0].password,imagestore:rsArray[0].imagestore,isActive:rsArray[0].isActive, newsViewType:rsArray[0].newsViewType,permissions:JSON.parse(rsArray[0].permissions),maxContactAge:rsArray[0].maxContactAge,APIVersion:rsArray[0].APIVersion,addons:rsArray[0].addons};
 | 
			
		||||
            } else {var rsObject=""}
 | 
			
		||||
        callback(rsObject)}}
 | 
			
		||||
    )
 | 
			
		||||
| 
						 | 
				
			
			@ -318,6 +316,7 @@ function updateglobaloptions(database,key,value){
 | 
			
		|||
                result = tx.executeSql('INSERT INTO globaloptions (k,v) VALUES (?,?)', [key,value])
 | 
			
		||||
        }
 | 
			
		||||
    })
 | 
			
		||||
    root.globaloptions[key]=value;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
function deleteConfig(database,userobj,callback) { // delete user data from DB
 | 
			
		||||
| 
						 | 
				
			
			@ -338,8 +337,9 @@ function deleteConfig(database,userobj,callback) { // delete user data from DB
 | 
			
		|||
function  cleanNews(database,callback){
 | 
			
		||||
     var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
 | 
			
		||||
      db.transaction( function(tx) {
 | 
			
		||||
             var maxnewsrs = tx.executeSql("SELECT DISTINCT maxnews FROM config");
 | 
			
		||||
             var maxnews=maxnewsrs.rows.item(0).maxnews;
 | 
			
		||||
             //var maxnewsrs = tx.executeSql("SELECT DISTINCT maxnews FROM config");
 | 
			
		||||
             var maxnewsrs = tx.executeSql("SELECT v FROM globaloptions WHERE k='max_news'");
 | 
			
		||||
          var maxnews=1000; if(maxnewsrs.rows.length>0){ maxnews=maxnewsrs.rows.item(0).v};
 | 
			
		||||
             var newscountrs = tx.executeSql('SELECT COUNT(*) from news');
 | 
			
		||||
             var newscount = newscountrs.rows.item(0)["COUNT(*)"];//print("newscount "+newscount)
 | 
			
		||||
             if (newscount>maxnews){
 | 
			
		||||
| 
						 | 
				
			
			@ -384,6 +384,7 @@ function updateContactInDB(login,database,isFriend,contact){// for newstab and f
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
function processNews(api,data){
 | 
			
		||||
    //print(api + data);
 | 
			
		||||
    try{var newslist=JSON.parse(data)} catch(e){newsBusy.running=false;};
 | 
			
		||||
    if (data==""){}
 | 
			
		||||
    else if (typeof(newslist)=='undefined'){
 | 
			
		||||
| 
						 | 
				
			
			@ -393,6 +394,7 @@ function processNews(api,data){
 | 
			
		|||
        Helperjs.showMessage(qsTr("JSON status Error"),"API:\n" +login.server+api+"\n Return: \n"+data,root)
 | 
			
		||||
    }
 | 
			
		||||
    else if (!(Array.isArray(newslist))){
 | 
			
		||||
        //print("processNews not array"+newslist+JSON.stringify(newslist));
 | 
			
		||||
        replytimer.restart()
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
| 
						 | 
				
			
			@ -407,6 +409,8 @@ function processNews(api,data){
 | 
			
		|||
                newslist[n].uid=newslist[n].sender.id;
 | 
			
		||||
                newslist[n].statusnet_conversation_id=newslist[n].friendica_parent_uri;
 | 
			
		||||
                newslist[n].user=cleanUser(newslist[n].sender);
 | 
			
		||||
                newslist[n].friendica_owner=newslist[n].user;
 | 
			
		||||
                newslist[n].friendica_author=newslist[n].user;
 | 
			
		||||
                newslist[n].statusnet_html=newslist[n].text;
 | 
			
		||||
        }}
 | 
			
		||||
        else if (api=="/api/friendica/notifications"){
 | 
			
		||||
| 
						 | 
				
			
			@ -418,6 +422,8 @@ function processNews(api,data){
 | 
			
		|||
                    newslist[n].user={"profile_image_url": newslist[n].photo,"name": newslist[n].name," url":newslist[n].url, "created_at":newslist[n].date};
 | 
			
		||||
                    newslist[n].user=cleanUser(newslist[n].user);
 | 
			
		||||
                }
 | 
			
		||||
                newslist[n].friendica_author=newslist[n].user;
 | 
			
		||||
                newslist[n].friendica_owner=newslist[n].user;
 | 
			
		||||
                newslist[n].statusnet_html=newslist[n].msg_html;
 | 
			
		||||
                newslist[n].text=newslist[n].msg;
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -427,8 +433,9 @@ function processNews(api,data){
 | 
			
		|||
            var commentCount=[];
 | 
			
		||||
            for (var n in newslist){
 | 
			
		||||
                newslist[n].created_at=Date.parse(Newsjs.cleanDate(newslist[n].created_at));
 | 
			
		||||
                newslist[n].messagetype=0;
 | 
			
		||||
                newslist[n].user=cleanUser(newslist[n].user)
 | 
			
		||||
                if (api=="/api/statuses/replies"){newslist[n].messagetype=3}else{newslist[n].messagetype=0;}
 | 
			
		||||
                newslist[n].friendica_author=cleanUser(newslist[n].friendica_author);
 | 
			
		||||
                newslist[n].user=cleanUser(newslist[n].user);
 | 
			
		||||
                if(newslist[n].in_reply_to_user_id){newslist[n].reply_user=Newsjs.objFromArray(allcontacts,"id",newslist[n].in_reply_to_user_id)}
 | 
			
		||||
                //print (JSON.stringify(newslist[n].user))
 | 
			
		||||
                if(newslist[n].hasOwnProperty('friendica_activities')){
 | 
			
		||||
| 
						 | 
				
			
			@ -448,8 +455,8 @@ function processNews(api,data){
 | 
			
		|||
                            newslist[n].friendica_activities.attendmaybe[r]=cleanUser(newslist[n].friendica_activities.attendmaybe[r]);
 | 
			
		||||
                        }
 | 
			
		||||
                }
 | 
			
		||||
                if(!(newslist[n].hasOwnProperty('friendica_owner'))){
 | 
			
		||||
                    newslist[n].friendica_owner=newslist[n].user
 | 
			
		||||
                if(!(newslist[n].hasOwnProperty('friendica_author'))){
 | 
			
		||||
                    newslist[n].friendica_author=newslist[n].user
 | 
			
		||||
                }
 | 
			
		||||
                var conversationindex=conversationIds.indexOf(newslist[n].statusnet_conversation_id);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -488,11 +495,13 @@ function processNews(api,data){
 | 
			
		|||
        else if (api=="/api/statuses/user_timeline"){
 | 
			
		||||
            newstab.contactposts=newslist
 | 
			
		||||
        }
 | 
			
		||||
        else if (newstab.newstabstatus==="Conversations"){
 | 
			
		||||
            showNews(chatlist);root.news=newslist}
 | 
			
		||||
        else {showNews(newslist);root.news=newslist};
 | 
			
		||||
        else if ((api!="/api/direct_messages/all")&&(api!="/api/friendica/notifications")&&(newstab.newstabstatus==="Conversations")){
 | 
			
		||||
            showNews(chatlist);root.news=newslist
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            showNews(newslist);root.news=newslist};
 | 
			
		||||
 | 
			
		||||
        var newstabarray=["Conversations","Favorites","Timeline","DirectMessage"];
 | 
			
		||||
        var newstabarray=["Conversations","Favorites","Timeline","DirectMessage","Replies"];
 | 
			
		||||
        if (newstabarray.indexOf(newstab.newstabstatus)>-1){contacttimer.start()}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -509,26 +518,28 @@ function cleanUser(user){
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
function updateView(viewtype){
 | 
			
		||||
    newsBusy.running=true;
 | 
			
		||||
    //messageSend.state="";
 | 
			
		||||
    //newsBusy.running=true;
 | 
			
		||||
    //downloadNotice.text="xhr start "+Date.now()
 | 
			
		||||
    switch(viewtype){
 | 
			
		||||
        case "Conversations":
 | 
			
		||||
            var lastnews=Newsjs.getLastNews(login,db);
 | 
			
		||||
            xhr.setLogin(login.username+":"+Qt.atob(login.password));
 | 
			
		||||
            xhr.setUrl(login.server);
 | 
			
		||||
            xhr.setApi("/api/statuses/friends_timeline");
 | 
			
		||||
            xhr.clearParams();
 | 
			
		||||
            xhr.setParam("since_id",lastnews);
 | 
			
		||||
            xhr.setParam("count",50)
 | 
			
		||||
            Newsjs.getLastNews(login,db,function(lastnews){
 | 
			
		||||
                xhr.setLogin(login.username+":"+Qt.atob(login.password));
 | 
			
		||||
                xhr.setUrl(login.server);
 | 
			
		||||
                xhr.setApi("/api/statuses/friends_timeline");
 | 
			
		||||
                xhr.clearParams();
 | 
			
		||||
                xhr.setParam("since_id",lastnews);
 | 
			
		||||
                xhr.setParam("count",50)});
 | 
			
		||||
            break;
 | 
			
		||||
        case "Timeline":
 | 
			
		||||
            var lastnews=Newsjs.getLastNews(login,db);
 | 
			
		||||
            xhr.setLogin(login.username+":"+Qt.atob(login.password));
 | 
			
		||||
            xhr.setUrl(login.server);
 | 
			
		||||
            xhr.setApi("/api/statuses/friends_timeline");
 | 
			
		||||
            xhr.clearParams();
 | 
			
		||||
            xhr.setParam("since_id",lastnews);
 | 
			
		||||
            xhr.setParam("count",50)
 | 
			
		||||
            var lastnews=Newsjs.getLastNews(login,db,function(lastnews){
 | 
			
		||||
                xhr.setLogin(login.username+":"+Qt.atob(login.password));
 | 
			
		||||
                xhr.setUrl(login.server);
 | 
			
		||||
                xhr.setApi("/api/statuses/friends_timeline");
 | 
			
		||||
                xhr.clearParams();
 | 
			
		||||
                xhr.setParam("since_id",lastnews);
 | 
			
		||||
                xhr.setParam("count",50)
 | 
			
		||||
            });
 | 
			
		||||
            break;
 | 
			
		||||
        case "Search":
 | 
			
		||||
            xhr.setLogin(login.username+":"+Qt.atob(login.password));
 | 
			
		||||
| 
						 | 
				
			
			@ -566,14 +577,15 @@ function updateView(viewtype){
 | 
			
		|||
            xhr.clearParams();
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            var lastnews=Newsjs.getLastNews(login,db);
 | 
			
		||||
            xhr.setLogin(login.username+":"+Qt.atob(login.password));
 | 
			
		||||
            xhr.setUrl(login.server);
 | 
			
		||||
            xhr.setApi("/api/statuses/friends_timeline");
 | 
			
		||||
            xhr.clearParams();
 | 
			
		||||
            xhr.setParam("since_id",lastnews);
 | 
			
		||||
            xhr.setParam("count",50)
 | 
			
		||||
            newstab.newstabstatus="Conversations";
 | 
			
		||||
            Newsjs.getLastNews(login,db,function(lastnews){
 | 
			
		||||
                xhr.setLogin(login.username+":"+Qt.atob(login.password));
 | 
			
		||||
                xhr.setUrl(login.server);
 | 
			
		||||
                xhr.setApi("/api/statuses/friends_timeline");
 | 
			
		||||
                xhr.clearParams();
 | 
			
		||||
                xhr.setParam("since_id",lastnews);
 | 
			
		||||
                xhr.setParam("count",50)
 | 
			
		||||
                newstab.newstabstatus="Conversations";
 | 
			
		||||
            });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    xhr.get();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 1.4
 | 
			
		||||
import QtQuick 2.11
 | 
			
		||||
//import QtQuick.Controls 2.4
 | 
			
		||||
 | 
			
		||||
Item {
 | 
			
		||||
    id: calendarDay
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,10 +30,10 @@
 | 
			
		|||
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
import QtQuick 2.0
 | 
			
		||||
import QtQuick.Controls 2.3
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
import QtQml 2.2
 | 
			
		||||
import Qt.labs.calendar 1.0
 | 
			
		||||
import QtQuick.Controls 1.2 as Oldcontrol
 | 
			
		||||
//import QtQuick.Controls 1.2 as Oldcontrol
 | 
			
		||||
import QtQuick.Layouts 1.3
 | 
			
		||||
import "qrc:/js/service.js" as Service
 | 
			
		||||
import "qrc:/js/helper.js" as Helperjs
 | 
			
		||||
| 
						 | 
				
			
			@ -42,9 +42,10 @@ import "qrc:/qml/genericqml"
 | 
			
		|||
 | 
			
		||||
Rectangle {
 | 
			
		||||
    id:calendarrectangle
 | 
			
		||||
    y:1
 | 
			
		||||
    width:root.width-mm
 | 
			
		||||
    height:root.height-5*mm
 | 
			
		||||
//    y:1
 | 
			
		||||
//    width:root.width-mm
 | 
			
		||||
//    height:root.height-5*mm
 | 
			
		||||
    anchors.fill: parent
 | 
			
		||||
    color: '#fff'
 | 
			
		||||
    property date currentTime: new Date()
 | 
			
		||||
    property int offsetTime: currentTime.getTimezoneOffset() * 60 * 1000
 | 
			
		||||
| 
						 | 
				
			
			@ -83,30 +84,35 @@ Rectangle {
 | 
			
		|||
       }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    BlueButton{
 | 
			
		||||
    MButton{
 | 
			
		||||
        id:  updateEvents
 | 
			
		||||
        anchors.top: parent.top
 | 
			
		||||
        anchors.topMargin: 0.5*mm
 | 
			
		||||
        anchors.right:calendartabstatusButton.left
 | 
			
		||||
        anchors.rightMargin:mm
 | 
			
		||||
        height: 6*mm
 | 
			
		||||
        width: 8*mm
 | 
			
		||||
        text:"\uf021"
 | 
			
		||||
        onClicked: {
 | 
			
		||||
            
 | 
			
		||||
            Service.getEvents(db,login, calendartab,function(){
 | 
			
		||||
               showEvents("")
 | 
			
		||||
    })}}
 | 
			
		||||
 | 
			
		||||
    BlueButton{
 | 
			
		||||
    MButton{
 | 
			
		||||
        id:  calendartabstatusButton
 | 
			
		||||
        anchors.top: parent.top
 | 
			
		||||
        anchors.topMargin: 0.5*mm
 | 
			
		||||
        anchors.right: parent.right
 | 
			
		||||
        anchors.rightMargin:2*mm
 | 
			
		||||
        height: 6*mm
 | 
			
		||||
        width: Math.max(10*mm,implicitWidth)
 | 
			
		||||
        text: calendartab.calendartabstatus=="Events"?qsTr("Events"):calendartabstatus
 | 
			
		||||
        Oldcontrol.Menu {
 | 
			
		||||
        Menu {
 | 
			
		||||
            id:calendartabmenu
 | 
			
		||||
            Oldcontrol.MenuItem {
 | 
			
		||||
            width: 40*mm
 | 
			
		||||
            MenuItem {
 | 
			
		||||
                text: qsTr("Own Calendar")
 | 
			
		||||
                font.pixelSize: 3*mm
 | 
			
		||||
                onTriggered: {
 | 
			
		||||
                    calendartab.calendartabstatus="Events";
 | 
			
		||||
                   // calendartabstatusButton.text=qsTr("own Calendar");
 | 
			
		||||
| 
						 | 
				
			
			@ -146,6 +152,7 @@ Rectangle {
 | 
			
		|||
                DayOfWeekRow{
 | 
			
		||||
                    locale: monthgrid.locale
 | 
			
		||||
                    Layout.fillWidth: true
 | 
			
		||||
                    font.pixelSize: 3*mm
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                MonthGrid {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,7 +30,7 @@
 | 
			
		|||
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
import QtQuick 2.0
 | 
			
		||||
import QtQuick.Controls 1.2
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
import "qrc:/js/service.js" as Service
 | 
			
		||||
import "qrc:/js/helper.js" as Helperjs
 | 
			
		||||
import "qrc:/qml/genericqml"
 | 
			
		||||
| 
						 | 
				
			
			@ -45,12 +45,14 @@ Rectangle{
 | 
			
		|||
    y:mm
 | 
			
		||||
    property var daylist:[]
 | 
			
		||||
 | 
			
		||||
    BlueButton{
 | 
			
		||||
    MButton{
 | 
			
		||||
       id:closeButton
 | 
			
		||||
       anchors.top: parent.top
 | 
			
		||||
       anchors.topMargin: 1*mm
 | 
			
		||||
       anchors.right: parent.right
 | 
			
		||||
       anchors.rightMargin: 1*mm
 | 
			
		||||
       height: 6*mm
 | 
			
		||||
       width: 8*mm
 | 
			
		||||
       text: "\uf057"
 | 
			
		||||
       onClicked:{eventList.destroy()}
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										463
									
								
								source-android/qml/configqml/AccountPage.qml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										463
									
								
								source-android/qml/configqml/AccountPage.qml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,463 @@
 | 
			
		|||
//  This file is part of Friendiqa
 | 
			
		||||
//  https://git.friendi.ca/lubuwest/Friendiqa
 | 
			
		||||
//  Copyright (C) 2017 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/>.
 | 
			
		||||
 | 
			
		||||
import QtQuick 2.7
 | 
			
		||||
import QtQuick.Dialogs 1.2
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
 | 
			
		||||
import "qrc:/js/service.js" as Service
 | 
			
		||||
import "qrc:/js/layout.js" as Layoutjs
 | 
			
		||||
import "qrc:/js/helper.js" as Helperjs
 | 
			
		||||
import "qrc:/qml/configqml"
 | 
			
		||||
import "qrc:/qml/genericqml"
 | 
			
		||||
 | 
			
		||||
Page{
 | 
			
		||||
        id:accountPage
 | 
			
		||||
        width: root.width
 | 
			
		||||
        height: root.height
 | 
			
		||||
        property var users:[]
 | 
			
		||||
        property var userdata: ({})
 | 
			
		||||
 | 
			
		||||
        function setServericon(server){
 | 
			
		||||
           try {Helperjs.friendicaWebRequest(server+"/api/statusnet/config",accountPage, function (obj){
 | 
			
		||||
               var serverdata = JSON.parse(obj);
 | 
			
		||||
               servericon.visible=true;
 | 
			
		||||
               servericon.source=serverdata.site.logo})} catch(e){print(e)}
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Button{
 | 
			
		||||
            id:userButton
 | 
			
		||||
            height: 8*mm
 | 
			
		||||
            text:qsTr("User")
 | 
			
		||||
            font.pixelSize: 3*mm
 | 
			
		||||
            x: mm
 | 
			
		||||
            y: mm
 | 
			
		||||
            width: root.width/2
 | 
			
		||||
            onClicked:{
 | 
			
		||||
                var useritems="";
 | 
			
		||||
                for (var i=0;i<accountPage.users.length;i++){
 | 
			
		||||
 | 
			
		||||
                    useritems=useritems+"MenuItem{font.pixelSize: 3*mm; text:'"+accountPage.users[i].username+
 | 
			
		||||
                        "'; onTriggered: {Service.readConfig(db,function(obj){
 | 
			
		||||
                        userButton.text=obj.username;
 | 
			
		||||
                        servername.text=obj.server;
 | 
			
		||||
                        accountPage.setServericon(obj.server);
 | 
			
		||||
                        username.text= obj.username;
 | 
			
		||||
                        password.text=Qt.atob(obj.password);
 | 
			
		||||
                        imagestore.text=obj.imagestore;
 | 
			
		||||
                        newsTypeField.text=obj.newsViewType;
 | 
			
		||||
                        if( obj.isActive==0){userButton.font.bold='true'} else {userButton.font.bold='false'}
 | 
			
		||||
                        },'username','"+ accountPage.users[i].username+"')}}"
 | 
			
		||||
                    }
 | 
			
		||||
                var menuString="import QtQuick.Controls 2.4;import 'qrc:/js/service.js' as Service; Menu {"+useritems+"}";
 | 
			
		||||
                var userlistObject=Qt.createQmlObject(menuString,accountPage,"usermenuOutput")
 | 
			
		||||
                userlistObject.popup()  }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
    Text {
 | 
			
		||||
        text: qsTr("Server")
 | 
			
		||||
        font.pixelSize:3*mm
 | 
			
		||||
        x: 4*mm; y: 10*mm
 | 
			
		||||
    }
 | 
			
		||||
    Text {
 | 
			
		||||
        text: qsTr("Nickname")
 | 
			
		||||
        font.pixelSize:3*mm
 | 
			
		||||
        x: 4*mm; y: 20*mm
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Text {
 | 
			
		||||
        text: qsTr("Password")
 | 
			
		||||
        font.pixelSize:3*mm
 | 
			
		||||
        x: 4*mm; y: 30*mm
 | 
			
		||||
      }
 | 
			
		||||
    Text {
 | 
			
		||||
        text: qsTr("Image dir.")
 | 
			
		||||
        font.pixelSize:3*mm
 | 
			
		||||
        x: 4*mm; y: 40*mm
 | 
			
		||||
     }
 | 
			
		||||
 | 
			
		||||
//    Text {
 | 
			
		||||
//        text: qsTr("Max. News")
 | 
			
		||||
//        font.pixelSize:3*mm
 | 
			
		||||
//        x: 4*mm; y: 50*mm
 | 
			
		||||
//     }
 | 
			
		||||
    Text {
 | 
			
		||||
        text: qsTr("News as")
 | 
			
		||||
        font.pixelSize:3*mm
 | 
			
		||||
        x: 4*mm; y: 50*mm
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
//    Text {
 | 
			
		||||
//          text: qsTr("Show Website")
 | 
			
		||||
//          x: 4*mm; y:80*mm; width: 20*mm
 | 
			
		||||
//    }
 | 
			
		||||
 | 
			
		||||
    Image{
 | 
			
		||||
        id:servericon
 | 
			
		||||
        x:4*mm;y:13.5*mm
 | 
			
		||||
        width:5*mm; height: 5*mm
 | 
			
		||||
        visible: false
 | 
			
		||||
        source:""
 | 
			
		||||
        MouseArea{
 | 
			
		||||
            anchors.fill:parent
 | 
			
		||||
            onClicked:{
 | 
			
		||||
                Service.showServerConfig(servername.text, accountPage, function(configString){
 | 
			
		||||
                var serverconfigObject=Qt.createQmlObject(configString,accountPage,"serverconfigOutput");})
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Button{
 | 
			
		||||
        id:serverSearchButton
 | 
			
		||||
        text:"\uf002"
 | 
			
		||||
        font.pixelSize: 3*mm
 | 
			
		||||
        x:4*mm
 | 
			
		||||
        y:13.5*mm
 | 
			
		||||
        width: 5*mm; height:5*mm
 | 
			
		||||
        visible: servericon.visible?false:true
 | 
			
		||||
        onClicked:{Qt.openUrlExternally(Qt.resolvedUrl("https://dir.friendica.social/servers"))}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Rectangle{color: "light grey";  x: 10*mm; y: 13.5*mm; width: root.width-12*mm; height: 5*mm;}
 | 
			
		||||
    Flickable {
 | 
			
		||||
        id: servernameFlickable
 | 
			
		||||
        x: 10*mm; y: 13.5*mm; width: root.width-12*mm; height: 5*mm;
 | 
			
		||||
        contentWidth: servername.paintedWidth
 | 
			
		||||
        contentHeight: servername.paintedHeight
 | 
			
		||||
        clip: true
 | 
			
		||||
        TextEdit {
 | 
			
		||||
            id: servername
 | 
			
		||||
            width: servernameFlickable.width
 | 
			
		||||
            height: servernameFlickable.height
 | 
			
		||||
            focus: true
 | 
			
		||||
            font.pixelSize:3*mm
 | 
			
		||||
            text:"https://"
 | 
			
		||||
            onEditingFinished:{
 | 
			
		||||
                 if((servername.text).substring(0,11) =="https://http"){
 | 
			
		||||
                     serverstring.text= (serverstring.text).substring(8)
 | 
			
		||||
                 }
 | 
			
		||||
               accountPage.setServericon(servername.text)
 | 
			
		||||
             }
 | 
			
		||||
            onCursorRectangleChanged: Layoutjs.ensureVisibility(cursorRectangle,servernameFlickable)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Rectangle{
 | 
			
		||||
        color: "light grey"
 | 
			
		||||
        x: 4*mm; y: 23.5*mm; width: root.width-14*mm; height: 5*mm;
 | 
			
		||||
        TextInput {
 | 
			
		||||
            id: username
 | 
			
		||||
            anchors.fill: parent
 | 
			
		||||
            font.pixelSize:3*mm
 | 
			
		||||
            selectByMouse: true
 | 
			
		||||
            onEditingFinished:{
 | 
			
		||||
                if (username.text.indexOf('@')>-1){
 | 
			
		||||
                    Helperjs.showMessage(qsTr("Error"),qsTr("Nicknames containing @ symbol currently not supported"),accountPage)
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
    }
 | 
			
		||||
    Button {
 | 
			
		||||
        x: root.width-9*mm; y: 23.5*mm; width:5*mm; height:5*mm
 | 
			
		||||
        text: "\uf234"
 | 
			
		||||
        font.pixelSize: 3*mm
 | 
			
		||||
        onClicked: {
 | 
			
		||||
            configStack.push({item:"qrc:/qml/configqml/RegisterPage.qml",properties:{url:servername.text+"/register?nickname="+username.getText(0,username.length)}})
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Rectangle{
 | 
			
		||||
        color: "light grey"
 | 
			
		||||
         x: 4*mm; y: 33.5*mm; width: root.width-6*mm; height: 5*mm;
 | 
			
		||||
         TextInput {
 | 
			
		||||
             id: password
 | 
			
		||||
             anchors.fill: parent
 | 
			
		||||
             font.pixelSize:3*mm
 | 
			
		||||
             selectByMouse: true
 | 
			
		||||
             echoMode: TextInput.PasswordEchoOnEdit
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Rectangle{color: "light grey"; x: 4*mm; y: 43.5*mm; width: root.width-14*mm; height: 5*mm;}
 | 
			
		||||
    Flickable {
 | 
			
		||||
         id: imagestoreFlickable
 | 
			
		||||
         x: 4*mm; y: 43.5*mm; width: root.width-14*mm; height: 5*mm;
 | 
			
		||||
         clip: true
 | 
			
		||||
         TextInput {
 | 
			
		||||
             id: imagestore
 | 
			
		||||
             width: imagestoreFlickable.width
 | 
			
		||||
             height: imagestoreFlickable.height
 | 
			
		||||
             font.pixelSize:3*mm
 | 
			
		||||
             wrapMode: TextEdit.NoWrap
 | 
			
		||||
             onCursorRectangleChanged: Layoutjs.ensureVisibility(cursorRectangle,imagestoreFlickable)
 | 
			
		||||
         }
 | 
			
		||||
     }
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
     Button {
 | 
			
		||||
            x: root.width-9*mm; y: 43.5*mm; width: 5*mm; height: 5*mm;
 | 
			
		||||
            text: "..."
 | 
			
		||||
            font.pixelSize: 3*mm
 | 
			
		||||
            onClicked:
 | 
			
		||||
         {imagestoreDialog.open()}
 | 
			
		||||
     }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//    Slider{ id: maxNews
 | 
			
		||||
//        x:19*mm; y: 53.5*mm;width: root.width/2;height:5*mm
 | 
			
		||||
//        from: 0;to:2000; stepSize: 100
 | 
			
		||||
//    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//    Rectangle{color: "light grey"; x: 4*mm; y: 53.5*mm; width: 9*mm; height: 5*mm;
 | 
			
		||||
//        TextEdit{id:maxNewsText;
 | 
			
		||||
//            anchors.fill: parent
 | 
			
		||||
//            font.pixelSize:3*mm
 | 
			
		||||
//            verticalAlignment:TextEdit.AlignRight
 | 
			
		||||
//            text:maxNews.value
 | 
			
		||||
//            focus: true
 | 
			
		||||
//            selectByMouse: true
 | 
			
		||||
//        }
 | 
			
		||||
//    }
 | 
			
		||||
 | 
			
		||||
    Rectangle{
 | 
			
		||||
         x: 4*mm; y: 53.5*mm; width: newsTypeField.contentWidth+2*mm; height: 5*mm;
 | 
			
		||||
         color:"light grey"
 | 
			
		||||
         Text{
 | 
			
		||||
             id: newsTypeField
 | 
			
		||||
             anchors.fill: parent
 | 
			
		||||
             font.pixelSize:3*mm
 | 
			
		||||
             text:"Conversations"
 | 
			
		||||
        }
 | 
			
		||||
        MouseArea{
 | 
			
		||||
            anchors.fill:parent
 | 
			
		||||
            onClicked:newstypemenu.popup()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    BusyIndicator{
 | 
			
		||||
        id: accountBusy
 | 
			
		||||
         anchors.horizontalCenter: parent.horizontalCenter
 | 
			
		||||
         y: 63.5*mm
 | 
			
		||||
         width:10*mm
 | 
			
		||||
         height: 10*mm
 | 
			
		||||
         running: false
 | 
			
		||||
    }
 | 
			
		||||
//    CheckBox{
 | 
			
		||||
//        id:showwebsiteCheckbox
 | 
			
		||||
//        x:35*mm;y:80*mm
 | 
			
		||||
//        onClicked:{
 | 
			
		||||
//            if (checked==true){
 | 
			
		||||
//                Service.updateglobaloptions(root.db,"showWebsiteForLinks","true")
 | 
			
		||||
//                root.globaloptions.showWebsiteForLinks="true"
 | 
			
		||||
//            }
 | 
			
		||||
//            else {
 | 
			
		||||
//                Service.updateglobaloptions(root.db,"showWebsiteForLinks","false")
 | 
			
		||||
//                root.globaloptions.showWebsiteForLinks="false"
 | 
			
		||||
//            }
 | 
			
		||||
//        }
 | 
			
		||||
//    }
 | 
			
		||||
 | 
			
		||||
    Button {
 | 
			
		||||
    x: 4*mm; y: 63.5*mm
 | 
			
		||||
    height: 8*mm
 | 
			
		||||
    text: qsTr("Confirm")
 | 
			
		||||
    font.pixelSize: 3*mm
 | 
			
		||||
    onClicked:{
 | 
			
		||||
        accountBusy.running=true;
 | 
			
		||||
         var userconfig={server: servername.text, username: username.text, password:Qt.btoa(password.text), imagestore:imagestore.text, maxnews:"",interval:  "",newsViewType:newsTypeField.text};
 | 
			
		||||
         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 (imagestore.text=="") {errormessage+=qsTr("No image directory given!")}
 | 
			
		||||
         //else if (maxNewsText.text=="") {errormessage+=qsTr("No maximum news number given!")}
 | 
			
		||||
         else {errormessage=""}
 | 
			
		||||
         if (errormessage=="") {
 | 
			
		||||
             Helperjs.friendicaRequest(userconfig,"/api/account/verify_credentials?skip_status=true",root,function(obj){
 | 
			
		||||
                accountBusy.running=false;
 | 
			
		||||
                 var credentials=JSON.parse(obj);
 | 
			
		||||
                 if (credentials.hasOwnProperty('status')){
 | 
			
		||||
                     Helperjs.showMessage(qsTr("Error"),qsTr("Wrong password!"),root)
 | 
			
		||||
                 }
 | 
			
		||||
                 else{
 | 
			
		||||
                     filesystem.Directory=userconfig.imagestore;
 | 
			
		||||
                     filesystem.makeDir("contacts");
 | 
			
		||||
                     filesystem.makeDir("albums");
 | 
			
		||||
                     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
 | 
			
		||||
                         root.login=userconfig;
 | 
			
		||||
                         root.news=[];
 | 
			
		||||
                     },"isActive",0);
 | 
			
		||||
 | 
			
		||||
                     //Service.requestProfile(userconfig,db,root,function(nc){root.newContacts=nc});
 | 
			
		||||
                     Helperjs.showMessage(qsTr("Success"),qsTr("Name")+": "+credentials.name+"\nScreen Name: "+credentials.screen_name,root)
 | 
			
		||||
                 }
 | 
			
		||||
             });
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
         else {Helperjs.showMessage(qsTr("Error"), errormessage,root)}
 | 
			
		||||
    }}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    Button {
 | 
			
		||||
    x: parent.width/2+2*mm; y: mm; width: 5*mm; height: 8*mm;
 | 
			
		||||
    text: "-"
 | 
			
		||||
    font.pixelSize: 3*mm
 | 
			
		||||
    onClicked:{
 | 
			
		||||
        var userconfig={server: servername.text, username: username.text, password: Qt.btoa(password.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="";
 | 
			
		||||
           //maxNews.value=0;
 | 
			
		||||
           newsTypeField.text="Conversations";
 | 
			
		||||
           //messageIntervalSlider.value=30;
 | 
			
		||||
           userButton.text=qsTr("User");
 | 
			
		||||
           Helperjs.readData(db,"config","",function(storedUsers){
 | 
			
		||||
             storedUsers.sort(function(obj1, obj2) {
 | 
			
		||||
                 return obj1.isActive - obj2.isActive;
 | 
			
		||||
             })
 | 
			
		||||
             accountPage.users=storedUsers;})
 | 
			
		||||
       })
 | 
			
		||||
    }}
 | 
			
		||||
 | 
			
		||||
    Button {
 | 
			
		||||
    x: parent.width/2+8*mm; y: mm; width: 5*mm; height: 8*mm;
 | 
			
		||||
    text: "+"
 | 
			
		||||
    font.pixelSize: 3*mm
 | 
			
		||||
    onClicked:{
 | 
			
		||||
        servername.text="https://"
 | 
			
		||||
        servericon.visible=false;
 | 
			
		||||
        servericon.source="";
 | 
			
		||||
        username.text=""
 | 
			
		||||
        password.text=""
 | 
			
		||||
        imagestore.text=""
 | 
			
		||||
        //maxNews.value=0
 | 
			
		||||
        newsTypeField.text="Conversations"
 | 
			
		||||
        //messageIntervalSlider.value=30
 | 
			
		||||
        userButton.text=qsTr("User")
 | 
			
		||||
       }
 | 
			
		||||
     }
 | 
			
		||||
 | 
			
		||||
    Button {
 | 
			
		||||
        x: parent.width/2+14*mm; y: mm; width: 5*mm; height: 8*mm;
 | 
			
		||||
        text: "?"
 | 
			
		||||
        font.pixelSize: 3*mm
 | 
			
		||||
        onClicked:{
 | 
			
		||||
                    root.push("qrc:/qml/configqml/InfoBox.qml");
 | 
			
		||||
           }
 | 
			
		||||
         }
 | 
			
		||||
    Button{
 | 
			
		||||
        id:closeButton
 | 
			
		||||
        height: 8*mm
 | 
			
		||||
        anchors.top: parent.top
 | 
			
		||||
        anchors.topMargin: 1*mm
 | 
			
		||||
        anchors.right: parent.right
 | 
			
		||||
        anchors.rightMargin: 1*mm
 | 
			
		||||
        text:   "\uf057"
 | 
			
		||||
        font.pixelSize: 3*mm
 | 
			
		||||
        onClicked:{root.pop()}
 | 
			
		||||
    }
 | 
			
		||||
    Menu {
 | 
			
		||||
        id:newstypemenu
 | 
			
		||||
        MenuItem {
 | 
			
		||||
            font.pixelSize: 3*mm
 | 
			
		||||
            text: qsTr("Timeline")
 | 
			
		||||
            onTriggered: {newsTypeField.text="Timeline"}
 | 
			
		||||
            }
 | 
			
		||||
        MenuItem {
 | 
			
		||||
            font.pixelSize: 3*mm
 | 
			
		||||
            text: qsTr("Conversations")
 | 
			
		||||
            onTriggered: {newsTypeField.text="Conversations"}
 | 
			
		||||
            }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
   Component.onCompleted: {
 | 
			
		||||
      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){
 | 
			
		||||
            userButton.text=obj.username;
 | 
			
		||||
            servername.text=obj.server;
 | 
			
		||||
            accountPage.setServericon(obj.server);
 | 
			
		||||
            username.text= obj.username;
 | 
			
		||||
            password.text=Qt.atob(obj.password);
 | 
			
		||||
            imagestore.text=obj.imagestore;
 | 
			
		||||
            //maxNews.value=obj.maxnews;
 | 
			
		||||
            newsTypeField.text=obj.newsViewType;
 | 
			
		||||
            //messageIntervalSlider.value=obj.timerInterval;
 | 
			
		||||
            if( obj.isActive==0){userButton.font.bold='true'} else {userButton.font.bold='false'}
 | 
			
		||||
          },"isActive",0)
 | 
			
		||||
      })
 | 
			
		||||
//            Service.readGlobaloptions(db,function(go){
 | 
			
		||||
//                if (root.globaloptions.showWebsiteForLinks!="false"){showwebsiteCheckbox.checked=true}
 | 
			
		||||
//            })
 | 
			
		||||
  
 | 
			
		||||
          }
 | 
			
		||||
      catch (e){print(e)
 | 
			
		||||
//          Helperjs.friendicaWebRequest("https://dir.friendica.social/servers/surprise",accountPage,function(html){
 | 
			
		||||
//              print(html);
 | 
			
		||||
//              var bpos=html.indexOf("base ");
 | 
			
		||||
//              var baseurl=html.substring(html.indexOf("http",bpos),html.indexOf('"',html.indexOf("http",bpos)));
 | 
			
		||||
//              servername.text=baseurl
 | 
			
		||||
//          })
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										227
									
								
								source-android/qml/configqml/ConfigPage.qml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										227
									
								
								source-android/qml/configqml/ConfigPage.qml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,227 @@
 | 
			
		|||
//  This file is part of Friendiqa
 | 
			
		||||
//  https://git.friendi.ca/lubuwest/Friendiqa
 | 
			
		||||
//  Copyright (C) 2017 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/>.
 | 
			
		||||
 | 
			
		||||
import QtQuick 2.11
 | 
			
		||||
import QtQuick.Dialogs 1.2
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
 | 
			
		||||
import "qrc:/js/service.js" as Service
 | 
			
		||||
//import "qrc:/js/layout.js" as Layoutjs
 | 
			
		||||
//import "qrc:/js/helper.js" as Helperjs
 | 
			
		||||
import "qrc:/qml/configqml"
 | 
			
		||||
import "qrc:/qml/genericqml"
 | 
			
		||||
 | 
			
		||||
Page{
 | 
			
		||||
       //anchors.fill: parent
 | 
			
		||||
    width:root.width
 | 
			
		||||
    height:root.height
 | 
			
		||||
    //contentHeight: configBackground.height
 | 
			
		||||
    //boundsBehavior: Flickable.StopAtBounds
 | 
			
		||||
   
 | 
			
		||||
//    Rectangle{
 | 
			
		||||
//        id:configBackground
 | 
			
		||||
//        color: "white"
 | 
			
		||||
//        anchors.fill: parent
 | 
			
		||||
//        width:parent.width
 | 
			
		||||
//        height:Math.max(90*mm,root.height-12*mm)
 | 
			
		||||
//        property var users:[]
 | 
			
		||||
//        property bool registeredUser: true
 | 
			
		||||
//        property var userdata: ({})
 | 
			
		||||
 | 
			
		||||
//    Text {
 | 
			
		||||
//        text: qsTr("Image dir.")
 | 
			
		||||
//        //text: qsTr("Max. News")
 | 
			
		||||
//        font.pixelSize:3*mm
 | 
			
		||||
//        x: 4*mm; y: 10*mm
 | 
			
		||||
//     }
 | 
			
		||||
    Text {
 | 
			
		||||
        text: qsTr("Max. News")
 | 
			
		||||
        //text: qsTr("News as")
 | 
			
		||||
        font.pixelSize:3*mm
 | 
			
		||||
        x: 4*mm; y:10*mm
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
//    Text {
 | 
			
		||||
//          text: qsTr("Show Website")
 | 
			
		||||
//          x: 4*mm; y: 40*mm; width: 20*mm
 | 
			
		||||
//    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//    Rectangle{color: "light grey"; x: 4*mm; y: 13.5*mm; width: root.width-14*mm; height: 5*mm;}
 | 
			
		||||
//    Flickable {
 | 
			
		||||
//         id: imagestoreFlickable
 | 
			
		||||
//         x: 4*mm; y: 13.5*mm; width: root.width-14*mm; height: 5*mm;
 | 
			
		||||
//         clip: true
 | 
			
		||||
//         TextInput {
 | 
			
		||||
//             id: imagestore
 | 
			
		||||
//             width: imagestoreFlickable.width
 | 
			
		||||
//             height: imagestoreFlickable.height
 | 
			
		||||
//             font.pixelSize:3*mm
 | 
			
		||||
//             wrapMode: TextEdit.NoWrap
 | 
			
		||||
//             onCursorRectangleChanged: Layoutjs.ensureVisibility(cursorRectangle,imagestoreFlickable)
 | 
			
		||||
//         }
 | 
			
		||||
//     }
 | 
			
		||||
 | 
			
		||||
//    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
 | 
			
		||||
//        }
 | 
			
		||||
//    }
 | 
			
		||||
 | 
			
		||||
//     Button {
 | 
			
		||||
//            x: root.width-9*mm; y: 13.5*mm; width: 7*mm; height: 8*mm;
 | 
			
		||||
//            text: "..."
 | 
			
		||||
//            onClicked:
 | 
			
		||||
//         {imagestoreDialog.open()}
 | 
			
		||||
//     }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    Slider{ id: maxNews
 | 
			
		||||
        x:19*mm; y: 13.5*mm;width: root.width/2;height:5*mm
 | 
			
		||||
        from: 0;to:2000; stepSize: 100
 | 
			
		||||
        value:  root.globaloptions.hasOwnProperty("max_news")?root.globaloptions.max_news:1000
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    Rectangle{color: "light grey"; x: 4*mm; y: 13.5*mm; width: 9*mm; height: 5*mm;
 | 
			
		||||
        radius: 0.5*mm
 | 
			
		||||
        TextEdit{id:maxNewsText;
 | 
			
		||||
            anchors.fill: parent
 | 
			
		||||
            font.pixelSize:3*mm
 | 
			
		||||
            verticalAlignment:TextEdit.AlignRight
 | 
			
		||||
            text:maxNews.value
 | 
			
		||||
            focus: true
 | 
			
		||||
            selectByMouse: true
 | 
			
		||||
            onTextChanged: {
 | 
			
		||||
                Service.updateglobaloptions(root.db,"max_news",text);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Rectangle{
 | 
			
		||||
         x: 4*mm; y:23.5*mm; width: parent.width - 14*mm; height: 5*mm;
 | 
			
		||||
         color:"light grey"
 | 
			
		||||
         radius: 0.5*mm
 | 
			
		||||
         Text{
 | 
			
		||||
             anchors.fill: parent
 | 
			
		||||
             font.pixelSize:3*mm
 | 
			
		||||
             text:qsTr("Sync")
 | 
			
		||||
        }
 | 
			
		||||
        MouseArea{
 | 
			
		||||
            anchors.fill:parent
 | 
			
		||||
            onClicked:root.push("qrc:qml/configqml/SyncConfig.qml");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
//    Slider{ id: messageIntervalSlider
 | 
			
		||||
//        x:22*mm; y: 73.5*mm;width: root.width/2;height:5*mm
 | 
			
		||||
//        from: 0;to:120; stepSize: 15
 | 
			
		||||
//    }
 | 
			
		||||
//    Rectangle{
 | 
			
		||||
//         x: 4*mm; y: 73.5*mm; width: 9*mm; height: 5*mm;
 | 
			
		||||
//         TextEdit{
 | 
			
		||||
//             id: messageIntervalField
 | 
			
		||||
//             anchors.fill: parent
 | 
			
		||||
//             font.pixelSize:3*mm
 | 
			
		||||
//             verticalAlignment:TextEdit.AlignRight
 | 
			
		||||
//             text:messageIntervalSlider.value
 | 
			
		||||
//             focus: true
 | 
			
		||||
//             selectByMouse: true
 | 
			
		||||
//        }
 | 
			
		||||
//    }
 | 
			
		||||
//    Text{x: 14*mm; y: 73.5*mm; width: 5*mm; height: 5*mm;
 | 
			
		||||
//        font.pixelSize:3*mm
 | 
			
		||||
//        text:qsTr("Min.")
 | 
			
		||||
//    }
 | 
			
		||||
 | 
			
		||||
//    CheckBox{
 | 
			
		||||
//        id:showwebsiteCheckbox
 | 
			
		||||
//        x:35*mm;y:80*mm
 | 
			
		||||
//        onClicked:{
 | 
			
		||||
//            if (checked==true){
 | 
			
		||||
//                Service.updateglobaloptions(root.db,"showWebsiteForLinks","true")
 | 
			
		||||
//                root.globaloptions.showWebsiteForLinks="true"
 | 
			
		||||
//            }
 | 
			
		||||
//            else {
 | 
			
		||||
//                Service.updateglobaloptions(root.db,"showWebsiteForLinks","false")
 | 
			
		||||
//                root.globaloptions.showWebsiteForLinks="false"
 | 
			
		||||
//            }
 | 
			
		||||
//        }
 | 
			
		||||
//    }
 | 
			
		||||
 | 
			
		||||
    MButton {
 | 
			
		||||
        anchors.right: closeButton.left; anchors.rightMargin: mm;
 | 
			
		||||
        anchors.top: parent.top
 | 
			
		||||
        anchors.topMargin: 1*mm
 | 
			
		||||
        width: 8*mm; height: 6*mm;
 | 
			
		||||
        text: "?"
 | 
			
		||||
        font.pixelSize: 3*mm
 | 
			
		||||
        onClicked:{
 | 
			
		||||
                    root.push("qrc:/qml/configqml/InfoBox.qml");
 | 
			
		||||
           }
 | 
			
		||||
         }
 | 
			
		||||
    MButton{
 | 
			
		||||
         id:closeButton
 | 
			
		||||
         height: 6*mm
 | 
			
		||||
         width :8*mm
 | 
			
		||||
         anchors.top: parent.top
 | 
			
		||||
         anchors.topMargin: 1*mm
 | 
			
		||||
         anchors.right: parent.right
 | 
			
		||||
         anchors.rightMargin: 1*mm
 | 
			
		||||
         text:   "\uf057"
 | 
			
		||||
         font.pixelSize: 3*mm
 | 
			
		||||
         onClicked:{root.pop()}
 | 
			
		||||
    }
 | 
			
		||||
//    Menu {
 | 
			
		||||
//        id:newstypemenu
 | 
			
		||||
//        MenuItem {
 | 
			
		||||
//            text: qsTr("Timeline")
 | 
			
		||||
//            onTriggered: {newsTypeField.text="Timeline"}
 | 
			
		||||
//            }
 | 
			
		||||
//        MenuItem {
 | 
			
		||||
//            text: qsTr("Conversations")
 | 
			
		||||
//            onTriggered: {newsTypeField.text="Conversations"}
 | 
			
		||||
//            }
 | 
			
		||||
//    }
 | 
			
		||||
 | 
			
		||||
//    Component.onCompleted: {
 | 
			
		||||
//        Service.readGlobaloptions(db,function(go){
 | 
			
		||||
//            if(go.hasOwnProperty("max_news")){maxNews.value=go.max_news}else{maxNews.value=1000}
 | 
			
		||||
//            //if (root.globaloptions.showWebsiteForLinks!="false"){showwebsiteCheckbox.checked=true}
 | 
			
		||||
//        })
 | 
			
		||||
//    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -30,7 +30,7 @@
 | 
			
		|||
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
import QtQuick 2.0
 | 
			
		||||
import QtQuick.Controls 1.2
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
import "qrc:/qml/genericqml"
 | 
			
		||||
 | 
			
		||||
Rectangle{
 | 
			
		||||
| 
						 | 
				
			
			@ -41,11 +41,12 @@ Rectangle{
 | 
			
		|||
        anchors.top:closeButton.bottom
 | 
			
		||||
        anchors.topMargin: mm
 | 
			
		||||
        textFormat: Text.RichText
 | 
			
		||||
        width: parent.width
 | 
			
		||||
        width: root.width-mm
 | 
			
		||||
        wrapMode: Text.WrapAtWordBoundaryOrAnywhere
 | 
			
		||||
        text: "<b>Friendiqa v0.4 </b><br>Licensed under GPL 3 with the exception of OpenSSL <br> "+
 | 
			
		||||
        text: "<b>Friendiqa v0.5 </b><br>Licensed under GPL 3 with the exception of OpenSSL <br> "+
 | 
			
		||||
              "Profile <a href='https://freunde.ma-nic.de/profile/friendiqa'>https://freunde.ma-nic.de/profile/friendiqa</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>"+
 | 
			
		||||
               "Most of C++ code by <a href='https://kirgroup.com/profile/fabrixxm'>Fabio</a><br>"+
 | 
			
		||||
               "QML and Javascript code by <a href='https://freunde.ma-nic.de/profile/marco'>Marco</a><br>"+
 | 
			
		||||
               "Qt Framework <a href='https://www.qt.io'>www.qt.io</a><br>"+
 | 
			
		||||
| 
						 | 
				
			
			@ -56,13 +57,16 @@ Rectangle{
 | 
			
		|||
         onLinkActivated:{
 | 
			
		||||
            Qt.openUrlExternally(link)}
 | 
			
		||||
     }
 | 
			
		||||
     BlueButton{
 | 
			
		||||
            id:closeButton
 | 
			
		||||
            anchors.top: parent.top
 | 
			
		||||
            anchors.topMargin: 1*mm
 | 
			
		||||
            anchors.right: parent.right
 | 
			
		||||
            anchors.rightMargin: 1*mm
 | 
			
		||||
        text:   "\uf057"
 | 
			
		||||
        onClicked:{configStack.pop()}
 | 
			
		||||
     Button{
 | 
			
		||||
         id:closeButton
 | 
			
		||||
         height: 6*mm
 | 
			
		||||
         width: 8*mm
 | 
			
		||||
         anchors.top: parent.top
 | 
			
		||||
         anchors.topMargin: 1*mm
 | 
			
		||||
         anchors.right: parent.right
 | 
			
		||||
         anchors.rightMargin: 1*mm
 | 
			
		||||
         text:   "\uf057"
 | 
			
		||||
         font.pixelSize: 3*mm
 | 
			
		||||
         onClicked:{root.pop()}
 | 
			
		||||
     }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,7 +34,7 @@ QtObject{
 | 
			
		|||
    property real appWidth: 500 
 | 
			
		||||
    property real appHeight: 500
 | 
			
		||||
    property int backKey: Qt.Key_Escape
 | 
			
		||||
    property string osType: "Android"
 | 
			
		||||
    property string osType: "Linux"
 | 
			
		||||
    //property string attachImageDir:filesystem.homePath+"/Pictures/"
 | 
			
		||||
    property string imagePickQml: "ImagePickerLinux"
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,7 @@
 | 
			
		|||
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
import QtQuick 2.9
 | 
			
		||||
import QtQuick.Controls 2.5
 | 
			
		||||
import QtWebView 1.1
 | 
			
		||||
import "qrc:/qml/genericqml"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -45,17 +46,21 @@ Rectangle{
 | 
			
		|||
        width:parent.width
 | 
			
		||||
        y:7*mm
 | 
			
		||||
        MouseArea {anchors.fill:parent;
 | 
			
		||||
            onClicked:{print(url)}
 | 
			
		||||
            onClicked:{
 | 
			
		||||
                //print(url)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        onLoadingChanged: print(loadProgress)
 | 
			
		||||
        //onLoadingChanged: print(loadProgress)
 | 
			
		||||
    }
 | 
			
		||||
    BlueButton{
 | 
			
		||||
    Button{
 | 
			
		||||
        id:closeButton
 | 
			
		||||
        height:8*mm
 | 
			
		||||
        anchors.top: parent.top
 | 
			
		||||
        anchors.topMargin: 1*mm
 | 
			
		||||
        anchors.right: parent.right
 | 
			
		||||
        anchors.rightMargin: 1*mm
 | 
			
		||||
        text:   "\uf057"
 | 
			
		||||
        font.pixelSize: 3*mm
 | 
			
		||||
        onClicked:{configStack.pop()}
 | 
			
		||||
     }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										87
									
								
								source-android/qml/configqml/SyncComponent.qml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								source-android/qml/configqml/SyncComponent.qml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,87 @@
 | 
			
		|||
//  This file is part of Friendiqa
 | 
			
		||||
//  https://git.friendi.ca/lubuwest/Friendiqa
 | 
			
		||||
//  Copyright (C) 2017 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/>.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import QtQuick 2.11
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
import "qrc:/qml/configqml"
 | 
			
		||||
import "qrc:/js/service.js" as Service
 | 
			
		||||
 | 
			
		||||
Rectangle{
 | 
			
		||||
    color: "#EEEEEE" //Material.Grey
 | 
			
		||||
    property string adapter: ""
 | 
			
		||||
    width: parent.width
 | 
			
		||||
    height: 12*mm
 | 
			
		||||
    Label{
 | 
			
		||||
        x: mm
 | 
			
		||||
        y: 0.5*mm
 | 
			
		||||
        font.pixelSize:3*mm
 | 
			
		||||
        text: qsTr(adapter)
 | 
			
		||||
    }
 | 
			
		||||
    CheckBox{
 | 
			
		||||
        id: syncCheckbox
 | 
			
		||||
        x: mm
 | 
			
		||||
        y: 5*mm
 | 
			
		||||
        width:20*mm
 | 
			
		||||
        checked:(globaloptions["sync_"+adapter]==1)?true:false
 | 
			
		||||
               //style: CheckBoxStyle {
 | 
			
		||||
        text: qsTr("sync")
 | 
			
		||||
        font.pixelSize:3*mm
 | 
			
		||||
        onClicked: {
 | 
			
		||||
            toggle();
 | 
			
		||||
            if(syncCheckbox.checked==true){
 | 
			
		||||
                Service.updateglobaloptions(root.db,"sync_"+adapter,0);syncCheckbox.checked=false;
 | 
			
		||||
            }
 | 
			
		||||
            else{
 | 
			
		||||
                Service.updateglobaloptions(root.db,"sync_"+adapter,1);syncCheckbox.checked=true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    CheckBox{
 | 
			
		||||
            id: notifyCheckbox
 | 
			
		||||
            x:25*mm
 | 
			
		||||
            y: 5*mm
 | 
			
		||||
            width:25*mm
 | 
			
		||||
            enabled: adapter!="Notifications"
 | 
			
		||||
            checked:(globaloptions["notify_"+adapter]==1)?true:false
 | 
			
		||||
            text: qsTr("notify")
 | 
			
		||||
            font.pixelSize:3*mm
 | 
			
		||||
            onClicked: {
 | 
			
		||||
                toggle();
 | 
			
		||||
                if(notifyCheckbox.checked==true){
 | 
			
		||||
                    Service.updateglobaloptions(root.db,"notify_"+adapter,0);notifyCheckbox.checked=false;
 | 
			
		||||
                }
 | 
			
		||||
                else{
 | 
			
		||||
                    Service.updateglobaloptions(root.db,"notify_"+adapter,1);notifyCheckbox.checked=true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										101
									
								
								source-android/qml/configqml/SyncConfig.qml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								source-android/qml/configqml/SyncConfig.qml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,101 @@
 | 
			
		|||
//  This file is part of Friendiqa
 | 
			
		||||
//  https://git.friendi.ca/lubuwest/Friendiqa
 | 
			
		||||
//  Copyright (C) 2017 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/>.
 | 
			
		||||
 | 
			
		||||
import QtQuick 2.11
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
import "qrc:/qml/configqml"
 | 
			
		||||
import "qrc:/js/service.js" as Service
 | 
			
		||||
 | 
			
		||||
Rectangle{
 | 
			
		||||
    color:"white"
 | 
			
		||||
    width:root.width
 | 
			
		||||
    height:root.height
 | 
			
		||||
    Text {
 | 
			
		||||
        text: qsTr("Sync Interval (0=None)")
 | 
			
		||||
        font.pixelSize:3*mm
 | 
			
		||||
        //visible: false
 | 
			
		||||
        x: 4*mm; y: 10*mm; //width:35*mm;wrapMode: Text.Wrap
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Slider{ id: messageIntervalSlider
 | 
			
		||||
        x:22*mm; y: 13.5*mm;width: root.width/2;height:5*mm
 | 
			
		||||
        value: globaloptions.syncinterval
 | 
			
		||||
        from: 0;to:120; stepSize: 15
 | 
			
		||||
    }
 | 
			
		||||
    Rectangle{
 | 
			
		||||
         x: 4*mm; y: 13.5*mm; width: 9*mm; height: 5*mm;
 | 
			
		||||
         TextEdit{
 | 
			
		||||
             id: messageIntervalField
 | 
			
		||||
             anchors.fill: parent
 | 
			
		||||
             font.pixelSize:3*mm
 | 
			
		||||
             verticalAlignment:TextEdit.AlignRight
 | 
			
		||||
             text:messageIntervalSlider.value
 | 
			
		||||
             focus: true
 | 
			
		||||
             selectByMouse: true
 | 
			
		||||
             onTextChanged: {
 | 
			
		||||
                 Service.updateglobaloptions(root.db,"syncinterval",text);
 | 
			
		||||
                 if(osSettings.osType=="Android" && text !=0){
 | 
			
		||||
                    alarm.setAlarm(text);
 | 
			
		||||
                    } else if(osSettings.osType=="Linux" && text !=0){
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
             }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    Text{x: 14*mm; y: 13.5*mm; width: 5*mm; height: 5*mm;
 | 
			
		||||
        font.pixelSize:3*mm
 | 
			
		||||
        text:qsTr("Min.")
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Column{
 | 
			
		||||
        y:22*mm
 | 
			
		||||
        width: parent.width
 | 
			
		||||
        spacing:mm
 | 
			
		||||
        //anchors.fill: parent
 | 
			
		||||
        SyncComponent{adapter:"Timeline"}
 | 
			
		||||
        SyncComponent{adapter:"Replies"}
 | 
			
		||||
        SyncComponent{ adapter:"DirectMessages"}
 | 
			
		||||
        SyncComponent{ adapter:"Notifications"}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
     Button{
 | 
			
		||||
         id:closeButton
 | 
			
		||||
         anchors.top: parent.top
 | 
			
		||||
         anchors.topMargin: 1*mm
 | 
			
		||||
         anchors.right: parent.right
 | 
			
		||||
         anchors.rightMargin: 1*mm
 | 
			
		||||
         height: 6*mm
 | 
			
		||||
         width: 8*mm
 | 
			
		||||
         text:   "\uf057"
 | 
			
		||||
         font.pixelSize: 3*mm
 | 
			
		||||
         onClicked:{root.pop()}
 | 
			
		||||
     }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -30,7 +30,7 @@
 | 
			
		|||
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
import QtQuick 2.0
 | 
			
		||||
import QtQuick.Controls 1.3
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
import "qrc:/qml/genericqml"
 | 
			
		||||
 | 
			
		||||
Item {
 | 
			
		||||
| 
						 | 
				
			
			@ -83,7 +83,8 @@ Item {
 | 
			
		|||
        MouseArea{
 | 
			
		||||
            anchors.fill: parent
 | 
			
		||||
            onClicked:{
 | 
			
		||||
                root.currentIndex=0;
 | 
			
		||||
                rootstack.currentIndex=0;
 | 
			
		||||
                bar.currentIndex=0;
 | 
			
		||||
                root.contactdetailsSignal(contact)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,7 +30,7 @@
 | 
			
		|||
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
import QtQuick 2.0
 | 
			
		||||
import QtQuick.Controls 1.3
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
import "qrc:/qml/genericqml"
 | 
			
		||||
 | 
			
		||||
Item {
 | 
			
		||||
| 
						 | 
				
			
			@ -78,7 +78,7 @@ Rectangle{
 | 
			
		|||
 | 
			
		||||
   ScrollView{
 | 
			
		||||
       horizontalScrollBarPolicy:Qt.ScrollBarAlwaysOff
 | 
			
		||||
       frameVisible: true
 | 
			
		||||
       //frameVisible: true
 | 
			
		||||
       id:namelabelflickable
 | 
			
		||||
       width: root.width-10*mm
 | 
			
		||||
       height:root.height-50*mm
 | 
			
		||||
| 
						 | 
				
			
			@ -105,8 +105,10 @@ Rectangle{
 | 
			
		|||
            x: mm
 | 
			
		||||
            spacing:4
 | 
			
		||||
 | 
			
		||||
            BlueButton{
 | 
			
		||||
            MButton{
 | 
			
		||||
                id:photobutton
 | 
			
		||||
                height: 6*mm
 | 
			
		||||
                width: 8*mm
 | 
			
		||||
                text: "\uf03e" // "Photos"
 | 
			
		||||
                visible:(contact.network=="dfrn")
 | 
			
		||||
                onClicked:{
 | 
			
		||||
| 
						 | 
				
			
			@ -118,8 +120,10 @@ Rectangle{
 | 
			
		|||
                    }
 | 
			
		||||
             }
 | 
			
		||||
 | 
			
		||||
            BlueButton{
 | 
			
		||||
            MButton{
 | 
			
		||||
                id:messagebutton
 | 
			
		||||
                height: 6*mm
 | 
			
		||||
                width: 8*mm
 | 
			
		||||
                text: "\uf0e6" //"Messages"
 | 
			
		||||
                onClicked:{
 | 
			
		||||
                    root.currentIndex=0;
 | 
			
		||||
| 
						 | 
				
			
			@ -129,23 +133,26 @@ Rectangle{
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            BlueButton{
 | 
			
		||||
            MButton{
 | 
			
		||||
                id:dmbutton
 | 
			
		||||
                visible: (contact.following=="true")
 | 
			
		||||
                height: 6*mm
 | 
			
		||||
                width: 8*mm
 | 
			
		||||
                text: "\uf040" //"DM"
 | 
			
		||||
                onClicked:{
 | 
			
		||||
                    root.currentIndex=0;
 | 
			
		||||
                    //newstab.active=true;
 | 
			
		||||
                    root.directmessageSignal(contact.screen_name);
 | 
			
		||||
                    contactLargeComponent.destroy();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            BlueButton{
 | 
			
		||||
            Button{
 | 
			
		||||
                id:eventbutton
 | 
			
		||||
                visible:(contact.network=="dfrn")
 | 
			
		||||
                text:"\uf073"
 | 
			
		||||
                height: 6*mm
 | 
			
		||||
                width: 8*mm
 | 
			
		||||
                text:"\uf073" //Events
 | 
			
		||||
                onClicked:{
 | 
			
		||||
                    root.currentIndex=3;
 | 
			
		||||
                    calendartab.active=true;
 | 
			
		||||
| 
						 | 
				
			
			@ -155,8 +162,10 @@ Rectangle{
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            BlueButton{
 | 
			
		||||
            Button{
 | 
			
		||||
                id: closeButton
 | 
			
		||||
                height: 6*mm
 | 
			
		||||
                width: 8*mm
 | 
			
		||||
                text: "\uf057" //"close"
 | 
			
		||||
                onClicked:{contactLargeComponent.destroy();
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,6 +31,7 @@
 | 
			
		|||
 | 
			
		||||
// List of people
 | 
			
		||||
import QtQuick 2.0
 | 
			
		||||
import QtQuick.Controls 2.5
 | 
			
		||||
import "qrc:/js/helper.js" as Helperjs
 | 
			
		||||
import "qrc:/qml/genericqml"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -109,13 +110,15 @@ Rectangle {
 | 
			
		|||
            }
 | 
			
		||||
           }
 | 
			
		||||
 | 
			
		||||
    BlueButton {
 | 
			
		||||
   MButton {
 | 
			
		||||
            id: closeButton
 | 
			
		||||
            height:6* mm
 | 
			
		||||
            width: 8*mm
 | 
			
		||||
            anchors.top: parent.top
 | 
			
		||||
            anchors.topMargin: 1*mm
 | 
			
		||||
            anchors.right: parent.right
 | 
			
		||||
            anchors.rightMargin: 1*mm
 | 
			
		||||
            color:"white"
 | 
			
		||||
            //color:"white"
 | 
			
		||||
            text: "\uf057"
 | 
			
		||||
            onClicked: {
 | 
			
		||||
               groupModelAppend(contacts,function(){
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,9 +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 1.2
 | 
			
		||||
import QtQuick.Controls.Styles 1.4
 | 
			
		||||
import QtQuick 2.11
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
//import QtQuick.Controls.Styles 1.4
 | 
			
		||||
import QtQuick.Layouts 1.11
 | 
			
		||||
import QtQuick.LocalStorage 2.0
 | 
			
		||||
import "qrc:/js/helper.js" as Helperjs
 | 
			
		||||
import "qrc:/js/news.js" as Newsjs
 | 
			
		||||
| 
						 | 
				
			
			@ -69,14 +70,37 @@ Rectangle {
 | 
			
		|||
        callback(profile)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    TabView{
 | 
			
		||||
    TabBar {
 | 
			
		||||
      id: friendsbar
 | 
			
		||||
      width: parent.width
 | 
			
		||||
      height: 9*mm
 | 
			
		||||
      position:TabBar.Header
 | 
			
		||||
      currentIndex: 1
 | 
			
		||||
      TabButton {
 | 
			
		||||
          text: qsTr("Me")
 | 
			
		||||
          font.pixelSize: 2*mm
 | 
			
		||||
      }
 | 
			
		||||
      TabButton {
 | 
			
		||||
          text:  qsTr("Friends")
 | 
			
		||||
          font.pixelSize: 2*mm
 | 
			
		||||
      }
 | 
			
		||||
      TabButton {
 | 
			
		||||
          text:  qsTr("Contacts")
 | 
			
		||||
          font.pixelSize: 2*mm
 | 
			
		||||
      }
 | 
			
		||||
      TabButton {
 | 
			
		||||
          text: qsTr("Groups")
 | 
			
		||||
          font.pixelSize: 2*mm
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
    StackLayout{
 | 
			
		||||
        id:friendsTabView
 | 
			
		||||
        tabPosition: Qt.TopEdge
 | 
			
		||||
        //anchors.fill: parent
 | 
			
		||||
        x:mm
 | 
			
		||||
        y:mm
 | 
			
		||||
        width: root.width-2*mm
 | 
			
		||||
        height: root.height-10*mm
 | 
			
		||||
        currentIndex: 1
 | 
			
		||||
        y:10*mm
 | 
			
		||||
        width: parent.width-2*mm
 | 
			
		||||
        height: parent.height-10*mm
 | 
			
		||||
        currentIndex: friendsbar.currentIndex
 | 
			
		||||
        signal contactsSignal(var contact)
 | 
			
		||||
        signal groupsSignal(var username)
 | 
			
		||||
        onCurrentIndexChanged:{
 | 
			
		||||
| 
						 | 
				
			
			@ -88,27 +112,28 @@ Rectangle {
 | 
			
		|||
            }
 | 
			
		||||
            else if (currentIndex==3){groupsSignal(root.login.username)}
 | 
			
		||||
        }
 | 
			
		||||
        style: TabViewStyle {
 | 
			
		||||
            frameOverlap: 1
 | 
			
		||||
            tab: Rectangle { 
 | 
			
		||||
               color: "white"
 | 
			
		||||
               implicitWidth: root.width/4-2*mm
 | 
			
		||||
               implicitHeight: 4*mm
 | 
			
		||||
               Text { id: text
 | 
			
		||||
                  anchors.centerIn: parent
 | 
			
		||||
                  text: styleData.title
 | 
			
		||||
                  color: "dark grey"
 | 
			
		||||
                  font.pixelSize:2.5*mm
 | 
			
		||||
                  font.bold: styleData.selected
 | 
			
		||||
               } 
 | 
			
		||||
            }
 | 
			
		||||
            frame: Rectangle { color: "light grey" } 
 | 
			
		||||
            tabsAlignment:Qt.AlignHCenter
 | 
			
		||||
         }
 | 
			
		||||
//        style: TabViewStyle {
 | 
			
		||||
//            frameOverlap: 1
 | 
			
		||||
//            tab: Rectangle {
 | 
			
		||||
//               color: "white"
 | 
			
		||||
//               implicitWidth: root.width/4-2*mm
 | 
			
		||||
//               implicitHeight: 4*mm
 | 
			
		||||
//               Text { id: text
 | 
			
		||||
//                  anchors.centerIn: parent
 | 
			
		||||
//                  text: styleData.title
 | 
			
		||||
//                  color: "dark grey"
 | 
			
		||||
//                  font.pixelSize:2.5*mm
 | 
			
		||||
//                  font.bold: styleData.selected
 | 
			
		||||
//               }
 | 
			
		||||
//            }
 | 
			
		||||
//            frame: Rectangle { color: "light grey" }
 | 
			
		||||
//            tabsAlignment:Qt.AlignHCenter
 | 
			
		||||
//         }
 | 
			
		||||
 | 
			
		||||
      Tab{
 | 
			
		||||
      Item{
 | 
			
		||||
          id:profileGridTab
 | 
			
		||||
          title: qsTr("Me")
 | 
			
		||||
          Layout.fillWidth:true
 | 
			
		||||
          Layout.fillHeight: true
 | 
			
		||||
          Component.onCompleted:{
 | 
			
		||||
                showProfile(function(profile){
 | 
			
		||||
                    var component = Qt.createComponent("qrc:/qml/contactqml/ProfileComponent.qml");
 | 
			
		||||
| 
						 | 
				
			
			@ -117,11 +142,11 @@ Rectangle {
 | 
			
		|||
            }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      Tab{
 | 
			
		||||
        title: qsTr("Friends")
 | 
			
		||||
        Rectangle{
 | 
			
		||||
        Item{
 | 
			
		||||
            id: friendsGridTab
 | 
			
		||||
            property int currentContact:0
 | 
			
		||||
            Layout.fillWidth:true
 | 
			
		||||
            Layout.fillHeight: true
 | 
			
		||||
            property int currentContact: 0
 | 
			
		||||
            function showFriends(contact){
 | 
			
		||||
                try {friendsModel.clear()} catch(e){print(e)};
 | 
			
		||||
                Helperjs.readData(root.db,"contacts",login.username,function(friendsobject){
 | 
			
		||||
| 
						 | 
				
			
			@ -140,17 +165,21 @@ Rectangle {
 | 
			
		|||
            onDownloaded:{
 | 
			
		||||
                if(type=="contactlist"){
 | 
			
		||||
                    //print(url+" "+filename+" "+i)
 | 
			
		||||
                    currentContact=i+1;
 | 
			
		||||
                    if(currentContact==root.newContacts.length){showFriends(root.login.username)}
 | 
			
		||||
                    friendsGridTab.currentContact=i+1;
 | 
			
		||||
                    if(friendsGridTab.currentContact==root.newContacts.length){
 | 
			
		||||
                        friendsGridTab.showFriends(root.login.username)
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        BlueButton {
 | 
			
		||||
        MButton {
 | 
			
		||||
            id: updateFriendsButton
 | 
			
		||||
            text:  "\uf021"
 | 
			
		||||
            anchors.top: parent.top
 | 
			
		||||
            anchors.topMargin: mm
 | 
			
		||||
            anchors.right: parent.right
 | 
			
		||||
            height: 6*mm
 | 
			
		||||
            width: 8*mm
 | 
			
		||||
            onClicked: {
 | 
			
		||||
                try {friendsModel.clear()} catch(e){print(e)};
 | 
			
		||||
                //root.contactLoadType="friends";
 | 
			
		||||
| 
						 | 
				
			
			@ -167,8 +196,8 @@ Rectangle {
 | 
			
		|||
                anchors.top: parent.top
 | 
			
		||||
                anchors.right:updateFriendsButton.left
 | 
			
		||||
                anchors.rightMargin:mm
 | 
			
		||||
                visible: (currentContact!=(root.newContacts.length))?true:false
 | 
			
		||||
                value: currentContact/root.newContacts.length
 | 
			
		||||
                visible: (friendsGridTab.currentContact!=(root.newContacts.length))?true:false
 | 
			
		||||
                value: friendsGridTab.currentContact/root.newContacts.length
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            //GridView {
 | 
			
		||||
| 
						 | 
				
			
			@ -196,13 +225,11 @@ Rectangle {
 | 
			
		|||
            root.newContacts=[]
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      Tab{
 | 
			
		||||
        title: qsTr("Contacts")
 | 
			
		||||
 | 
			
		||||
        Rectangle{
 | 
			
		||||
    Item{
 | 
			
		||||
        id: contactsGridTab
 | 
			
		||||
        Layout.fillWidth:true
 | 
			
		||||
        Layout.fillHeight: true
 | 
			
		||||
            function showContacts(contact){
 | 
			
		||||
                try {contactsModel.clear()} catch(e){print(e)};
 | 
			
		||||
                Helperjs.readData(db, "contacts",root.login.username,function(contactsobject){
 | 
			
		||||
| 
						 | 
				
			
			@ -213,12 +240,14 @@ Rectangle {
 | 
			
		|||
                    }
 | 
			
		||||
                },"isFriend",0,"screen_name ASC");
 | 
			
		||||
            }
 | 
			
		||||
            BlueButton {
 | 
			
		||||
            MButton {
 | 
			
		||||
                id: cleanButton
 | 
			
		||||
                text:  "\uf021"
 | 
			
		||||
                anchors.top: parent.top
 | 
			
		||||
                anchors.topMargin: mm
 | 
			
		||||
                anchors.right: parent.right
 | 
			
		||||
                height: 6*mm
 | 
			
		||||
                width: 8*mm
 | 
			
		||||
                onClicked: {
 | 
			
		||||
                    Service.cleanContacts(root.login,root.db,function(){
 | 
			
		||||
                        try {contactsModel.clear()} catch(e){print(e)};
 | 
			
		||||
| 
						 | 
				
			
			@ -252,11 +281,13 @@ Rectangle {
 | 
			
		|||
                friendsTabView.contactsSignal.connect(showContacts);
 | 
			
		||||
             }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    Tab{
 | 
			
		||||
        title: qsTr("Groups")
 | 
			
		||||
        Rectangle{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        Item{
 | 
			
		||||
            id: groupsGridTab
 | 
			
		||||
            Layout.fillWidth:true
 | 
			
		||||
            Layout.fillHeight: true
 | 
			
		||||
 | 
			
		||||
            function showGroups(username){
 | 
			
		||||
                try {groupsModel.clear()} catch(e){print(e)};
 | 
			
		||||
                Helperjs.readData(db, "groups",root.login.username,function(groupsobject){
 | 
			
		||||
| 
						 | 
				
			
			@ -289,16 +320,18 @@ Rectangle {
 | 
			
		|||
                        showGroups(root.login.username)});
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            BlueButton {
 | 
			
		||||
            MButton {
 | 
			
		||||
                id: updateGroupsButton
 | 
			
		||||
                text: "\uf021"
 | 
			
		||||
                anchors.top: parent.top
 | 
			
		||||
                anchors.topMargin: mm
 | 
			
		||||
                anchors.right: parent.right
 | 
			
		||||
                anchors.rightMargin: mm
 | 
			
		||||
                height: 6*mm
 | 
			
		||||
                width: 8*mm
 | 
			
		||||
                onClicked: {
 | 
			
		||||
                    Newsjs.requestGroups(root.login,root.db,root,function(){
 | 
			
		||||
                        showGroups(root.login.username)})}
 | 
			
		||||
                        groupsGridTab.showGroups(root.login.username)})}
 | 
			
		||||
            }
 | 
			
		||||
//            BlueButton {
 | 
			
		||||
//                id: newGroupButton
 | 
			
		||||
| 
						 | 
				
			
			@ -351,9 +384,9 @@ Rectangle {
 | 
			
		|||
                friendsTabView.groupsSignal.connect(showGroups);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
    Component.onCompleted: {
 | 
			
		||||
         root.contactdetailsSignal.connect(showContactdetails);
 | 
			
		||||
         //root.contactdetailsSignal.connect(showContactdetails);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,7 +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 2.11
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
import "qrc:/js/helper.js" as Helperjs
 | 
			
		||||
import "qrc:/js/news.js" as Newsjs
 | 
			
		||||
import "qrc:/qml/genericqml"
 | 
			
		||||
| 
						 | 
				
			
			@ -76,15 +77,34 @@ Item {
 | 
			
		|||
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        BlueButton{
 | 
			
		||||
        
 | 
			
		||||
       MButton{
 | 
			
		||||
            id: closeButton
 | 
			
		||||
            visible: false
 | 
			
		||||
            width: 8*mm
 | 
			
		||||
            height: 6*mm
 | 
			
		||||
            anchors.left: infobutton.right
 | 
			
		||||
            anchors.margins: mm
 | 
			
		||||
            anchors.top: parent.top
 | 
			
		||||
            
 | 
			
		||||
            text: "\uf057"
 | 
			
		||||
            font.pixelSize: 3*mm
 | 
			
		||||
                    onClicked:{groupComponent.state="";
 | 
			
		||||
                        if (group.new){groupsModel.remove(index)}
 | 
			
		||||
                    }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        MButton{
 | 
			
		||||
            id:infobutton
 | 
			
		||||
            width: 5*mm
 | 
			
		||||
            height: 5*mm
 | 
			
		||||
            color:"transparent"
 | 
			
		||||
            width: 4*mm
 | 
			
		||||
            height: 6*mm
 | 
			
		||||
 | 
			
		||||
            //color:"transparent"
 | 
			
		||||
            text:"?"
 | 
			
		||||
            font.pixelSize: 3*mm
 | 
			
		||||
            anchors.left: photoImage.right
 | 
			
		||||
            anchors.leftMargin: 3
 | 
			
		||||
            anchors.topMargin: 3
 | 
			
		||||
            anchors.leftMargin: mm
 | 
			
		||||
            anchors.topMargin: mm
 | 
			
		||||
            anchors.top: parent.top
 | 
			
		||||
            onClicked:{
 | 
			
		||||
                //if(group.new){
 | 
			
		||||
| 
						 | 
				
			
			@ -109,7 +129,7 @@ Item {
 | 
			
		|||
        Rectangle{
 | 
			
		||||
            id: detailsrectangle
 | 
			
		||||
            anchors.top: namelabelRect.bottom
 | 
			
		||||
            anchors.topMargin: 2*mm
 | 
			
		||||
            anchors.topMargin: mm
 | 
			
		||||
            opacity: 0
 | 
			
		||||
 | 
			
		||||
            Component {
 | 
			
		||||
| 
						 | 
				
			
			@ -165,7 +185,7 @@ Item {
 | 
			
		|||
                x:1
 | 
			
		||||
                //anchors.top: parent.top
 | 
			
		||||
                width: root.width-10*mm
 | 
			
		||||
                height:groupsView.height -31*mm
 | 
			
		||||
                height:groupsView.height - 24*mm
 | 
			
		||||
                clip: true
 | 
			
		||||
                spacing: 2
 | 
			
		||||
                model: groupModel
 | 
			
		||||
| 
						 | 
				
			
			@ -178,12 +198,7 @@ Item {
 | 
			
		|||
                anchors.top: groupListView.bottom
 | 
			
		||||
                anchors.topMargin: mm
 | 
			
		||||
                spacing: mm
 | 
			
		||||
                BlueButton{
 | 
			
		||||
                    id: closeButton
 | 
			
		||||
                    text: "\uf057"
 | 
			
		||||
                    onClicked:{groupComponent.state="";
 | 
			
		||||
                        if (group.new){groupsModel.remove(index)}
 | 
			
		||||
                    }
 | 
			
		||||
 
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
//                BlueButton{
 | 
			
		||||
| 
						 | 
				
			
			@ -232,7 +247,7 @@ Item {
 | 
			
		|||
//                            groupsModel.remove(index)})
 | 
			
		||||
//                    }
 | 
			
		||||
//                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    Component.onCompleted:{if(group.new){groupComponent.state="large"}}
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -242,11 +257,13 @@ Item {
 | 
			
		|||
            name: "large"
 | 
			
		||||
            PropertyChanges { target: namelabel; font.pixelSize: 4*mm; width:groupsView.width; readOnly:false}
 | 
			
		||||
            PropertyChanges { target: namelabelRect; height: 4.5*mm}
 | 
			
		||||
            PropertyChanges { target: closeButton; visible: true}
 | 
			
		||||
            PropertyChanges { target: groupComponent; z: 2  }
 | 
			
		||||
            PropertyChanges { target: wrapper; width:groupsView.width;height:groupsView.height -2*mm-1}
 | 
			
		||||
            PropertyChanges { target: photoImage; width:15*mm;height:15*mm }
 | 
			
		||||
            PropertyChanges { target:groupComponent.GridView.view ;contentY:groupComponent.y;contentX:groupComponent.x;interactive:false}
 | 
			
		||||
            PropertyChanges { target: detailsrectangle; opacity:1  }
 | 
			
		||||
            PropertyChanges { target: infobutton; visible: false}
 | 
			
		||||
            }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,13 +30,14 @@
 | 
			
		|||
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
import QtQuick 2.0
 | 
			
		||||
import QtQuick.Controls 1.3
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
import "qrc:/qml/genericqml"
 | 
			
		||||
import "qrc:/js/service.js" as Service
 | 
			
		||||
 | 
			
		||||
Rectangle {
 | 
			
		||||
    width:root.width-2*mm
 | 
			
		||||
    height:root.height-14*mm
 | 
			
		||||
//    width:parent.width-2*mm
 | 
			
		||||
//    height:parent.height-14*mm
 | 
			
		||||
    anchors.fill:parent
 | 
			
		||||
    color:"white"
 | 
			
		||||
    property var profile:({})
 | 
			
		||||
    property var attachImageURLs:[]
 | 
			
		||||
| 
						 | 
				
			
			@ -102,12 +103,15 @@ Rectangle {
 | 
			
		|||
        callback(profiletext)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    BlueButton {
 | 
			
		||||
    MButton {
 | 
			
		||||
        id: update
 | 
			
		||||
        height: 6*mm
 | 
			
		||||
        width: 8*mm
 | 
			
		||||
        anchors.top: parent.top
 | 
			
		||||
        anchors.topMargin: mm
 | 
			
		||||
        anchors.right: parent.right
 | 
			
		||||
        text: "\uf021"
 | 
			
		||||
        font.pixelSize: 3*mm
 | 
			
		||||
        onClicked: {
 | 
			
		||||
            Service.requestProfile(root.login,root.db,root,function(nc){
 | 
			
		||||
                root.newContacts=nc;
 | 
			
		||||
| 
						 | 
				
			
			@ -132,8 +136,9 @@ Rectangle {
 | 
			
		|||
 | 
			
		||||
    Image {
 | 
			
		||||
        id: photoImage
 | 
			
		||||
        x:mm
 | 
			
		||||
        y:mm
 | 
			
		||||
        anchors.top: parent.top
 | 
			
		||||
        anchors.topMargin: mm
 | 
			
		||||
        anchors.left: parent.left
 | 
			
		||||
        width: 15*mm
 | 
			
		||||
        height:15*mm
 | 
			
		||||
        source: "file://"+profile.friendica_owner.profile_image
 | 
			
		||||
| 
						 | 
				
			
			@ -170,11 +175,13 @@ Rectangle {
 | 
			
		|||
            font.pixelSize: 4*mm
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    BlueButton{
 | 
			
		||||
    MButton{
 | 
			
		||||
        id:updatebutton
 | 
			
		||||
        height: 5*mm
 | 
			
		||||
        height: 6*mm
 | 
			
		||||
        width:8*mm
 | 
			
		||||
        visible: "file://"+profile.friendica_owner.profile_image!= photoImage.source
 | 
			
		||||
        text:qsTr("Update")
 | 
			
		||||
        font.pixelSize: 3*mm
 | 
			
		||||
        anchors.left: photoImage.right
 | 
			
		||||
        anchors.leftMargin: 0.5*mm
 | 
			
		||||
        anchors.topMargin: mm
 | 
			
		||||
| 
						 | 
				
			
			@ -184,7 +191,7 @@ Rectangle {
 | 
			
		|||
     Label {
 | 
			
		||||
        id: namelabel
 | 
			
		||||
        x: mm
 | 
			
		||||
        width: root.width-6*mm
 | 
			
		||||
        width: parent.width-6*mm
 | 
			
		||||
        height: 3*mm
 | 
			
		||||
        text:(Qt.atob(profile.friendica_owner.name))+" (@"+profile.friendica_owner.screen_name+")"
 | 
			
		||||
        elide:Text.ElideRight
 | 
			
		||||
| 
						 | 
				
			
			@ -230,7 +237,7 @@ Rectangle {
 | 
			
		|||
            font.pixelSize: 3*mm
 | 
			
		||||
            textFormat:Text.RichText
 | 
			
		||||
            wrapMode: Text.Wrap
 | 
			
		||||
            text:"<b>"+qsTr("Description")+": </b> "+(profile.friendica_owner.description)+"<br> <b>"+qsTr("Location")+":</b> "+profile.friendica_owner.location+"<br> <b>"+qsTr("Posts")+":</b> "+profile.friendica_owner.statuses_count+
 | 
			
		||||
            text:"<b>"+qsTr("Description")+": </b> "+(Qt.atob(profile.friendica_owner.description))+"<br> <b>"+qsTr("Location")+":</b> "+profile.friendica_owner.location+"<br> <b>"+qsTr("Posts")+":</b> "+profile.friendica_owner.statuses_count+
 | 
			
		||||
                "<br> <b>"+qsTr("URL")+":</b> <a href='"+ profile.friendica_owner.url+"'>"+profile.friendica_owner.url+"</a><br>"+
 | 
			
		||||
                "<b>"+qsTr("Created at")+":</b> "+createdAtDate.toLocaleString(Qt.locale())
 | 
			
		||||
            onLinkActivated: {
 | 
			
		||||
| 
						 | 
				
			
			@ -238,32 +245,32 @@ Rectangle {
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Rectangle{
 | 
			
		||||
       id: detailsrectangle
 | 
			
		||||
       anchors.top: namelabel.bottom
 | 
			
		||||
       anchors.topMargin: 2*mm
 | 
			
		||||
//    Rectangle{
 | 
			
		||||
//       id: detailsrectangle
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
       ScrollView{
 | 
			
		||||
           horizontalScrollBarPolicy:Qt.ScrollBarAlwaysOff
 | 
			
		||||
           frameVisible: true
 | 
			
		||||
           ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
 | 
			
		||||
           id:namelabelflickable
 | 
			
		||||
           width: root.width-10*mm
 | 
			
		||||
           height:root.height-36*mm//friendsTabView.height-45*mm
 | 
			
		||||
           anchors.top: namelabel.bottom
 | 
			
		||||
           anchors.topMargin: 2*mm
 | 
			
		||||
           width: parent.width-mm
 | 
			
		||||
           height:parent.height-22*mm//friendsTabView.height-45*mm
 | 
			
		||||
           x: mm
 | 
			
		||||
           clip:true
 | 
			
		||||
 | 
			
		||||
           ListView {
 | 
			
		||||
             id: profileView
 | 
			
		||||
             header:textcomponent
 | 
			
		||||
             width:root.width-10*mm
 | 
			
		||||
             height: root.height
 | 
			
		||||
             clip: true
 | 
			
		||||
//             width:parent.width
 | 
			
		||||
//             height: root.height
 | 
			
		||||
//             clip: true
 | 
			
		||||
             spacing: 0
 | 
			
		||||
             model: profileModel
 | 
			
		||||
             delegate: profileItem
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
//    }
 | 
			
		||||
 | 
			
		||||
    Component.onCompleted: {
 | 
			
		||||
        profile.profiles.sort(function(obj1, obj2) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,37 +32,27 @@
 | 
			
		|||
import QtQuick 2.5
 | 
			
		||||
import QtQuick.LocalStorage 2.0
 | 
			
		||||
import QtQuick.Window 2.0
 | 
			
		||||
import QtQuick.Controls 1.2
 | 
			
		||||
import QtQuick.Controls.Styles 1.4
 | 
			
		||||
//import QtQuick.Controls 2.3
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
import QtQuick.Layouts 1.11
 | 
			
		||||
import "qrc:/js/news.js" as Newsjs
 | 
			
		||||
import "qrc:/js/service.js" as Service
 | 
			
		||||
import "qrc:/qml/genericqml"
 | 
			
		||||
import "qrc:/qml/newsqml"
 | 
			
		||||
import "qrc:/qml/contactqml"
 | 
			
		||||
import "qrc:/qml/photoqml"
 | 
			
		||||
import "qrc:/qml/calendarqml"
 | 
			
		||||
import "qrc:/qml/configqml"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TabView{
 | 
			
		||||
StackView{
 | 
			
		||||
    id:root
 | 
			
		||||
    property QtObject osSettings: {var tmp=Qt.createComponent("qrc:/qml/configqml/OSSettingsAndroid.qml");return tmp.createObject(root)}
 | 
			
		||||
    //IntentReceiver{}
 | 
			
		||||
    tabPosition: Qt.BottomEdge
 | 
			
		||||
    width: osSettings.appWidth
 | 
			
		||||
    height:osSettings.appHeight
 | 
			
		||||
    focus:true
 | 
			
		||||
 | 
			
		||||
    property var db: ["Friendiqa", "1.0", "Stores Friendica data", 100000000]
 | 
			
		||||
    property var login: Service.readActiveConfig(db)
 | 
			
		||||
    property var globaloptions: ({}) //Service.readGlobaloptions(db)
 | 
			
		||||
    property var contactlist: []
 | 
			
		||||
    property real mm: Screen.pixelDensity
 | 
			
		||||
    property real mm:  osSettings.osType=="Android"?Screen.pixelDensity:Screen.pixelDensity*1.5
 | 
			
		||||
    signal messageSignal(var friend)
 | 
			
		||||
    signal fotoSignal(var username, var friend)
 | 
			
		||||
    signal directmessageSignal(var friend)
 | 
			
		||||
    signal newsSignal(var news)
 | 
			
		||||
    signal newstypeSignal(var type)
 | 
			
		||||
    signal friendsSignal(var username)
 | 
			
		||||
    signal contactdetailsSignal(var contact)
 | 
			
		||||
    signal eventSignal(var contact)
 | 
			
		||||
| 
						 | 
				
			
			@ -75,8 +65,8 @@ TabView{
 | 
			
		|||
    property bool imagePicking: false
 | 
			
		||||
 | 
			
		||||
    onLoginChanged:{
 | 
			
		||||
        if(login==""){root.currentIndex=4}
 | 
			
		||||
        else{
 | 
			
		||||
        if(login==""){root.push("qrc:/qml/configqml/AccountPage.qml")}
 | 
			
		||||
        else{root.push(rootStackItem)
 | 
			
		||||
            newstab.newstabstatus=login.newsViewType;
 | 
			
		||||
            Newsjs.getCurrentContacts(login,db,function(contacts){
 | 
			
		||||
                contactlist=contacts})}
 | 
			
		||||
| 
						 | 
				
			
			@ -121,7 +111,7 @@ TabView{
 | 
			
		|||
                newstab.active=true;
 | 
			
		||||
                if (newstab.newstabstatus!=login.newsViewType){
 | 
			
		||||
                    newstab.newstabstatus=login.newsViewType;
 | 
			
		||||
                    if(login.newsViewType=="Timeline"){Newsjs.newsfromdb(db,login.username,function(dbnews){
 | 
			
		||||
                    if(login.newsViewType=="Timeline"){Newsjs.newsfromdb(db,login.username,0,function(dbnews){
 | 
			
		||||
                        newsSignal(dbnews)
 | 
			
		||||
                    })}
 | 
			
		||||
                    else{
 | 
			
		||||
| 
						 | 
				
			
			@ -140,64 +130,273 @@ TabView{
 | 
			
		|||
         event.accepted = true
 | 
			
		||||
    }}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    style: TabViewStyle {
 | 
			
		||||
        frameOverlap: 1
 | 
			
		||||
        tab: Rectangle {
 | 
			
		||||
            color: styleData.selected?"sky blue":"light blue"
 | 
			
		||||
            //border.color: "light grey"
 | 
			
		||||
            implicitWidth: root.width/5
 | 
			
		||||
            implicitHeight: 5*mm
 | 
			
		||||
            Text { id: text
 | 
			
		||||
                anchors.centerIn: parent
 | 
			
		||||
                text: styleData.title
 | 
			
		||||
                color: "black"
 | 
			
		||||
               font.family: fontAwesome.name
 | 
			
		||||
                font.pixelSize: 3*mm
 | 
			
		||||
    Drawer{
 | 
			
		||||
        id: leftDrawer
 | 
			
		||||
        width: 0.66* root.width
 | 
			
		||||
        height: root.height
 | 
			
		||||
        edge: Qt.LeftEdge
 | 
			
		||||
        position: 1.0
 | 
			
		||||
        Column{
 | 
			
		||||
            x:mm
 | 
			
		||||
            width:parent.width-mm
 | 
			
		||||
            Label{
 | 
			
		||||
                text: login.hasOwnProperty("username")?login.username:""
 | 
			
		||||
                font.pixelSize: 4*mm
 | 
			
		||||
                width: parent.width
 | 
			
		||||
                height: 6*mm
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
         frame: Rectangle { color: "light grey" }
 | 
			
		||||
         tabsAlignment:Qt.AlignHCenter
 | 
			
		||||
     }
 | 
			
		||||
//            Label{
 | 
			
		||||
//                text:login.hasOwnProperty("server")?"@"+login.server:""
 | 
			
		||||
//                font.pixelSize: 5*mm
 | 
			
		||||
//                width: parent.width
 | 
			
		||||
//            }
 | 
			
		||||
            
 | 
			
		||||
           Label{
 | 
			
		||||
                text: "\uf021 " + qsTr("Refresh")
 | 
			
		||||
                font.pixelSize: 4*mm
 | 
			
		||||
                width: parent.width
 | 
			
		||||
                MouseArea{
 | 
			
		||||
                    anchors.fill: parent
 | 
			
		||||
                    onClicked:{
 | 
			
		||||
                        leftDrawer.close();
 | 
			
		||||
                        newstypeSignal("refresh")
 | 
			
		||||
//                        updatenews.setDatabase();
 | 
			
		||||
//                        updatenews.login();
 | 
			
		||||
//                        updatenews.startsync();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            
 | 
			
		||||
            Label{
 | 
			
		||||
                text: "\uf1da " + qsTr("Timeline")
 | 
			
		||||
                font.pixelSize: 4*mm
 | 
			
		||||
                width: parent.width
 | 
			
		||||
                MouseArea{
 | 
			
		||||
                    anchors.fill: parent
 | 
			
		||||
                    onClicked:{
 | 
			
		||||
                        leftDrawer.close();
 | 
			
		||||
                        newstypeSignal("timeline")
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            Label{
 | 
			
		||||
                text: "\uf086 " + qsTr("Conversations")
 | 
			
		||||
                width: parent.width
 | 
			
		||||
                font.pixelSize: 4*mm
 | 
			
		||||
                MouseArea{
 | 
			
		||||
                    anchors.fill: parent
 | 
			
		||||
                    onClicked:{
 | 
			
		||||
                        leftDrawer.close();
 | 
			
		||||
                        newstypeSignal("conversation")
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            Label{
 | 
			
		||||
                text: "\uf005 " + qsTr("Favorites")
 | 
			
		||||
                font.pixelSize: 4*mm
 | 
			
		||||
                width: parent.width
 | 
			
		||||
                MouseArea{
 | 
			
		||||
                    anchors.fill: parent
 | 
			
		||||
                    onClicked:{
 | 
			
		||||
                        leftDrawer.close();
 | 
			
		||||
                        newstypeSignal("favorites")
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            Label{
 | 
			
		||||
                text: "\uf0ec " + qsTr("Replies")
 | 
			
		||||
                font.pixelSize: 4*mm
 | 
			
		||||
                width: parent.width
 | 
			
		||||
                MouseArea{
 | 
			
		||||
                    anchors.fill: parent
 | 
			
		||||
                    onClicked:{
 | 
			
		||||
                        leftDrawer.close();
 | 
			
		||||
                        newstypeSignal("replies")
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            
 | 
			
		||||
            Label{
 | 
			
		||||
                text: "\uf0ac " + qsTr("Public Timeline")
 | 
			
		||||
                font.pixelSize: 4*mm
 | 
			
		||||
                width: parent.width
 | 
			
		||||
                MouseArea{
 | 
			
		||||
                    anchors.fill: parent
 | 
			
		||||
                    onClicked:{
 | 
			
		||||
                        leftDrawer.close();
 | 
			
		||||
                        newstypeSignal("publictimeline")
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
           Label{
 | 
			
		||||
                text: "\uf0c0 " + qsTr("Group news")
 | 
			
		||||
                font.pixelSize: 4*mm
 | 
			
		||||
                width: parent.width
 | 
			
		||||
                MouseArea{
 | 
			
		||||
                    anchors.fill: parent
 | 
			
		||||
                    onClicked:{
 | 
			
		||||
                        leftDrawer.close();
 | 
			
		||||
                        newstypeSignal("groupnews")
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            Label{
 | 
			
		||||
                text: "\uf002 " + qsTr("Search")
 | 
			
		||||
                font.pixelSize: 4*mm
 | 
			
		||||
                width: parent.width
 | 
			
		||||
                MouseArea{
 | 
			
		||||
                    anchors.fill: parent
 | 
			
		||||
                    onClicked:{
 | 
			
		||||
                        leftDrawer.close();
 | 
			
		||||
                        newstypeSignal("search")
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            Label{
 | 
			
		||||
                text: "\uf085 "+ qsTr("Settings")
 | 
			
		||||
                font.pixelSize: 4*mm
 | 
			
		||||
                width: parent.width
 | 
			
		||||
                MouseArea{
 | 
			
		||||
                    anchors.fill: parent
 | 
			
		||||
                    onClicked: {root.push("qrc:qml/configqml/ConfigPage.qml");
 | 
			
		||||
                        leftDrawer.close()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            Label{
 | 
			
		||||
                text: "\uf2bb " + qsTr("Accounts")
 | 
			
		||||
                font.pixelSize: 4*mm
 | 
			
		||||
                width: parent.width
 | 
			
		||||
                MouseArea{
 | 
			
		||||
                    anchors.fill: parent
 | 
			
		||||
                    onClicked: {root.push("qrc:qml/configqml/AccountPage.qml");
 | 
			
		||||
                        leftDrawer.close()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            Label{
 | 
			
		||||
 | 
			
		||||
    Tab{
 | 
			
		||||
        title: "\uf03a"
 | 
			
		||||
        id: newstab
 | 
			
		||||
        property string newstabstatus
 | 
			
		||||
        property var conversation:[]
 | 
			
		||||
        property var contactposts:[]
 | 
			
		||||
        source:(root.currentIndex==0)? "qrc:/qml/newsqml/NewsTab.qml":""
 | 
			
		||||
    }
 | 
			
		||||
    Tab{
 | 
			
		||||
        title: "\uf0c0"
 | 
			
		||||
        id: friendstab
 | 
			
		||||
        source: (root.currentIndex==1)?"qrc:/qml/contactqml/FriendsTab.qml":""
 | 
			
		||||
    }
 | 
			
		||||
    Tab{
 | 
			
		||||
        title: "\uf03e"
 | 
			
		||||
        id: fotostab
 | 
			
		||||
        property string phototabstatus:"Images"
 | 
			
		||||
        source: (root.currentIndex==2)?"qrc:/qml/photoqml/PhotoTab.qml":""
 | 
			
		||||
    }
 | 
			
		||||
    Tab{
 | 
			
		||||
        title: "\uf073"
 | 
			
		||||
        id: calendartab
 | 
			
		||||
        property string calendartabstatus:"Events"
 | 
			
		||||
        source: (root.currentIndex==3)?"qrc:/qml/calendarqml/CalendarTab.qml":""
 | 
			
		||||
                text: "\uf08b  " +qsTr("Quit")
 | 
			
		||||
                font.pixelSize: 4*mm
 | 
			
		||||
                width: parent.width
 | 
			
		||||
                MouseArea{
 | 
			
		||||
                    anchors.fill: parent
 | 
			
		||||
                    onClicked:{
 | 
			
		||||
                        Service.cleanNews(root.db,function(){
 | 
			
		||||
                             Service.cleanContacts(root.login,root.db,function(){
 | 
			
		||||
                                 Qt.quit()})
 | 
			
		||||
                             })
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Tab{
 | 
			
		||||
        title:"\uf085"
 | 
			
		||||
        id: configtab
 | 
			
		||||
        source: (root.currentIndex==4)?"qrc:/qml/configqml/ConfigTab.qml":""
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    Item{
 | 
			
		||||
        id:rootStackItem
 | 
			
		||||
        //anchors.fill:parent
 | 
			
		||||
        states: State {
 | 
			
		||||
            name: "fullscreen";
 | 
			
		||||
            PropertyChanges { target: bar; height:0 }
 | 
			
		||||
            PropertyChanges { target: rootstack; height:parent.height }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        transitions: Transition {
 | 
			
		||||
            PropertyAnimation { properties: "height";
 | 
			
		||||
                easing.type: Easing.InOutQuad
 | 
			
		||||
                duration: 1000
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        TabBar {
 | 
			
		||||
              id: bar
 | 
			
		||||
              width: parent.width
 | 
			
		||||
              height: 7*mm
 | 
			
		||||
              position:TabBar.Footer
 | 
			
		||||
              anchors.top: rootstack.bottom
 | 
			
		||||
              onCurrentIndexChanged: rootstack.currentIndex=bar.currentIndex
 | 
			
		||||
              TabButton {
 | 
			
		||||
                  text: "\uf03a"
 | 
			
		||||
                  font.pixelSize: 3*mm
 | 
			
		||||
                  height: 6*mm
 | 
			
		||||
              }
 | 
			
		||||
              TabButton {
 | 
			
		||||
                  text:  "\uf0c0"
 | 
			
		||||
                  font.pixelSize: 3*mm
 | 
			
		||||
                  height: 6*mm
 | 
			
		||||
              }
 | 
			
		||||
              TabButton {
 | 
			
		||||
                  text:   "\uf03e"
 | 
			
		||||
                  font.pixelSize: 3*mm
 | 
			
		||||
                  height: 6*mm
 | 
			
		||||
              }
 | 
			
		||||
 | 
			
		||||
              TabButton {
 | 
			
		||||
                  text:    "\uf073"
 | 
			
		||||
                  font.pixelSize: 3*mm
 | 
			
		||||
                  height: 6*mm
 | 
			
		||||
              }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        StackLayout{
 | 
			
		||||
            id:rootstack
 | 
			
		||||
            width:parent.width
 | 
			
		||||
            height: parent.height-7*mm
 | 
			
		||||
            currentIndex:bar.currentIndex
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            Loader{
 | 
			
		||||
                id: newstab
 | 
			
		||||
                Layout.fillWidth:true
 | 
			
		||||
                Layout.fillHeight: true
 | 
			
		||||
                property string newstabstatus
 | 
			
		||||
                property var conversation:[]
 | 
			
		||||
                property var contactposts:[]
 | 
			
		||||
                source:(rootstack.currentIndex==0)? "qrc:/qml/newsqml/NewsTab.qml":""
 | 
			
		||||
            }
 | 
			
		||||
            Loader{
 | 
			
		||||
                id: friendstab
 | 
			
		||||
                Layout.fillWidth:true
 | 
			
		||||
                Layout.fillHeight: true
 | 
			
		||||
                source: (rootstack.currentIndex==1)?"qrc:/qml/contactqml/FriendsTab.qml":""
 | 
			
		||||
            }
 | 
			
		||||
            Loader{
 | 
			
		||||
                id: fotostab
 | 
			
		||||
                property string phototabstatus:"Images"
 | 
			
		||||
                Layout.fillWidth:true
 | 
			
		||||
                Layout.fillHeight: true
 | 
			
		||||
                source: (rootstack.currentIndex==2)?"qrc:/qml/photoqml/PhotoTab.qml":""
 | 
			
		||||
            }
 | 
			
		||||
            Loader{
 | 
			
		||||
                id: calendartab
 | 
			
		||||
                property string calendartabstatus:"Events"
 | 
			
		||||
                Layout.fillWidth:true
 | 
			
		||||
                Layout.fillHeight: true
 | 
			
		||||
                source: (rootstack.currentIndex==3)?"qrc:/qml/calendarqml/CalendarTab.qml":""
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    Component.onCompleted: {
 | 
			
		||||
        Service.readGlobaloptions(db,function(go){globaloptions=go})
 | 
			
		||||
        //print(xhr.networktype);
 | 
			
		||||
        //print(xhr.networktype());
 | 
			
		||||
        if(osSettings.osType=="Android"){
 | 
			
		||||
            var component = Qt.createComponent("qrc:/qml/genericqml/IntentReceiver.qml");
 | 
			
		||||
            var IntentReceiverQml = component.createObject(root);
 | 
			
		||||
 | 
			
		||||
        } else if (osSettings.osType=="Linux"){
 | 
			
		||||
            var component = Qt.createComponent("qrc:/qml/genericqml/LinuxSync.qml");
 | 
			
		||||
            var LinuxSyncQml = component.createObject(root);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -64,7 +64,7 @@ Rectangle{
 | 
			
		|||
 | 
			
		||||
states: [
 | 
			
		||||
    State { name: "Pressed"
 | 
			
		||||
       PropertyChanges { target: blueButton; color: "sky blue"} }
 | 
			
		||||
       PropertyChanges { target: blueButton; color: "white"} }
 | 
			
		||||
    ]
 | 
			
		||||
transitions: [
 | 
			
		||||
    Transition { to:"*"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ Item {
 | 
			
		|||
    Connections {
 | 
			
		||||
        target: SystemDispatcher
 | 
			
		||||
        onDispatched: {
 | 
			
		||||
            if (type === m_CHOSEN_MESSAGE) {
 | 
			
		||||
            if ((type === m_CHOSEN_MESSAGE) && (root.imagePicking==true)) {
 | 
			
		||||
                var h=[];
 | 
			
		||||
                for (var n in message.imageUrls){
 | 
			
		||||
                    h.push("file://"+ decodeURIComponent(message.imageUrls[n]).substring(5))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,7 +30,7 @@
 | 
			
		|||
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
import QtQuick 2.0
 | 
			
		||||
import QtQuick.Controls 1.2
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
import Qt.labs.folderlistmodel 2.1
 | 
			
		||||
import "qrc:/js/service.js" as Service
 | 
			
		||||
import "qrc:/js/helper.js" as Helperjs
 | 
			
		||||
| 
						 | 
				
			
			@ -60,8 +60,9 @@ Rectangle{
 | 
			
		|||
         wrapMode: Text.Wrap
 | 
			
		||||
         text: directory
 | 
			
		||||
    }
 | 
			
		||||
    BlueButton{
 | 
			
		||||
    Button{
 | 
			
		||||
        id:closeButton
 | 
			
		||||
        height: 8*mm
 | 
			
		||||
        anchors.top: parent.top
 | 
			
		||||
        anchors.topMargin: 0.5*mm
 | 
			
		||||
        anchors.right: parent.right
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,14 +23,14 @@ Item {
 | 
			
		|||
                }
 | 
			
		||||
                imageUrls=h;
 | 
			
		||||
                if(imageUrls.length==1){
 | 
			
		||||
                    root.currentIndex=0;newstab.active=true;
 | 
			
		||||
                    rootstack.currentIndex=0;newstab.active=true;
 | 
			
		||||
                    root.uploadSignal(imageUrls)
 | 
			
		||||
                } else{
 | 
			
		||||
                       root.currentIndex=2;fotostab.active=true;
 | 
			
		||||
                       rootstack.currentIndex=2;fotostab.active=true;
 | 
			
		||||
                       root.uploadSignal(imageUrls)
 | 
			
		||||
                }
 | 
			
		||||
            } else if (type==m_TEXT_MESSAGE){  
 | 
			
		||||
                root.currentIndex=0;newstab.active=true;
 | 
			
		||||
                rootstack.currentIndex=0;newstab.active=true;
 | 
			
		||||
                root.sendtextSignal(message)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -38,9 +38,8 @@ Item {
 | 
			
		|||
 | 
			
		||||
    Component.onCompleted: {
 | 
			
		||||
        SystemDispatcher.setInitialized();
 | 
			
		||||
        print("timer " + login.timerInterval)
 | 
			
		||||
        if (login.timerInterval !=0){
 | 
			
		||||
            alarm.setAlarm(login.timerInterval);
 | 
			
		||||
        if (root.globaloptions.hasOwnProperty("syncinterval") && root.globaloptions.syncinterval !=null && root.globaloptions.syncinterval !=0){
 | 
			
		||||
            alarm.setAlarm(root.globaloptions.syncinterval);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										22
									
								
								source-android/qml/genericqml/LinuxSync.qml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								source-android/qml/genericqml/LinuxSync.qml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
import QtQuick 2.4
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Item {
 | 
			
		||||
    Timer{
 | 
			
		||||
        id:syncTimer
 | 
			
		||||
        repeat: true
 | 
			
		||||
        onTriggered: {
 | 
			
		||||
            updatenews.setDatabase();
 | 
			
		||||
            updatenews.login();
 | 
			
		||||
            updatenews.startsync();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Component.onCompleted: {
 | 
			
		||||
        if (root.globaloptions.hasOwnProperty("syncinterval") && root.globaloptions.syncinterval !=null && root.globaloptions.syncinterval !=0){
 | 
			
		||||
            syncTimer.interval=root.globaloptions.syncinterval*60000;
 | 
			
		||||
            syncTimer.start()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										39
									
								
								source-android/qml/genericqml/MButton.qml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								source-android/qml/genericqml/MButton.qml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,39 @@
 | 
			
		|||
//  This file is part of Friendiqa
 | 
			
		||||
//  https://github.com/lubuwest/Friendiqa
 | 
			
		||||
//  Copyright (C) 2017 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/>.
 | 
			
		||||
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
Button{
 | 
			
		||||
    id: mButton
 | 
			
		||||
    width: Math.max(text.width+2*mm,8*mm)
 | 
			
		||||
    height: 6*mm
 | 
			
		||||
    //color: Material.grey
 | 
			
		||||
    font.pixelSize: 3*mm
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -29,7 +29,7 @@
 | 
			
		|||
//  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 2.11
 | 
			
		||||
import "qrc:/js/service.js" as Service
 | 
			
		||||
import "qrc:/js/helper.js" as Helperjs
 | 
			
		||||
import "qrc:/qml/genericqml"
 | 
			
		||||
| 
						 | 
				
			
			@ -178,7 +178,7 @@ Rectangle{
 | 
			
		|||
               else {groupstatus="neutral"}  }
 | 
			
		||||
              }
 | 
			
		||||
      }
 | 
			
		||||
      BlueButton{
 | 
			
		||||
      MButton{
 | 
			
		||||
         x:0.5*mm
 | 
			
		||||
         anchors.bottom: parent.bottom
 | 
			
		||||
         anchors.bottomMargin:1
 | 
			
		||||
| 
						 | 
				
			
			@ -190,7 +190,7 @@ Rectangle{
 | 
			
		|||
            Service.savePermissions(db,perms)
 | 
			
		||||
                   }
 | 
			
		||||
      }
 | 
			
		||||
      BlueButton{
 | 
			
		||||
      MButton{
 | 
			
		||||
         x:contactView.width+2*mm
 | 
			
		||||
         anchors.bottom: parent.bottom
 | 
			
		||||
         anchors.bottomMargin:1
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,7 +54,7 @@ Rectangle {
 | 
			
		|||
        anchors.top:parent.top
 | 
			
		||||
        anchors.topMargin: 0.5*mm
 | 
			
		||||
        width:parent.width-2*mm
 | 
			
		||||
        height: 7*mm //Math.max( searchText.contentHeight,5*mm)
 | 
			
		||||
        height: 4*mm //Math.max( searchText.contentHeight,5*mm)
 | 
			
		||||
 | 
			
		||||
        TextInput {
 | 
			
		||||
            id: searchText
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,7 +31,7 @@
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
import QtQuick 2.0
 | 
			
		||||
import QtQuick.Controls 1.2
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
import "qrc:/js/helper.js" as Helperjs
 | 
			
		||||
import "qrc:/qml/genericqml"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -43,7 +43,7 @@ Rectangle {
 | 
			
		|||
   ListView {
 | 
			
		||||
          id: contactView
 | 
			
		||||
          x:mm
 | 
			
		||||
          y:8*mm
 | 
			
		||||
          y:9*mm
 | 
			
		||||
          width: contactList.width-4*mm
 | 
			
		||||
          height:contactList.height-10*mm
 | 
			
		||||
          clip: true
 | 
			
		||||
| 
						 | 
				
			
			@ -90,35 +90,48 @@ Rectangle {
 | 
			
		|||
                   y: mm
 | 
			
		||||
                      spacing:4
 | 
			
		||||
 | 
			
		||||
                      BlueButton{
 | 
			
		||||
                      MButton{
 | 
			
		||||
                          id:photobutton
 | 
			
		||||
                          height: 6*mm
 | 
			
		||||
                          width: 8*mm
 | 
			
		||||
                          text: "\uf03e" // "Photos"
 | 
			
		||||
                          //font.pixelSize: 3*mm
 | 
			
		||||
                          visible:(contact.network=="dfrn")
 | 
			
		||||
                          onClicked:{print(createdAtDate + " contact.created_at"+contact.created_at)
 | 
			
		||||
                          onClicked:{
 | 
			
		||||
                              rootstack.currentIndex=2;
 | 
			
		||||
                              bar.currentIndex=2;
 | 
			
		||||
                              fotostab.phototabstatus="Contact";
 | 
			
		||||
                              currentIndex=2;
 | 
			
		||||
                              fotostab.active=true;
 | 
			
		||||
 | 
			
		||||
                              //fotostab.active=true;
 | 
			
		||||
                              fotoSignal(root.login,contact) ;
 | 
			
		||||
                              newsStack.pop();
 | 
			
		||||
                              }
 | 
			
		||||
                       }
 | 
			
		||||
 | 
			
		||||
                      BlueButton{
 | 
			
		||||
                      MButton{
 | 
			
		||||
                          id:dmbutton
 | 
			
		||||
                          height: 6*mm
 | 
			
		||||
                          width: 8*mm
 | 
			
		||||
                          visible: (contact.following=="true")
 | 
			
		||||
                          text: "\uf040" //"DM"
 | 
			
		||||
                          //font.pixelSize: 3*mm
 | 
			
		||||
                          onClicked:{
 | 
			
		||||
                              currentIndex=0;
 | 
			
		||||
                              directmessageSignal(contact.screen_name)
 | 
			
		||||
                              rootstack.currentIndex=0;
 | 
			
		||||
                              newsSwipeview.currentIndex=2;
 | 
			
		||||
                              directmessageSignal(contact)
 | 
			
		||||
                          }
 | 
			
		||||
                      }
 | 
			
		||||
 | 
			
		||||
                      BlueButton{
 | 
			
		||||
                      MButton{
 | 
			
		||||
                          id:eventbutton
 | 
			
		||||
                          visible:(contact.network=="dfrn")
 | 
			
		||||
                          height: 6*mm
 | 
			
		||||
                          width: 8*mm
 | 
			
		||||
                          text:"\uf073"
 | 
			
		||||
                          //font.pixelSize: 3*mm
 | 
			
		||||
                          onClicked:{
 | 
			
		||||
                              currentIndex=3;
 | 
			
		||||
                              rootstack.currentIndex=3;
 | 
			
		||||
                              bar.currentIndex=3;
 | 
			
		||||
                              calendartab.calendartabstatus="Friend"
 | 
			
		||||
                              eventSignal(contact);
 | 
			
		||||
                              newsStack.pop()
 | 
			
		||||
| 
						 | 
				
			
			@ -179,14 +192,16 @@ Rectangle {
 | 
			
		|||
        source: "qrc:/js/newsworker.js"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    BlueButton {
 | 
			
		||||
    MButton {
 | 
			
		||||
            id: closeButton
 | 
			
		||||
            width:10*mm
 | 
			
		||||
            height: 6*mm
 | 
			
		||||
            width: 8*mm
 | 
			
		||||
            anchors.top: parent.top
 | 
			
		||||
            anchors.topMargin: 1*mm
 | 
			
		||||
            anchors.right: parent.right
 | 
			
		||||
            anchors.rightMargin: 1*mm
 | 
			
		||||
            text: "\uf057"
 | 
			
		||||
            //font.pixelSize: 3*mm
 | 
			
		||||
            onClicked: {
 | 
			
		||||
                newsStack.pop()
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,9 +31,10 @@
 | 
			
		|||
 | 
			
		||||
// ConversationView with button
 | 
			
		||||
import QtQuick 2.0
 | 
			
		||||
import QtQuick.Controls 1.2
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
import "qrc:/js/helper.js" as Helperjs
 | 
			
		||||
import "qrc:/qml/genericqml"
 | 
			
		||||
import "qrc:/qml/newsqml"
 | 
			
		||||
 | 
			
		||||
Rectangle {
 | 
			
		||||
    id:conversationList
 | 
			
		||||
| 
						 | 
				
			
			@ -56,7 +57,7 @@ Rectangle {
 | 
			
		|||
          height:conversationList.height-10*mm
 | 
			
		||||
          clip: true
 | 
			
		||||
          spacing: 0
 | 
			
		||||
          footer: footerReply
 | 
			
		||||
          footer: MessageSend{conversation:true}//footerReply
 | 
			
		||||
          model: conversationModel
 | 
			
		||||
          delegate: Newsitem{}
 | 
			
		||||
          }
 | 
			
		||||
| 
						 | 
				
			
			@ -89,68 +90,70 @@ Rectangle {
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
   Component {  id:footerReply
 | 
			
		||||
       Rectangle{
 | 
			
		||||
           border.color: "#EEEEEE"
 | 
			
		||||
           border.width: 1
 | 
			
		||||
           color:"lightgrey"
 | 
			
		||||
           width:conversationView.width
 | 
			
		||||
           height:Math.max(replyText.contentHeight+2*mm,6*mm)
 | 
			
		||||
           Rectangle{
 | 
			
		||||
               color: "white"
 | 
			
		||||
               radius:0.5*mm
 | 
			
		||||
               anchors.left: parent.left
 | 
			
		||||
               anchors.leftMargin:mm
 | 
			
		||||
               anchors.top:parent.top
 | 
			
		||||
               anchors.topMargin: 0.5*mm
 | 
			
		||||
               width:parent.width-12*mm
 | 
			
		||||
               height:Math.max( replyText.contentHeight,5*mm)
 | 
			
		||||
//   Component {  id:footerReply
 | 
			
		||||
//       Rectangle{
 | 
			
		||||
//           border.color: "#EEEEEE"
 | 
			
		||||
//           border.width: 1
 | 
			
		||||
//           color:"lightgrey"
 | 
			
		||||
//           width:conversationView.width
 | 
			
		||||
//           height:Math.max(replyText.contentHeight+2*mm,6*mm)
 | 
			
		||||
//           Rectangle{
 | 
			
		||||
//               color: "white"
 | 
			
		||||
//               radius:0.5*mm
 | 
			
		||||
//               anchors.left: parent.left
 | 
			
		||||
//               anchors.leftMargin:mm
 | 
			
		||||
//               anchors.top:parent.top
 | 
			
		||||
//               anchors.topMargin: 0.5*mm
 | 
			
		||||
//               width:parent.width-12*mm
 | 
			
		||||
//               height:Math.max( replyText.contentHeight,5*mm)
 | 
			
		||||
 | 
			
		||||
               TextInput {
 | 
			
		||||
                id: replyText
 | 
			
		||||
                font.pixelSize: 3*mm
 | 
			
		||||
                wrapMode: Text.Wrap
 | 
			
		||||
                anchors.fill: parent
 | 
			
		||||
                selectByMouse: true
 | 
			
		||||
                onHeightChanged: conversationView.contentY+=4.5*mm
 | 
			
		||||
                }
 | 
			
		||||
           }
 | 
			
		||||
//               TextInput {
 | 
			
		||||
//                id: replyText
 | 
			
		||||
//                font.pixelSize: 3*mm
 | 
			
		||||
//                wrapMode: Text.Wrap
 | 
			
		||||
//                anchors.fill: parent
 | 
			
		||||
//                selectByMouse: true
 | 
			
		||||
//                onHeightChanged: conversationView.contentY+=4.5*mm
 | 
			
		||||
//                }
 | 
			
		||||
//           }
 | 
			
		||||
 | 
			
		||||
            BlueButton {
 | 
			
		||||
                id: sendButton
 | 
			
		||||
                text: "\uf1d9"
 | 
			
		||||
                anchors.right: parent.right
 | 
			
		||||
                anchors.rightMargin:mm
 | 
			
		||||
                anchors.top:parent.top
 | 
			
		||||
                anchors.topMargin: 0.5*mm
 | 
			
		||||
                color:"white"
 | 
			
		||||
                onClicked: { try{
 | 
			
		||||
                   var body=replyText.getText(0,replyText.length);
 | 
			
		||||
                   newsBusy.running=true;
 | 
			
		||||
                        replyText.text=""
 | 
			
		||||
                   xhr.clearParams();
 | 
			
		||||
                   xhr.setLogin(login.username+":"+Qt.atob(login.password));
 | 
			
		||||
                   if (conversationModel.get(0).newsitemobject.messagetype==0){
 | 
			
		||||
//           Button {
 | 
			
		||||
//                id: sendButton
 | 
			
		||||
//                height: 8*mm
 | 
			
		||||
//                width:8*mm
 | 
			
		||||
//                text: "\uf1d9"
 | 
			
		||||
//                anchors.right: parent.right
 | 
			
		||||
//                anchors.rightMargin:mm
 | 
			
		||||
//                anchors.top:parent.top
 | 
			
		||||
//                anchors.topMargin: 0.5*mm
 | 
			
		||||
//                //color:"white"
 | 
			
		||||
//                onClicked: { try{
 | 
			
		||||
//                   var body=replyText.getText(0,replyText.length);
 | 
			
		||||
//                   newsBusy.running=true;
 | 
			
		||||
//                        replyText.text=""
 | 
			
		||||
//                   xhr.clearParams();
 | 
			
		||||
//                   xhr.setLogin(login.username+":"+Qt.atob(login.password));
 | 
			
		||||
//                   if (conversationModel.get(0).newsitemobject.messagetype==0){
 | 
			
		||||
 | 
			
		||||
                       //xhr.url= login.server + "/api/statuses/update.json";
 | 
			
		||||
                  xhr.setUrl(login.server);
 | 
			
		||||
                 xhr.setApi("/api/statuses/update");
 | 
			
		||||
                       xhr.setParam("source", "Friendiqa");
 | 
			
		||||
                       xhr.setParam("status", body);
 | 
			
		||||
                       xhr.setParam("in_reply_to_status_id", conversationModel.get(conversationModel.count-1).newsitemobject.id)}
 | 
			
		||||
                   else {//xhr.url= login.server + "/api/direct_messages/new.json";
 | 
			
		||||
                       xhr.setUrl(login.server);
 | 
			
		||||
                      xhr.setApi("/api/direct_messages/new");
 | 
			
		||||
                       xhr.setParam("text", body);
 | 
			
		||||
                       xhr.setParam("screen_name",conversationModel.get(conversationModel.count-1).newsitemobject.screen_name);
 | 
			
		||||
                       xhr.setParam("replyto", conversationModel.get(conversationModel.count-1).newsitemobject.id)
 | 
			
		||||
                   }
 | 
			
		||||
                   xhr.post();
 | 
			
		||||
                   } catch(e){Helperjs.showMessage("Error",e.toString(),root)}
 | 
			
		||||
               }
 | 
			
		||||
           }
 | 
			
		||||
       }
 | 
			
		||||
   }
 | 
			
		||||
//                       //xhr.url= login.server + "/api/statuses/update.json";
 | 
			
		||||
//                  xhr.setUrl(login.server);
 | 
			
		||||
//                 xhr.setApi("/api/statuses/update");
 | 
			
		||||
//                       xhr.setParam("source", "Friendiqa");
 | 
			
		||||
//                       xhr.setParam("status", body);
 | 
			
		||||
//                       xhr.setParam("in_reply_to_status_id", conversationModel.get(conversationModel.count-1).newsitemobject.id)}
 | 
			
		||||
//                   else {//xhr.url= login.server + "/api/direct_messages/new.json";
 | 
			
		||||
//                       xhr.setUrl(login.server);
 | 
			
		||||
//                      xhr.setApi("/api/direct_messages/new");
 | 
			
		||||
//                       xhr.setParam("text", body);
 | 
			
		||||
//                       xhr.setParam("screen_name",conversationModel.get(conversationModel.count-1).newsitemobject.screen_name);
 | 
			
		||||
//                       xhr.setParam("replyto", conversationModel.get(conversationModel.count-1).newsitemobject.id)
 | 
			
		||||
//                   }
 | 
			
		||||
//                   xhr.post();
 | 
			
		||||
//                   } catch(e){Helperjs.showMessage("Error",e.toString(),root)}
 | 
			
		||||
//               }
 | 
			
		||||
//           }
 | 
			
		||||
//       }
 | 
			
		||||
//   }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -161,9 +164,10 @@ Rectangle {
 | 
			
		|||
        source: "qrc:/js/newsworker.js"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    BlueButton {
 | 
			
		||||
    MButton {
 | 
			
		||||
            id: closeButton
 | 
			
		||||
            width:10*mm
 | 
			
		||||
            height: 6*mm
 | 
			
		||||
            width: 8*mm
 | 
			
		||||
            anchors.top: parent.top
 | 
			
		||||
            anchors.topMargin: 1*mm
 | 
			
		||||
            anchors.right: parent.right
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,24 +31,28 @@
 | 
			
		|||
 | 
			
		||||
// message.qml
 | 
			
		||||
// message with buttons
 | 
			
		||||
import QtQuick 2.0
 | 
			
		||||
import QtQuick.Controls 1.4
 | 
			
		||||
import QtQuick 2.4
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
//import QtQuick.Dialogs 1.2
 | 
			
		||||
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"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Rectangle{
 | 
			
		||||
    color:"white"
 | 
			
		||||
//    width:root.width-5*mm
 | 
			
		||||
//    height:root.height-12*mm
 | 
			
		||||
    //anchors.fill: parent
 | 
			
		||||
    color:"#EEEEEE"
 | 
			
		||||
    width:parent.width
 | 
			
		||||
    height: (newsSwipeview.stacktype!="Notifications")?messageColumn.height+mm:0
 | 
			
		||||
    id:messageSend
 | 
			
		||||
    visible:(newsSwipeview.stacktype!="Notifications")?true:false
 | 
			
		||||
    property string parentId: ""
 | 
			
		||||
    //property var parentObject:({})
 | 
			
		||||
    property bool conversation: false
 | 
			
		||||
    property string reply_to_user:""
 | 
			
		||||
    property alias bodyMessage: bodyField.text
 | 
			
		||||
    property var attachImageURLs: [];
 | 
			
		||||
    property int directmessage: 0;
 | 
			
		||||
    //property int directmessage: 0;
 | 
			
		||||
    property var contacts: []
 | 
			
		||||
    property var groups: []
 | 
			
		||||
    property var contact_allow:login.permissions[0]
 | 
			
		||||
| 
						 | 
				
			
			@ -56,14 +60,48 @@ Rectangle{
 | 
			
		|||
    property var group_allow:login.permissions[2]
 | 
			
		||||
    property var group_deny:login.permissions[3]
 | 
			
		||||
 | 
			
		||||
    function attachImage(url){ print("attachImage "+url)
 | 
			
		||||
    onReply_to_userChanged: {
 | 
			
		||||
        if (reply_to_user!=""){
 | 
			
		||||
            receiverLabel.visible=true
 | 
			
		||||
         }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function directmessagePrepare(friend){
 | 
			
		||||
        messageSend.state="active";
 | 
			
		||||
        reply_to_user=friend.screen_name;
 | 
			
		||||
        receiverLabel.text=qsTr("to:")+ " "+ friend.screen_name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    function sendUrls(urls){
 | 
			
		||||
        if((urls.length==1 && attachImageURLs.length==0)){
 | 
			
		||||
            attachImage(urls);
 | 
			
		||||
            attachImageURLs.push(urls);
 | 
			
		||||
            messageSend.state="active";
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function sendtext(text){
 | 
			
		||||
        if(text){
 | 
			
		||||
            if (text.subject=="undefined"){text.subject=""}
 | 
			
		||||
            if(text.plaintext.lastIndexOf(".jpg")>-1 || text.plaintext.lastIndexOf(".jpeg")>-1 || text.plaintext.lastIndexOf(".png")>-1 || text.plaintext.lastIndexOf(".gif")>-1){
 | 
			
		||||
                text.plaintext="<a href="+text.plaintext+"><img src="+text.plaintext+"></a>"}
 | 
			
		||||
            bodyField.text=text.subject+"\n"+text.plaintext;
 | 
			
		||||
            messageSend.state="active";
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    function attachImage(url){
 | 
			
		||||
        var imageAttachmentObject=Qt.createQmlObject('import QtQuick 2.0; Image {id:imageAttachment'+attachImageURLs.length+'; source:"'+
 | 
			
		||||
        url.toString()+'"; x:2*mm; width: 45*mm; height: 45*mm;fillMode: Image.PreserveAspectFit;MouseArea{anchors.fill:parent;onClicked:{attachImageURLs.splice(attachImageURLs.indexOf("'+
 | 
			
		||||
        url+'"),1); imageAttachment'+attachImageURLs.length+'.destroy()}}}',messageColumn,"attachedImage");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function statusUpdate(title,status,in_reply_to_status_id,attachImageURL) {
 | 
			
		||||
        //xhr.url= login.server + "/api/statuses/update.json";
 | 
			
		||||
        newsBusy.running=true;
 | 
			
		||||
        xhr.setLogin(login.username+":"+Qt.atob(login.password));
 | 
			
		||||
        xhr.setUrl(login.server);
 | 
			
		||||
        xhr.setApi("/api/statuses/update");
 | 
			
		||||
| 
						 | 
				
			
			@ -81,6 +119,7 @@ Rectangle{
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
    function dmUpdate(title,text,replyto,screen_name,attachImageURL) {
 | 
			
		||||
        newsBusy.running=true;
 | 
			
		||||
        //xhr.url= login.server + "/api/direct_messages/new.json";
 | 
			
		||||
        xhr.setLogin(login.username+":"+Qt.atob(login.password));
 | 
			
		||||
        xhr.setUrl(login.server);
 | 
			
		||||
| 
						 | 
				
			
			@ -93,103 +132,193 @@ Rectangle{
 | 
			
		|||
        xhr.post();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    Flickable{
 | 
			
		||||
        anchors.fill: parent
 | 
			
		||||
        contentHeight: messageColumn.height
 | 
			
		||||
        boundsBehavior: Flickable.StopAtBounds
 | 
			
		||||
        id:messageSend
 | 
			
		||||
    function setParent(newsitemobject){
 | 
			
		||||
        //print("Newsobject "+newsitemobject.id+ "  "+JSON.stringify(newsitemobject.user));
 | 
			
		||||
        if (newsitemobject!=""){
 | 
			
		||||
            messageSend.state="conversation"
 | 
			
		||||
            reply_to_user=newsitemobject.user.screen_name;
 | 
			
		||||
            receiverLabel.text=qsTr("to:")+ " "+ newsitemobject.user.screen_name;
 | 
			
		||||
            parentId=newsitemobject.id
 | 
			
		||||
        } else {
 | 
			
		||||
            messageSend.state=""
 | 
			
		||||
            reply_to_user="";
 | 
			
		||||
            receiverLabel.text=qsTr("to:");
 | 
			
		||||
            parentId="";
 | 
			
		||||
            bodyField.text="";
 | 
			
		||||
            attachImageURLs.pop();
 | 
			
		||||
            try{imageAttachment.destroy()}catch(e){}
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function contactmenu(letter){
 | 
			
		||||
        Newsjs.listFriends(login,db,function(contacts){
 | 
			
		||||
            var contactitems="";
 | 
			
		||||
            for (var i=0;i<contacts.length;i++){
 | 
			
		||||
                if(Helperjs.getCount(db,login,"contacts","screen_name",contacts[i].screen_name)>1){
 | 
			
		||||
                    contacts[i].screen_name=contacts[i].screen_name+"+"+contacts[i].cid
 | 
			
		||||
                }
 | 
			
		||||
                contactitems=contactitems+"MenuItem{text:'"+contacts[i].screen_name+
 | 
			
		||||
                    "'; onTriggered:{if (newsSwipeview.stacktype=='DirectMessages'){reply_to_user='"+
 | 
			
		||||
                    contacts[i].screen_name+"'} else {bodyField.insert("+
 | 
			
		||||
                    bodyField.cursorPosition+",' "+contacts[i].screen_name.substring(1)+" ');bodyField.cursorPosition=bodyField.cursorPosition+"+contacts[i].screen_name.length+"}}}"
 | 
			
		||||
            //}
 | 
			
		||||
            }
 | 
			
		||||
            var menuString="import QtQuick.Controls 2.4; Menu {width:40*mm; font.pixelSize: 3*mm; "+contactitems+"}";
 | 
			
		||||
            var contactlistObject=Qt.createQmlObject(menuString,messageColumn,"contactmenuOutput");
 | 
			
		||||
            if (contacts.length>0){contactlistObject.popup()}
 | 
			
		||||
            },letter);
 | 
			
		||||
    }
 | 
			
		||||
//    Flickable{
 | 
			
		||||
//        anchors.fill: parent
 | 
			
		||||
//        contentHeight: messageColumn.height
 | 
			
		||||
//        boundsBehavior: Flickable.StopAtBounds
 | 
			
		||||
 | 
			
		||||
        Column {
 | 
			
		||||
            y:0.5*mm
 | 
			
		||||
            id:messageColumn
 | 
			
		||||
            spacing: 0.5*mm
 | 
			
		||||
            width: parent.width
 | 
			
		||||
            height: 10*mm//implicitHeight
 | 
			
		||||
            Label{
 | 
			
		||||
                id:receiverLabel
 | 
			
		||||
                x: 0.5*mm
 | 
			
		||||
                width: parent.width-mm
 | 
			
		||||
                font.pixelSize: 3*mm
 | 
			
		||||
                text: newsSwipeview.stacktype=="DirectMessages"?qsTr("to:")+ " "+ reply_to_user:""
 | 
			
		||||
                visible:false// ((parentId !== "") || (newsStack.parent.stacktype=="DirectMessages"))
 | 
			
		||||
                MouseArea{
 | 
			
		||||
                    anchors.fill: parent
 | 
			
		||||
                    onClicked:{}
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            TextField {
 | 
			
		||||
                 id: titleField
 | 
			
		||||
                 width: parent.width
 | 
			
		||||
                 x: 0.5*mm
 | 
			
		||||
                 width: parent.width-mm
 | 
			
		||||
                 font.pixelSize: 3*mm
 | 
			
		||||
                 placeholderText: qsTr("Title (optional)")
 | 
			
		||||
                 visible: parentId === ""
 | 
			
		||||
                 visible: false//(parentId === "") && (bodyField.length>1)
 | 
			
		||||
                 onVisibleChanged: if ((visible==true)&&(conversation==true)){
 | 
			
		||||
                    conversationView.contentY=conversationView.contentY+titleField.height
 | 
			
		||||
                 }
 | 
			
		||||
              }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
           Rectangle{
 | 
			
		||||
               color: "white"
 | 
			
		||||
               radius: 0.5*mm
 | 
			
		||||
               x:mm
 | 
			
		||||
               width: parent.width-2*mm
 | 
			
		||||
               height:Math.max(bodyField.contentHeight+2*mm,10*mm)
 | 
			
		||||
               height:Math.max(bodyField.contentHeight+4*mm,10*mm)
 | 
			
		||||
               TextArea {
 | 
			
		||||
                    id: bodyField
 | 
			
		||||
                    anchors.fill: parent
 | 
			
		||||
                    font.pixelSize: 3*mm
 | 
			
		||||
                    font.family: "Noto Sans"
 | 
			
		||||
                    wrapMode: Text.Wrap
 | 
			
		||||
                    selectByMouse: true
 | 
			
		||||
                    placeholderText: conversation?"": qsTr("What's on your mind?")
 | 
			
		||||
                    textFormat: TextEdit.RichText //TextEdit.PlainText
 | 
			
		||||
                    onLineCountChanged: (conversation==true)?conversationView.contentY=conversationView.contentY+3*mm:newsView.contentY=newsView.contentY+3*mm
 | 
			
		||||
                    onLinkActivated:{Qt.openUrlExternally(link)}
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            Row{
 | 
			
		||||
                spacing: 2
 | 
			
		||||
                width: parent.width
 | 
			
		||||
                CheckBox{
 | 
			
		||||
                  id:dmCheckbox
 | 
			
		||||
                  text:"DM"
 | 
			
		||||
                  enabled: false
 | 
			
		||||
                  checked: (directmessage==1)?true:false
 | 
			
		||||
                  onClicked:{
 | 
			
		||||
                        if(dmCheckbox.checkedState==Qt.Checked){directmessage=1}
 | 
			
		||||
                        else if(dmCheckbox.checkedState==Qt.Unchecked){directmessage=0}
 | 
			
		||||
                         }
 | 
			
		||||
                  }
 | 
			
		||||
 | 
			
		||||
              BlueButton{
 | 
			
		||||
                  text:"\uf0c1"
 | 
			
		||||
                  onClicked: {
 | 
			
		||||
                      if(bodyField.selectedText==""){Helperjs.showMessage("Error","No text selected",messageSend)}
 | 
			
		||||
                      else{urlTextEdit.text="";
 | 
			
		||||
                      urlRectangle.visible=true}}
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
            Rectangle{
 | 
			
		||||
                id:urlRectangle
 | 
			
		||||
                height: 7*mm //parent.height
 | 
			
		||||
                width:parent.width-2*mm
 | 
			
		||||
                visible:false
 | 
			
		||||
                    TextField{
 | 
			
		||||
                    id:urlTextEdit
 | 
			
		||||
                    width:parent.width-7*mm
 | 
			
		||||
                    height:parent.height
 | 
			
		||||
                    }
 | 
			
		||||
                    BlueButton{
 | 
			
		||||
                        anchors.left:urlTextEdit.right
 | 
			
		||||
                        anchors.leftMargin:mm
 | 
			
		||||
                        text:"\u2713"
 | 
			
		||||
                        onClicked: {if(urlTextEdit.text!=""){
 | 
			
		||||
                           var start = bodyField.selectionStart;
 | 
			
		||||
                            var text=bodyField.selectedText
 | 
			
		||||
                            if(text.lastIndexOf(".jpg")>-1 || text.lastIndexOf(".jpeg")>-1 || text.lastIndexOf(".png")>-1){text="<img src="+text+">"}
 | 
			
		||||
                            text = "[url="+urlTextEdit.text+"]" + text + "[/url]";
 | 
			
		||||
                            bodyField.remove(start,bodyField.selectionEnd);
 | 
			
		||||
                            bodyField.insert(start,text);}
 | 
			
		||||
                            urlRectangle.visible=false}
 | 
			
		||||
                    onActiveFocusChanged:{
 | 
			
		||||
                        if (activeFocus==true){
 | 
			
		||||
                            if (conversation==true){
 | 
			
		||||
                                setParent(conversationModel.get(0).newsitemobject);
 | 
			
		||||
                                messageSend.state="conversation"
 | 
			
		||||
                            } else{
 | 
			
		||||
                                messageSend.state="active"
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
          Row{
 | 
			
		||||
              spacing:2
 | 
			
		||||
              BlueButton{id:permButton
 | 
			
		||||
                  visible: (directmessage==1)?false:true
 | 
			
		||||
                  text: ((contact_allow.length==0)&&(contact_deny.length==0)&&(group_allow.length==0)&&(group_deny.length==0))?"\uf09c":"\uf023"
 | 
			
		||||
                  onClicked: { permissionDialog.visible=true;}
 | 
			
		||||
                    onTextChanged:{
 | 
			
		||||
                        if (text!=""){
 | 
			
		||||
                        //print(getText(bodyField.cursorPosition-2,bodyField.cursorPosition) +" preedit: "+ preeditText+cursorPosition);
 | 
			
		||||
                        var regex1 = /@[a-z]/;var regex2 = /![a-z]/;
 | 
			
		||||
                        //print(text.substring(cursorPosition-2,cursorPosition));
 | 
			
		||||
                        //if (regex.test(getText(bodyField.cursorPosition-2,bodyField.cursorPosition)) || regex.test(preeditText) || regex.test(text)){
 | 
			
		||||
                        if (regex1.test(getText(bodyField.cursorPosition-2,bodyField.cursorPosition)+preeditText) || regex2.test(getText(bodyField.cursorPosition-2,bodyField.cursorPosition)+preeditText)){
 | 
			
		||||
                            var letter=(getText(bodyField.cursorPosition-2,bodyField.cursorPosition)).match(/[a-z]/);
 | 
			
		||||
                            contactmenu(letter)
 | 
			
		||||
                        }
 | 
			
		||||
                    }}
 | 
			
		||||
              }
 | 
			
		||||
              BlueButton {
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//            Row{
 | 
			
		||||
//                spacing: 2
 | 
			
		||||
//                width: parent.width
 | 
			
		||||
//                CheckBox{
 | 
			
		||||
//                  id:dmCheckbox
 | 
			
		||||
//                  text:"DM"
 | 
			
		||||
//                  enabled: false
 | 
			
		||||
//                  checked: (directmessage==1)?true:false
 | 
			
		||||
//                  onClicked:{
 | 
			
		||||
//                        if(dmCheckbox.checkedState==Qt.Checked){directmessage=1}
 | 
			
		||||
//                        else if(dmCheckbox.checkedState==Qt.Unchecked){directmessage=0}
 | 
			
		||||
//                         }
 | 
			
		||||
//                  }
 | 
			
		||||
 | 
			
		||||
//             Button{
 | 
			
		||||
//                  text:"\uf0c1"
 | 
			
		||||
//                  height:8*mm
 | 
			
		||||
//                  onClicked: {
 | 
			
		||||
//                      if(bodyField.selectedText==""){Helperjs.showMessage("Error","No text selected",messageSend)}
 | 
			
		||||
//                      else{urlTextEdit.text="";
 | 
			
		||||
//                      urlRectangle.visible=true}}
 | 
			
		||||
//              }
 | 
			
		||||
//            }
 | 
			
		||||
//            Rectangle{
 | 
			
		||||
//                id:urlRectangle
 | 
			
		||||
//                height: 7*mm //parent.height
 | 
			
		||||
//                width:parent.width-2*mm
 | 
			
		||||
//                visible:false
 | 
			
		||||
//                    TextField{
 | 
			
		||||
//                    id:urlTextEdit
 | 
			
		||||
//                    width:parent.width-7*mm
 | 
			
		||||
//                    height:parent.height
 | 
			
		||||
//                    }
 | 
			
		||||
//                    Button{
 | 
			
		||||
//                        anchors.left:urlTextEdit.right
 | 
			
		||||
//                        anchors.leftMargin:mm
 | 
			
		||||
//                        height:8*mm
 | 
			
		||||
//                        text:"\u2713"
 | 
			
		||||
//                        onClicked: {if(urlTextEdit.text!=""){
 | 
			
		||||
//                           var start = bodyField.selectionStart;
 | 
			
		||||
//                            var text=bodyField.selectedText
 | 
			
		||||
//                            if(text.lastIndexOf(".jpg")>-1 || text.lastIndexOf(".jpeg")>-1 || text.lastIndexOf(".png")>-1){text="<img src="+text+">"}
 | 
			
		||||
//                            text = "[url="+urlTextEdit.text+"]" + text + "[/url]";
 | 
			
		||||
//                            bodyField.remove(start,bodyField.selectionEnd);
 | 
			
		||||
//                            bodyField.insert(start,text);}
 | 
			
		||||
//                            urlRectangle.visible=false}
 | 
			
		||||
//                        }
 | 
			
		||||
//                    }
 | 
			
		||||
          Row{
 | 
			
		||||
              id:buttonRow
 | 
			
		||||
              visible:false //(bodyField.length>1)||(attachImageURLs.length>0)
 | 
			
		||||
              spacing: mm
 | 
			
		||||
              height: 12*mm
 | 
			
		||||
              MButton{id:permButton
 | 
			
		||||
                  visible: (newsSwipeview.stacktype!=="DirectMessages")
 | 
			
		||||
                  height: 6*mm
 | 
			
		||||
                  width: 7*mm
 | 
			
		||||
                  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: attachButton
 | 
			
		||||
                  height: 6*mm
 | 
			
		||||
                  width: 7*mm
 | 
			
		||||
                  text: "\uf03e"
 | 
			
		||||
                  visible:(directmessage==0)
 | 
			
		||||
                  visible:(newsSwipeview.stacktype!="DirectMessages")
 | 
			
		||||
                  onClicked: {
 | 
			
		||||
                      if (attachImageURLs.length>0){//Server currently accepts only one attachment
 | 
			
		||||
                          Helperjs.showMessage( qsTr("Error"),qsTr("Only one attachment supported at the moment.\n Remove other attachment first!"), messageColumn)
 | 
			
		||||
                      }
 | 
			
		||||
                      else{
 | 
			
		||||
                         // root.imagePicking=true;
 | 
			
		||||
                          root.imagePicking=false;
 | 
			
		||||
                          var imagePicker = Qt.createQmlObject('import QtQuick 2.0; import "qrc:/qml/genericqml";'+
 | 
			
		||||
                          osSettings.imagePickQml+'{multiple : false;onReady: {attachImageURLs.push(imageUrl);'+
 | 
			
		||||
                          'attachImage(imageUrl)}}',root,"imagePicker");
 | 
			
		||||
| 
						 | 
				
			
			@ -197,55 +326,102 @@ Rectangle{
 | 
			
		|||
                      }
 | 
			
		||||
                  }
 | 
			
		||||
               }
 | 
			
		||||
               BlueButton{
 | 
			
		||||
                    id:contactButton
 | 
			
		||||
                    text:"\uf234"
 | 
			
		||||
                    visible:(directmessage==0)
 | 
			
		||||
                    onClicked:{
 | 
			
		||||
                        var contactitems="";
 | 
			
		||||
                        for (var i=0;i<contacts.length;i++){
 | 
			
		||||
                          if(contacts[i].network=="dfrn"){
 | 
			
		||||
                              if(Helperjs.getCount(db,login,"contacts","screen_name",contacts[i].screen_name)>1){
 | 
			
		||||
                                  contacts[i].screen_name=contacts[i].screen_name+"+"+contacts[i].cid
 | 
			
		||||
                              }
 | 
			
		||||
                              contactitems=contactitems+"MenuItem{text:'"+contacts[i].screen_name+"'; onTriggered: bodyField.insert("+bodyField.cursorPosition+",' @"+contacts[i].screen_name+" ')}"
 | 
			
		||||
                        }}
 | 
			
		||||
                        var menuString="import QtQuick.Controls 1.4; Menu {"+contactitems+"}";
 | 
			
		||||
                        var contactlistObject=Qt.createQmlObject(menuString,messageColumn,"contactmenuOutput")
 | 
			
		||||
                        contactlistObject.popup()  }
 | 
			
		||||
                   }
 | 
			
		||||
 | 
			
		||||
               BlueButton{
 | 
			
		||||
               MButton{
 | 
			
		||||
                   id:smileyButton
 | 
			
		||||
                   text: "\uf118"
 | 
			
		||||
                   onClicked: {smileyDialog.visible=true}
 | 
			
		||||
                   height: 6*mm
 | 
			
		||||
                   width: 7*mm
 | 
			
		||||
                   onClicked: {if (smileyDialog.visible==false){smileyDialog.visible=true} else{smileyDialog.visible=false}}
 | 
			
		||||
               }
 | 
			
		||||
 | 
			
		||||
               BlueButton {
 | 
			
		||||
               MButton {
 | 
			
		||||
                   id: cancelButton
 | 
			
		||||
                   height: 6*mm
 | 
			
		||||
                   width: 7*mm
 | 
			
		||||
                   text: "\uf057"
 | 
			
		||||
                   onClicked: {
 | 
			
		||||
                       newstab.newstabstatus=login.newsViewType;
 | 
			
		||||
                       newsStack.pop(null)
 | 
			
		||||
                       bodyField.text="";
 | 
			
		||||
                       messageSend.state="";
 | 
			
		||||
                       permissionDialog.visible=false;
 | 
			
		||||
                       receiverLabel.visible=false;
 | 
			
		||||
                       reply_to_user="";
 | 
			
		||||
                       attachImage("");
 | 
			
		||||
                       attachImageURLs.pop();
 | 
			
		||||
                   }
 | 
			
		||||
                   }
 | 
			
		||||
               BlueButton {
 | 
			
		||||
               }
 | 
			
		||||
               MButton {
 | 
			
		||||
                   id: sendButton
 | 
			
		||||
                   height: 6*mm
 | 
			
		||||
                   width: 7*mm
 | 
			
		||||
                   text: "\uf1d9"
 | 
			
		||||
                   onClicked: {
 | 
			
		||||
                       var title=titleField.text.replace("\"","\'");
 | 
			
		||||
                       var body=bodyField.getFormattedText(0,bodyField.length);
 | 
			
		||||
                       var dmbody=bodyField.getText(0,bodyField.length);
 | 
			
		||||
                       if (directmessage==0){
 | 
			
		||||
                       if (newsSwipeview.stacktype!=="DirectMessages"){
 | 
			
		||||
                           statusUpdate(title,body,parentId,attachImageURLs)}
 | 
			
		||||
                       else {dmUpdate(title,dmbody,parentId,reply_to_user) }
 | 
			
		||||
                       newstab.newstabstatus=login.newsViewType; newsStack.pop(null)
 | 
			
		||||
                       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=login.newsViewType; newsStack.pop(null)
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
               }
 | 
			
		||||
          }
 | 
			
		||||
          PermissionDialog{id:permissionDialog;x:mm;visible: false}
 | 
			
		||||
          SmileyDialog{id:smileyDialog;x:mm;visible: false}
 | 
			
		||||
    }
 | 
			
		||||
        Component.onCompleted: if(attachImageURLs.length>0){attachImage(attachImageURLs[0])}
 | 
			
		||||
}
 | 
			
		||||
        Component.onCompleted:{
 | 
			
		||||
            //
 | 
			
		||||
            //parentId=conversationModel.get(conversationModel.count-1).newsitemobject.id
 | 
			
		||||
            //if(attachImageURLs.length>0){attachImage(attachImageURLs[0])}
 | 
			
		||||
            newsStack.replySignal.connect(setParent);
 | 
			
		||||
            root.directmessageSignal.connect(directmessagePrepare);
 | 
			
		||||
            root.uploadSignal.connect(sendUrls);
 | 
			
		||||
            root.sendtextSignal.connect(sendtext);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        states: [ State {
 | 
			
		||||
            name: "active"
 | 
			
		||||
            PropertyChanges {
 | 
			
		||||
                target: messageColumn; height: implicitHeight
 | 
			
		||||
            }
 | 
			
		||||
            PropertyChanges {
 | 
			
		||||
                target: buttonRow; visible:true
 | 
			
		||||
            }
 | 
			
		||||
            PropertyChanges {
 | 
			
		||||
                target: titleField; visible:(newsSwipeview.stacktype!="DirectMessages")//true
 | 
			
		||||
            }
 | 
			
		||||
            PropertyChanges {
 | 
			
		||||
                target: receiverLabel; visible:(newsSwipeview.stacktype=="DirectMessages");
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        State {
 | 
			
		||||
            name: "conversation"
 | 
			
		||||
            PropertyChanges {
 | 
			
		||||
                target: messageColumn; height: implicitHeight
 | 
			
		||||
            }
 | 
			
		||||
            PropertyChanges {
 | 
			
		||||
                target: buttonRow; visible:true
 | 
			
		||||
            }
 | 
			
		||||
            PropertyChanges {
 | 
			
		||||
                target: titleField; visible:(newsSwipeview.stacktype!="DirectMessages")
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
//            PropertyChanges {
 | 
			
		||||
//                target: receiverLabel; visible:true; text:qsTr("to")+": "+ conversationModel.get(0).newsitemobject.user.name
 | 
			
		||||
//            }
 | 
			
		||||
 | 
			
		||||
//            PropertyChanges {
 | 
			
		||||
//                target: messageSend; reply_to_user: conversationModel.get(0).newsitemobject.user.screen_name
 | 
			
		||||
//            }
 | 
			
		||||
 | 
			
		||||
//            PropertyChanges {
 | 
			
		||||
//                target: messageSend; parentId: conversationModel.get(0).newsitemobject.status_id
 | 
			
		||||
//            }
 | 
			
		||||
        } ]
 | 
			
		||||
}
 | 
			
		||||
//}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										579
									
								
								source-android/qml/newsqml/NewsStack.qml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										579
									
								
								source-android/qml/newsqml/NewsStack.qml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,579 @@
 | 
			
		|||
//  This file is part of Friendiqa
 | 
			
		||||
//  https://git.friendi.ca/lubuwest/Friendiqa
 | 
			
		||||
//  Copyright (C) 2017 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/>.
 | 
			
		||||
 | 
			
		||||
import QtQuick 2.11
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
import "qrc:/js/news.js" as Newsjs
 | 
			
		||||
import "qrc:/js/helper.js" as Helperjs
 | 
			
		||||
import "qrc:/js/service.js" as Service
 | 
			
		||||
 | 
			
		||||
StackView{
 | 
			
		||||
    id: newsStack
 | 
			
		||||
    anchors.fill: parent
 | 
			
		||||
    property string updateMethodNews: "refresh"
 | 
			
		||||
    property var allchats: ({})
 | 
			
		||||
    signal replySignal(var newsobject)
 | 
			
		||||
    property int lastnewsid:0
 | 
			
		||||
 | 
			
		||||
   function newstypeHandling(newstype){
 | 
			
		||||
       newsBusy.running=true;
 | 
			
		||||
       replySignal("");
 | 
			
		||||
       //messagesend.state="";
 | 
			
		||||
       newsModel.clear();
 | 
			
		||||
       switch(newstype){
 | 
			
		||||
       case "timeline":
 | 
			
		||||
           newstab.newstabstatus="Timeline";
 | 
			
		||||
           try{ Newsjs.newsfromdb(root.db,root.login,0, function(dbnews,lastid){
 | 
			
		||||
               lastnewsid=lastid;
 | 
			
		||||
               showNews(dbnews)
 | 
			
		||||
           })}catch(e){Helperjs.showMessage("Error",e,root)};
 | 
			
		||||
           break;
 | 
			
		||||
       case "conversation":
 | 
			
		||||
           newstab.newstabstatus="Conversations";
 | 
			
		||||
           Newsjs.chatsfromdb(root.db,root.login,0,function(news,lastid){
 | 
			
		||||
               lastnewsid=lastid;
 | 
			
		||||
               showNews(news)});
 | 
			
		||||
           break;
 | 
			
		||||
       case "favorites":
 | 
			
		||||
           newsStack.updateMethodNews="refresh";
 | 
			
		||||
           newstab.newstabstatus="Favorites";
 | 
			
		||||
           Service.updateView("Favorites");
 | 
			
		||||
           break;
 | 
			
		||||
       case "replies":
 | 
			
		||||
           newsStack.updateMethodNews="refresh";
 | 
			
		||||
           newstab.newstabstatus="Replies";
 | 
			
		||||
           Service.updateView("Replies");
 | 
			
		||||
           break;
 | 
			
		||||
       case "publictimeline":
 | 
			
		||||
           newsStack.updateMethodNews="refresh";
 | 
			
		||||
           newstab.newstabstatus="Public Timeline";
 | 
			
		||||
           Service.updateView("Public Timeline");
 | 
			
		||||
           break;
 | 
			
		||||
       case "groupnews":
 | 
			
		||||
           newsStack.updateMethodNews="refresh";
 | 
			
		||||
           Service.showGroups();
 | 
			
		||||
           break;
 | 
			
		||||
       case "search":
 | 
			
		||||
           newsView.anchors.topMargin=7*mm;
 | 
			
		||||
           newsBusy.running=false;
 | 
			
		||||
           var component = Qt.createComponent("qrc:/qml/genericqml/Search.qml");
 | 
			
		||||
           var searchItem = component.createObject(newsStack,{y:mm,width:root.width,height: 5*mm});
 | 
			
		||||
           break;
 | 
			
		||||
       case "refresh":
 | 
			
		||||
           if (newstab.newstabstatus=="Timeline"){
 | 
			
		||||
               newsStack.updateMethodNews="append"
 | 
			
		||||
           } else {newsStack.updateMethodNews="refresh"}
 | 
			
		||||
           //root.contactLoadType="news";
 | 
			
		||||
           if (newsSwipeview.stacktype=="Home"){
 | 
			
		||||
               Service.updateView(newstab.newstabstatus)
 | 
			
		||||
           }
 | 
			
		||||
           else if (newsSwipeview.stacktype=="DirectMessage"){
 | 
			
		||||
               Service.updateView("Direct Messages")
 | 
			
		||||
           }
 | 
			
		||||
           else if (newsSwipeview.stacktype=="Notifications"){
 | 
			
		||||
               Service.updateView("Notifications")
 | 
			
		||||
           }
 | 
			
		||||
           break;
 | 
			
		||||
       default:
 | 
			
		||||
           if (newstab.newstabstatus=="Timeline"){
 | 
			
		||||
               newsStack.updateMethodNews="append"
 | 
			
		||||
           } else {newsStack.updateMethodNews="refresh"}
 | 
			
		||||
           //root.contactLoadType="news";
 | 
			
		||||
           if (newsSwipeview.stacktype=="Home"){
 | 
			
		||||
               Service.updateView(newstab.newstabstatus)
 | 
			
		||||
           }
 | 
			
		||||
           else if (newsSwipeview.stacktype=="Directmessage"){
 | 
			
		||||
               Service.updateView("Direct Messages")
 | 
			
		||||
           }
 | 
			
		||||
           else if (newsSwipeview.stacktype=="Notifications"){
 | 
			
		||||
               Service.updateView("Notifications")
 | 
			
		||||
           }
 | 
			
		||||
       }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   function showNews(newsToShow){
 | 
			
		||||
      try{
 | 
			
		||||
          if (newsStack.depth>1){newsStack.pop()}
 | 
			
		||||
      }catch(e){}
 | 
			
		||||
      newsBusy.running=false;
 | 
			
		||||
      var currentTime= new Date();
 | 
			
		||||
     // downloadNotice.text=downloadNotice.text + "\n shownews start "+ Date.now();
 | 
			
		||||
      //print("appendnews "+JSON.stringify(newsToShow))
 | 
			
		||||
      var msg = {'currentTime': currentTime, 'model': newsModel,'news':newsToShow,'method':newsStack.updateMethodNews, 'options':globaloptions};
 | 
			
		||||
      newsWorker.sendMessage(msg);
 | 
			
		||||
      //newsStack.appendNews=false
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   function showContact(contact){ //print(JSON.stringify(contact));
 | 
			
		||||
       //newstab.newstabstatus="Contact";
 | 
			
		||||
       newsStack.push("qrc:/qml/newsqml/ContactPage.qml",{"contact": contact});
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   function search(term){//print("Search "+term)
 | 
			
		||||
       if (term!=""){
 | 
			
		||||
       newstab.newstabstatus="Search";
 | 
			
		||||
       newsBusy.running=true;
 | 
			
		||||
       newsStack.updateMethodNews="refresh";
 | 
			
		||||
       xhr.setLogin(login.username+":"+Qt.atob(login.password));
 | 
			
		||||
       xhr.setUrl(login.server);
 | 
			
		||||
       xhr.setApi("/api/search");
 | 
			
		||||
       xhr.clearParams();
 | 
			
		||||
       xhr.setParam("q",term)
 | 
			
		||||
       xhr.get();}
 | 
			
		||||
       newsView.anchors.topMargin=mm
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   Connections{
 | 
			
		||||
       target:xhr
 | 
			
		||||
       onError:{
 | 
			
		||||
           Helperjs.showMessage(qsTr("Network Error"),"API:\n" +login.server+api+"\n Return: \n"+data,root);
 | 
			
		||||
       }
 | 
			
		||||
       onSuccess:{
 | 
			
		||||
          // downloadNotice.text=downloadNotice.text+ "\n xhr finished "+Date.now();
 | 
			
		||||
           Service.processNews(api,data);
 | 
			
		||||
       }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   Timer {id:replytimer; interval: 1000; running: false; repeat: false
 | 
			
		||||
       onTriggered: {
 | 
			
		||||
           newsBusy.running=true;
 | 
			
		||||
           if(newstab.newstabstatus=="Conversation"){
 | 
			
		||||
               showConversation(newsStack.timelineIndex-1,newsModel.get(0).newsitemobject)}
 | 
			
		||||
           else{
 | 
			
		||||
               if (newstab.newstabstatus=="Timeline"){
 | 
			
		||||
                   newsStack.updateMethodNews="append"
 | 
			
		||||
               } else {newsStack.updateMethodNews="refresh"}
 | 
			
		||||
               if (newsSwipeview.stacktype=="Home"){
 | 
			
		||||
                   Service.updateView(newstab.newstabstatus)
 | 
			
		||||
               }
 | 
			
		||||
               else if (newsSwipeview.stacktype=="DirectMessages"){
 | 
			
		||||
                   Service.updateView("Direct Messages")
 | 
			
		||||
               }
 | 
			
		||||
               else if (newsSwipeview.stacktype=="Replies"){
 | 
			
		||||
                   Service.updateView("Replies")
 | 
			
		||||
               }
 | 
			
		||||
               replySignal("")
 | 
			
		||||
                 //Service.updateView(newstab.newstabstatus)
 | 
			
		||||
           }
 | 
			
		||||
       }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   initialItem: Rectangle {
 | 
			
		||||
        id:newslistRectangle
 | 
			
		||||
        y:1
 | 
			
		||||
        color: "white"
 | 
			
		||||
 | 
			
		||||
//        Button{
 | 
			
		||||
//            id:newstabstatusButton
 | 
			
		||||
//            anchors.top: parent.top
 | 
			
		||||
//            anchors.topMargin: 0.5*mm
 | 
			
		||||
//            height: 8*mm
 | 
			
		||||
//            text: qsTr(newstab.newstabstatus)
 | 
			
		||||
//            visible: newsStack.parent.stacktype=="standard"
 | 
			
		||||
//            onClicked: {print(newsStack.parent.stacktype);
 | 
			
		||||
//                newstabmenu.popup(2*mm,6*mm)
 | 
			
		||||
//            }
 | 
			
		||||
 | 
			
		||||
//            Menu{id:newstabmenu
 | 
			
		||||
//                width: 40*mm
 | 
			
		||||
 | 
			
		||||
//                delegate:MenuItem{
 | 
			
		||||
//                    contentItem: Text{
 | 
			
		||||
//                        font.pixelSize: 3.5*mm
 | 
			
		||||
//                        text:parent.text
 | 
			
		||||
//                    }
 | 
			
		||||
//                    background: Rectangle {
 | 
			
		||||
//                        implicitWidth: 40*mm; implicitHeight: 5*mm
 | 
			
		||||
//                        color: "#ffffff"
 | 
			
		||||
//                        border.color: "grey"
 | 
			
		||||
//                    }
 | 
			
		||||
//                }
 | 
			
		||||
//                Action {
 | 
			
		||||
//                    text: qsTr("Timeline")
 | 
			
		||||
//                    onTriggered: {
 | 
			
		||||
                   
 | 
			
		||||
//                }
 | 
			
		||||
//                Action {
 | 
			
		||||
//                    text: qsTr("Conversations")
 | 
			
		||||
//                    onTriggered:{
 | 
			
		||||
//                        //newsModel.clear();
 | 
			
		||||
//                        newstab.newstabstatus="Conversations";
 | 
			
		||||
//                        Newsjs.chatsfromdb(db,root.login,function(news){showNews(news)})
 | 
			
		||||
//                    }
 | 
			
		||||
//                }
 | 
			
		||||
//                Action {
 | 
			
		||||
//                    text: qsTr("Favorites")
 | 
			
		||||
//                    onTriggered:{
 | 
			
		||||
//                        newsStack.updateMethodNews="refresh";
 | 
			
		||||
//                        newstab.newstabstatus="Favorites";
 | 
			
		||||
//                        Service.updateView("Favorites")
 | 
			
		||||
//                    }
 | 
			
		||||
//                }
 | 
			
		||||
//                Action {
 | 
			
		||||
//                    text: qsTr("Replies")
 | 
			
		||||
//                    onTriggered:{
 | 
			
		||||
//                        newsStack.updateMethodNews="refresh";
 | 
			
		||||
//                        newstab.newstabstatus="Replies";
 | 
			
		||||
//                        Service.updateView("Replies")
 | 
			
		||||
//                    }
 | 
			
		||||
//                }
 | 
			
		||||
//                Action {
 | 
			
		||||
//                    text: qsTr("Public timeline")
 | 
			
		||||
//                    onTriggered:{
 | 
			
		||||
//                        newsStack.updateMethodNews="refresh";
 | 
			
		||||
//                        newstab.newstabstatus="Public Timeline";
 | 
			
		||||
//                        Service.updateView("Public Timeline")
 | 
			
		||||
//                    }
 | 
			
		||||
//                }
 | 
			
		||||
                
 | 
			
		||||
////                Action {
 | 
			
		||||
////                    text: qsTr("Direct Messages")
 | 
			
		||||
////                    onTriggered:{
 | 
			
		||||
////                        newsStack.updateMethodNews="refresh";
 | 
			
		||||
////                        newstab.newstabstatus="Direct Messages";
 | 
			
		||||
////                        Service.updateView("Direct Messages")
 | 
			
		||||
////                    }
 | 
			
		||||
////                }
 | 
			
		||||
////                Action {
 | 
			
		||||
////                    text: qsTr("Notifications")
 | 
			
		||||
////                    onTriggered:{
 | 
			
		||||
////                        newsStack.updateMethodNews="refresh";
 | 
			
		||||
////                        newstab.newstabstatus="Notifications";
 | 
			
		||||
////                        Service.updateView("Notifications")
 | 
			
		||||
////                    }
 | 
			
		||||
////                }
 | 
			
		||||
//                Action {
 | 
			
		||||
 | 
			
		||||
//                     text: qsTr("Group news")
 | 
			
		||||
//                     onTriggered:
 | 
			
		||||
//                     {
 | 
			
		||||
//                         newsStack.updateMethodNews="refresh";
 | 
			
		||||
//                         Service.showGroups();
 | 
			
		||||
//                     }
 | 
			
		||||
//                }
 | 
			
		||||
//                 Action {
 | 
			
		||||
 | 
			
		||||
//                     text: qsTr("Settings")
 | 
			
		||||
//                     onTriggered:
 | 
			
		||||
//                     {
 | 
			
		||||
//                         leftDrawer.open()
 | 
			
		||||
//                     }
 | 
			
		||||
//                }
 | 
			
		||||
                
 | 
			
		||||
//                Action {
 | 
			
		||||
//                    text: qsTr("Quit")
 | 
			
		||||
//                    onTriggered:{
 | 
			
		||||
//                         Service.cleanNews(root.db,function(){
 | 
			
		||||
//                             Service.cleanContacts(root.login,root.db,function(){
 | 
			
		||||
//                                 Qt.quit()})
 | 
			
		||||
//                             })
 | 
			
		||||
//                    }
 | 
			
		||||
//                }
 | 
			
		||||
//            }
 | 
			
		||||
//        }
 | 
			
		||||
 | 
			
		||||
//        Row{
 | 
			
		||||
//           spacing: mm
 | 
			
		||||
//           anchors.top: parent.top
 | 
			
		||||
//           anchors.topMargin: 0.5*mm
 | 
			
		||||
//           anchors.right: parent.right
 | 
			
		||||
 | 
			
		||||
//           Button {
 | 
			
		||||
//             id: searchButton
 | 
			
		||||
//             height: 8*mm
 | 
			
		||||
//             text: "\uf002"
 | 
			
		||||
//             visible: newsStack.parent.stacktype=="standard"
 | 
			
		||||
//             onClicked: {
 | 
			
		||||
//                  newsView.anchors.topMargin=18*mm;
 | 
			
		||||
//                  var component = Qt.createComponent("qrc:/qml/genericqml/Search.qml");
 | 
			
		||||
//                  var searchItem = component.createObject(newsStack,{y:8*mm,width:root.width,height: 8*mm});
 | 
			
		||||
//             }
 | 
			
		||||
//           }
 | 
			
		||||
 | 
			
		||||
//           Button {
 | 
			
		||||
//               id: newMessageButton
 | 
			
		||||
//               text: "\uf040"
 | 
			
		||||
//               height: 8*mm
 | 
			
		||||
//               onClicked: {
 | 
			
		||||
//                   var groups=[];
 | 
			
		||||
//                   Helperjs.readData(root.db,"groups",root.login.username,function(groupobject){
 | 
			
		||||
//                       groups=groupobject
 | 
			
		||||
//                   });
 | 
			
		||||
//                   newstab.newstabstatus="SendMessage";
 | 
			
		||||
//                   Helperjs.readData(root.db,"contacts",root.login.username,function(friends){
 | 
			
		||||
//                      newsStack.push("qrc:/qml/newsqml/MessageSend.qml",{"contacts": friends,"login":root.login})
 | 
			
		||||
//                   },"isFriend",1);
 | 
			
		||||
//               }
 | 
			
		||||
//           }
 | 
			
		||||
//           BlueButton {
 | 
			
		||||
//             id: quitButton
 | 
			
		||||
//             text: "\uf08b"
 | 
			
		||||
//             onClicked: {Service.cleanNews(root.db,function(){
 | 
			
		||||
//                 Service.cleanContacts(root.login,root.db,function(){
 | 
			
		||||
//                    Qt.quit() })
 | 
			
		||||
//             })}
 | 
			
		||||
//           }
 | 
			
		||||
//           Button {
 | 
			
		||||
//            id: update
 | 
			
		||||
//            height: 8*mm
 | 
			
		||||
//            text: "\uf021"
 | 
			
		||||
//            onClicked: {
 | 
			
		||||
//                if (newstab.newstabstatus=="Timeline"){
 | 
			
		||||
//                    newsStack.updateMethodNews="append"
 | 
			
		||||
//                } else {newsStack.updateMethodNews="refresh"}
 | 
			
		||||
//                //root.contactLoadType="news";
 | 
			
		||||
//                if (newsStack.parent.stacktype=="standard"){
 | 
			
		||||
//                    Service.updateView(newstab.newstabstatus)
 | 
			
		||||
//                }
 | 
			
		||||
//                else if (newsStack.parent.stacktype=="directmessage"){
 | 
			
		||||
//                    Service.updateView("Direct Messages")
 | 
			
		||||
//                }
 | 
			
		||||
//                else if (newsStack.parent.stacktype=="notifications"){
 | 
			
		||||
//                    Service.updateView("Notifications")
 | 
			
		||||
//                }
 | 
			
		||||
//            }
 | 
			
		||||
//        }
 | 
			
		||||
 | 
			
		||||
//        }
 | 
			
		||||
        Component {  id:footerComponent
 | 
			
		||||
            Rectangle{
 | 
			
		||||
                border.color: "#EEEEEE"
 | 
			
		||||
                border.width: 1
 | 
			
		||||
                 width:newsView.width
 | 
			
		||||
                 height:6*mm
 | 
			
		||||
                 Text{
 | 
			
		||||
                     font.pixelSize: 1.5*mm
 | 
			
		||||
                     anchors.centerIn: parent
 | 
			
		||||
                     text:qsTr("More")
 | 
			
		||||
                 }
 | 
			
		||||
                 MouseArea{anchors.fill:parent
 | 
			
		||||
                     onClicked:{
 | 
			
		||||
                        var currentTime= new Date();
 | 
			
		||||
                        var lastnews_id=newsModel.get(newsModel.count-1).newsitemobject.created_at;
 | 
			
		||||
                         var messagetype=0;
 | 
			
		||||
                         switch(newsSwipeview.stacktype){
 | 
			
		||||
                             case "Home":messagetype=0;break;
 | 
			
		||||
                             case "DirectMessages": messagetype=1;break;
 | 
			
		||||
                             case "Notifications":messagetype=2;break;
 | 
			
		||||
                             case "Replies":messagetype=3;break;
 | 
			
		||||
                             default:messagetype=0;
 | 
			
		||||
                         }
 | 
			
		||||
                        if(newstab.newstabstatus=="Timeline"){
 | 
			
		||||
                            Newsjs.newsfromdb(root.db,root.login, messagetype,function(news){
 | 
			
		||||
                                var msg = {'currentTime': currentTime, 'model': newsModel,'news':news,'appendnews':true, 'options':globaloptions};
 | 
			
		||||
                                newsWorker.sendMessage(msg);
 | 
			
		||||
                            },false,lastnews_id)}
 | 
			
		||||
                        if(newstab.newstabstatus=="Conversations"){
 | 
			
		||||
                            Newsjs.chatsfromdb(root.db,root.login, messagetype,function(news){
 | 
			
		||||
                                var msg = {'currentTime': currentTime, 'model': newsModel,'news':news,'appendnews':true, 'options':globaloptions};
 | 
			
		||||
                                newsWorker.sendMessage(msg);
 | 
			
		||||
                            },lastnews_id)}
 | 
			
		||||
//                        else if(newstab.newstabstatus=="Contact"){
 | 
			
		||||
//                            Newsjs.newsfromdb(root.db,root.login, function(news){
 | 
			
		||||
//                                var msg = {'currentTime': currentTime, 'model': newsModel,'news':news,'appendnews':true};
 | 
			
		||||
//                                newsWorker.sendMessage(msg);
 | 
			
		||||
//                            },newsModel.get(newsModel.count-1).newsitemobject.uid,lastnews_id)}
 | 
			
		||||
                        else if (newstab.newstabstatus=="Notifications"){}
 | 
			
		||||
                        else{
 | 
			
		||||
                            //newsStack.appendNews=true;
 | 
			
		||||
                            xhr.setParam("max_id",newsModel.get(newsModel.count-1).newsitemobject.id-1);
 | 
			
		||||
                            xhr.get()
 | 
			
		||||
                     }}
 | 
			
		||||
                 }
 | 
			
		||||
             }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//        Label{
 | 
			
		||||
//            text:qsTr(stacktype)
 | 
			
		||||
//            font.pixelSize: 3* mm
 | 
			
		||||
//            anchors.horizontalCenter: parent.horizontalCenter
 | 
			
		||||
//            anchors.margins: mm
 | 
			
		||||
//        }
 | 
			
		||||
 | 
			
		||||
        ListView {
 | 
			
		||||
          id: newsView
 | 
			
		||||
          property real oldContentY:0
 | 
			
		||||
          property bool viewdragged: false
 | 
			
		||||
          anchors.fill: parent
 | 
			
		||||
          anchors.margins: mm
 | 
			
		||||
          //anchors.topMargin: 6*mm
 | 
			
		||||
//          anchors.leftMargin: mm; anchors.rightMargin: mm
 | 
			
		||||
//          anchors.bottomMargin: mm
 | 
			
		||||
          clip: true
 | 
			
		||||
          spacing: 0
 | 
			
		||||
          header: MessageSend{id:messagesend;onHeightChanged: newsView.positionViewAtBeginning()}
 | 
			
		||||
          footer: footerComponent
 | 
			
		||||
          model: newsModel
 | 
			
		||||
          delegate: Newsitem{}
 | 
			
		||||
          onDragStarted: oldContentY=contentY
 | 
			
		||||
          onDragEnded: {
 | 
			
		||||
              if(verticalOvershoot<-5*mm){
 | 
			
		||||
                viewdragged=true
 | 
			
		||||
            }
 | 
			
		||||
              else{
 | 
			
		||||
                if((contentY-oldContentY)>15*mm){
 | 
			
		||||
                    swipeIndicator.visible=false;
 | 
			
		||||
                    newsSwipeview.height=rootStackItem.height;
 | 
			
		||||
                    newsSwipeview.y=0;
 | 
			
		||||
                    rootStackItem.state="fullscreen"
 | 
			
		||||
                }
 | 
			
		||||
                else if ((contentY-oldContentY)<-15*mm){
 | 
			
		||||
                    swipeIndicator.visible=true;
 | 
			
		||||
                    newsSwipeview.height=rootStackItem.height-12*mm;
 | 
			
		||||
                    newsSwipeview.y=5*mm;
 | 
			
		||||
                    rootStackItem.state=""
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
              }
 | 
			
		||||
          onViewdraggedChanged: {
 | 
			
		||||
              if (viewdragged){
 | 
			
		||||
                  var onlynew=true;
 | 
			
		||||
                  newsBusy.running=true;
 | 
			
		||||
                  if (newstab.newstabstatus=="Timeline"){
 | 
			
		||||
                      newsStack.updateMethodNews="append"
 | 
			
		||||
                  } else {newsStack.updateMethodNews="refresh"}
 | 
			
		||||
                //root.contactLoadType="news";
 | 
			
		||||
                    if (newsSwipeview.stacktype=="Home"){
 | 
			
		||||
                        Newsjs.getLastNews(root.login,root.db,function(currentlastnews){
 | 
			
		||||
                            if (currentlastnews>lastnewsid){
 | 
			
		||||
                                if(newstab.newstabstatus=="Timeline"){
 | 
			
		||||
                                    try{ Newsjs.newsfromdb(root.db,root.login,0, function(dbnews,lastid){
 | 
			
		||||
                                        lastnewsid=lastid;
 | 
			
		||||
                                        showNews(dbnews)
 | 
			
		||||
                                    })}catch(e){Helperjs.showMessage("Error",e,root)};
 | 
			
		||||
                                }
 | 
			
		||||
                                if(newstab.newstabstatus=="Conversations"){
 | 
			
		||||
                                    Newsjs.chatsfromdb(db,root.login,0,function(news,lastid){
 | 
			
		||||
                                        lastnewsid=lastid;
 | 
			
		||||
                                        showNews(news)});
 | 
			
		||||
                                }
 | 
			
		||||
                            }  else {
 | 
			
		||||
                                Service.updateView(newstab.newstabstatus)
 | 
			
		||||
                            }
 | 
			
		||||
                        });
 | 
			
		||||
                    }
 | 
			
		||||
                else if (newsSwipeview.stacktype=="DirectMessages"){
 | 
			
		||||
                    Service.updateView("Direct Messages")
 | 
			
		||||
                }
 | 
			
		||||
                else if (newsSwipeview.stacktype=="Notifications"){
 | 
			
		||||
                    Service.updateView("Notifications")
 | 
			
		||||
                }
 | 
			
		||||
                else if (newsSwipeview.stacktype=="Replies"){
 | 
			
		||||
                    Service.updateView("Replies")
 | 
			
		||||
                }
 | 
			
		||||
                    viewdragged=false
 | 
			
		||||
              }}
 | 
			
		||||
          }
 | 
			
		||||
          
 | 
			
		||||
       ListModel{id: newsModel}
 | 
			
		||||
 | 
			
		||||
       WorkerScript {
 | 
			
		||||
              id: newsWorker
 | 
			
		||||
              source: "qrc:/js/newsworker.js"
 | 
			
		||||
          }
 | 
			
		||||
       
 | 
			
		||||
       BusyIndicator{
 | 
			
		||||
         id: newsBusy
 | 
			
		||||
         anchors.horizontalCenter: parent.horizontalCenter
 | 
			
		||||
         anchors.top:parent.top
 | 
			
		||||
         anchors.topMargin: 2*mm
 | 
			
		||||
         width:10*mm
 | 
			
		||||
         height: 10*mm
 | 
			
		||||
       }
 | 
			
		||||
       Rectangle{
 | 
			
		||||
          id:downloadNotice
 | 
			
		||||
          property alias text: noticeText.text
 | 
			
		||||
          color:"white"
 | 
			
		||||
          border.color:"grey"
 | 
			
		||||
          z:1
 | 
			
		||||
          anchors.horizontalCenter: parent.horizontalCenter
 | 
			
		||||
          anchors.bottom:parent.bottom
 | 
			
		||||
          anchors.bottomMargin: 2*mm
 | 
			
		||||
          width: noticeText.width+2*mm
 | 
			
		||||
          height: noticeText.height+2*mm
 | 
			
		||||
          visible: (downloadNotice.text!="")
 | 
			
		||||
          
 | 
			
		||||
          Text{
 | 
			
		||||
              id:noticeText
 | 
			
		||||
              color: "grey"
 | 
			
		||||
              anchors.centerIn: parent
 | 
			
		||||
              width: contentWidth
 | 
			
		||||
              height: contentHeight
 | 
			
		||||
              font.pixelSize: 2*mm
 | 
			
		||||
              text:""
 | 
			
		||||
          }
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
        Component.onCompleted: {
 | 
			
		||||
            //print(newsSwipeview.stacktype);
 | 
			
		||||
            root.newstypeSignal.connect(newstypeHandling);
 | 
			
		||||
            root.messageSignal.connect(onFriendsMessages);
 | 
			
		||||
            root.contactdetailsSignal.connect(showContact);
 | 
			
		||||
            root.newsSignal.connect(showNews);
 | 
			
		||||
 | 
			
		||||
            try{newsModel.clear()} catch(e){}
 | 
			
		||||
            swipeIndicator.visible=true;
 | 
			
		||||
            newsSwipeview.height=rootStackItem.height-12*mm;
 | 
			
		||||
            newsSwipeview.y=5*mm;
 | 
			
		||||
            rootStackItem.state=""
 | 
			
		||||
           
 | 
			
		||||
//           xhr.setLogin(login.username+":"+Qt.atob(login.password));
 | 
			
		||||
//           xhr.setUrl(login.server);
 | 
			
		||||
//            if((newsStack.parent.stacktype=="standard") && (root.news.length>0)){
 | 
			
		||||
//                showNews(root.news)
 | 
			
		||||
//            }
 | 
			
		||||
            //else{
 | 
			
		||||
            newstab.newstabstatus=login.newsViewType;
 | 
			
		||||
            var messagetype=0;
 | 
			
		||||
            switch(newsSwipeview.stacktype){
 | 
			
		||||
                case "Home":messagetype=0;break;
 | 
			
		||||
                case "DirectMessages": messagetype=1;break;
 | 
			
		||||
                case "Notifications":messagetype=2;break;
 | 
			
		||||
                case "Replies":messagetype=3;break;
 | 
			
		||||
                default:messagetype=0;
 | 
			
		||||
            }
 | 
			
		||||
            if((login.newsViewType=="Conversations")&&(newsSwipeview.stacktype=="Home")){
 | 
			
		||||
                Newsjs.chatsfromdb(db,login,messagetype,function(dbnews,lastid){
 | 
			
		||||
                    lastnewsid=lastid;
 | 
			
		||||
                    showNews(dbnews);
 | 
			
		||||
                })
 | 
			
		||||
            }
 | 
			
		||||
            else{Newsjs.newsfromdb(db,login,messagetype,function(dbnews,lastid){
 | 
			
		||||
                lastnewsid=lastid;
 | 
			
		||||
                showNews(dbnews)
 | 
			
		||||
             })}
 | 
			
		||||
            //}
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -29,37 +29,16 @@
 | 
			
		|||
//  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.Controls 1.4
 | 
			
		||||
import QtQuick.Controls 2.3 as QC2
 | 
			
		||||
import QtQuick 2.11
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
//import QtQuick.Controls.Styles 2.3
 | 
			
		||||
import QtQuick.Dialogs 1.3
 | 
			
		||||
import "qrc:/qml/genericqml"
 | 
			
		||||
//import QtQuick.Dialogs 1.3
 | 
			
		||||
import "qrc:/qml/newsqml"
 | 
			
		||||
import "qrc:/js/news.js" as Newsjs
 | 
			
		||||
import "qrc:/js/helper.js" as Helperjs
 | 
			
		||||
import "qrc:/js/service.js" as Service
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import AndroidNative 1.0
 | 
			
		||||
 | 
			
		||||
Item {
 | 
			
		||||
    Connections{
 | 
			
		||||
        target:newstab
 | 
			
		||||
        onNewstabstatusChanged:{
 | 
			
		||||
            newstabstatusButton.text= qsTr(newstab.newstabstatus)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Connections{
 | 
			
		||||
        target:xhr
 | 
			
		||||
        onError:{
 | 
			
		||||
            Helperjs.showMessage(qsTr("Network Error"),"API:\n" +login.server+api+"\n Return: \n"+data,root);
 | 
			
		||||
        }
 | 
			
		||||
        onSuccess:{
 | 
			
		||||
           // downloadNotice.text=downloadNotice.text+ "\n xhr finished "+Date.now();
 | 
			
		||||
            Service.processNews(api,data);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
//    Connections{
 | 
			
		||||
//        target:xhr
 | 
			
		||||
| 
						 | 
				
			
			@ -80,43 +59,18 @@ Item {
 | 
			
		|||
//    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    Timer {id:replytimer; interval: 1000; running: false; repeat: false
 | 
			
		||||
        onTriggered: {
 | 
			
		||||
            if(newstab.newstabstatus=="Conversation"){
 | 
			
		||||
                showConversation(newsStack.timelineIndex-1,newsModel.get(0).newsitemobject)}
 | 
			
		||||
            else{
 | 
			
		||||
                  Service.updateView(newstab.newstabstatus)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    Timer {id:contacttimer; interval: 50; running: false; repeat: false
 | 
			
		||||
        onTriggered: {
 | 
			
		||||
        onTriggered: {//print("Contacttimer "+JSON.stringify(root.news));
 | 
			
		||||
           // downloadNotice.text=downloadNotice.text + "\n contactTimer start "+ Date.now()
 | 
			
		||||
            root.newContacts=Newsjs.findNewContacts(root.news,root.contactlist);
 | 
			
		||||
            Newsjs.storeNews(login,db,root.news,root)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    function showNews(newsToShow){
 | 
			
		||||
       try{
 | 
			
		||||
           if (newsStack.depth>1){newsStack.pop()}
 | 
			
		||||
       }catch(e){}
 | 
			
		||||
       newsBusy.running=false;
 | 
			
		||||
       var currentTime= new Date();
 | 
			
		||||
      // downloadNotice.text=downloadNotice.text + "\n shownews start "+ Date.now();
 | 
			
		||||
       //print("appendnews "+newsStack.appendNews +JSON.stringify(newsToShow))
 | 
			
		||||
       var msg = {'currentTime': currentTime, 'model': newsModel,'news':newsToShow,'method':newsStack.updateMethodNews, 'options':globaloptions};
 | 
			
		||||
       newsWorker.sendMessage(msg);
 | 
			
		||||
       //newsStack.appendNews=false
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    function showConversation(conversationIndex,newsitemobject){
 | 
			
		||||
        if(newsitemobject.messagetype==0){
 | 
			
		||||
        if(newsitemobject.messagetype==0 || newsitemobject.messagetype==3){
 | 
			
		||||
            xhr.clearParams();
 | 
			
		||||
            xhr.setLogin(login.username+":"+Qt.atob(login.password));
 | 
			
		||||
            xhr.setUrl(login.server);
 | 
			
		||||
| 
						 | 
				
			
			@ -134,31 +88,12 @@ Item {
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function showContact(contact){
 | 
			
		||||
        newstab.newstabstatus="Contact";
 | 
			
		||||
        newsStack.push({item:"qrc:/qml/newsqml/ContactPage.qml",properties:{"contact": contact}});
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function search(term){//print("Search "+term)
 | 
			
		||||
        if (term!=""){
 | 
			
		||||
        newstab.newstabstatus="Search";
 | 
			
		||||
        newsBusy.running=true;
 | 
			
		||||
        newsStack.updateMethodNews="refresh";
 | 
			
		||||
        xhr.setLogin(login.username+":"+Qt.atob(login.password));
 | 
			
		||||
        xhr.setUrl(login.server);
 | 
			
		||||
        xhr.setApi("/api/search");
 | 
			
		||||
        xhr.clearParams();
 | 
			
		||||
        xhr.setParam("q",term)
 | 
			
		||||
        xhr.get();}
 | 
			
		||||
        newsView.anchors.topMargin=7*mm
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    function onFriendsMessages(friend){
 | 
			
		||||
        newstab.newstabstatus="Contact"
 | 
			
		||||
        Newsjs.newsfromdb(db,root.login.username, function(dbnews){
 | 
			
		||||
        Newsjs.newsfromdb(db,root.login.username, 0,function(dbnews){
 | 
			
		||||
            if (dbnews.length==0){
 | 
			
		||||
                Newsjs.newsfromdb(db,login.username,function(forumnews){
 | 
			
		||||
                Newsjs.newsfromdb(db,login.username,0,function(forumnews){
 | 
			
		||||
                    showNews(forumnews)
 | 
			
		||||
                },friend.url)
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -166,303 +101,84 @@ Item {
 | 
			
		|||
       },friend.id)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function onDirectMessage(friend){
 | 
			
		||||
        //newstab.newstabstatus="SendMessage" ,"login":login ,
 | 
			
		||||
        newsStack.push({item:"qrc:/qml/newsqml/MessageSend.qml",properties:{"reply_to_user": friend,"directmessage":1, "login":root.login}});
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function sendUrls(urls){print(root.currentIndex==0);
 | 
			
		||||
        if((urls.length==1)&&(newsStack.depth<2)){
 | 
			
		||||
           newsStack.push({item:"qrc:/qml/newsqml/MessageSend.qml",properties:{"attachImageURLs":urls}})
 | 
			
		||||
    Label{
 | 
			
		||||
        text:"\uf0c9 "
 | 
			
		||||
        font.pixelSize: 5* mm
 | 
			
		||||
        anchors.left: parent.left
 | 
			
		||||
        anchors.margins: mm
 | 
			
		||||
        color: "#B0BEC5"
 | 
			
		||||
        MouseArea{
 | 
			
		||||
            anchors.fill: parent
 | 
			
		||||
            onClicked:{
 | 
			
		||||
                leftDrawer.open()
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function sendtext(text){
 | 
			
		||||
        if(text&&(newsStack.depth<2)){
 | 
			
		||||
            if (text.subject=="undefined"){text.subject=""}
 | 
			
		||||
            if(text.plaintext.lastIndexOf(".jpg")>-1 || text.plaintext.lastIndexOf(".jpeg")>-1 || text.plaintext.lastIndexOf(".png")>-1 || text.plaintext.lastIndexOf(".gif")>-1){
 | 
			
		||||
                text.plaintext="<a href="+text.plaintext+"><img src="+text.plaintext+"></a>"}
 | 
			
		||||
            newsStack.push({item:"qrc:/qml/newsqml/MessageSend.qml",properties:{"bodyMessage":text.subject+"\n"+text.plaintext}})
 | 
			
		||||
        }
 | 
			
		||||
    Label{
 | 
			
		||||
        text:qsTr(newsSwipeview.stacktype)
 | 
			
		||||
        font.pixelSize: 3* mm
 | 
			
		||||
        anchors.horizontalCenter: parent.horizontalCenter
 | 
			
		||||
        anchors.margins: 2*mm
 | 
			
		||||
    }
 | 
			
		||||
    SwipeView{
 | 
			
		||||
        id: newsSwipeview
 | 
			
		||||
        property string stacktype:"Home"
 | 
			
		||||
        currentIndex: 0
 | 
			
		||||
        width: parent.width
 | 
			
		||||
        height: parent.height-6*mm
 | 
			
		||||
        y: 5*mm
 | 
			
		||||
        function onDirectMessage(friend){currentIndex=2}
 | 
			
		||||
 | 
			
		||||
   StackView{
 | 
			
		||||
       id: newsStack
 | 
			
		||||
       anchors.fill:parent
 | 
			
		||||
       property string updateMethodNews: "refresh"
 | 
			
		||||
       property var allchats: ({})
 | 
			
		||||
       initialItem:Rectangle {
 | 
			
		||||
           id:newslistRectangle
 | 
			
		||||
        y:1
 | 
			
		||||
        color: "white"
 | 
			
		||||
 | 
			
		||||
        BlueButton{
 | 
			
		||||
            id:newstabstatusButton
 | 
			
		||||
            anchors.top: parent.top
 | 
			
		||||
            anchors.topMargin: 0.5*mm
 | 
			
		||||
            text: qsTr(newstab.newstabstatus)
 | 
			
		||||
            onClicked: {newstabmenu.popup(2*mm,6*mm)}
 | 
			
		||||
 | 
			
		||||
            QC2.Menu{id:newstabmenu
 | 
			
		||||
                width: 40*mm
 | 
			
		||||
 | 
			
		||||
                delegate:QC2.MenuItem{
 | 
			
		||||
                    contentItem: Text{
 | 
			
		||||
                        font.pixelSize: 3.5*mm
 | 
			
		||||
                        text:parent.text
 | 
			
		||||
                    }
 | 
			
		||||
                    background: Rectangle {
 | 
			
		||||
                        implicitWidth: 40*mm; implicitHeight: 5*mm
 | 
			
		||||
                        color: "#ffffff"
 | 
			
		||||
                        border.color: "grey"
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                QC2.Action {
 | 
			
		||||
                    text: qsTr("Timeline")
 | 
			
		||||
                    onTriggered: {
 | 
			
		||||
                        newstab.newstabstatus="Timeline";
 | 
			
		||||
                        //newsModel.clear();
 | 
			
		||||
                        try{ Newsjs.newsfromdb(root.db,root.login.username, function(dbnews){
 | 
			
		||||
                            showNews(dbnews)
 | 
			
		||||
                        })}catch(e){Helperjs.showMessage("Error",e,root)}}
 | 
			
		||||
                }
 | 
			
		||||
                QC2.Action {
 | 
			
		||||
                    text: qsTr("Conversations")
 | 
			
		||||
                    onTriggered:{
 | 
			
		||||
                        //newsModel.clear();
 | 
			
		||||
                        newstab.newstabstatus="Conversations";
 | 
			
		||||
                        Newsjs.chatsfromdb(db,root.login.username,function(news){showNews(news)})
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                QC2.Action {
 | 
			
		||||
                    text: qsTr("Favorites")
 | 
			
		||||
                    onTriggered:{
 | 
			
		||||
                        newsStack.updateMethodNews="refresh";
 | 
			
		||||
                        newstab.newstabstatus="Favorites";
 | 
			
		||||
                        Service.updateView("Favorites")
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                QC2.Action {
 | 
			
		||||
                    text: qsTr("Replies")
 | 
			
		||||
                    onTriggered:{
 | 
			
		||||
                        newsStack.updateMethodNews="refresh";
 | 
			
		||||
                        newstab.newstabstatus="Replies";
 | 
			
		||||
                        Service.updateView("Replies")
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                QC2.Action {
 | 
			
		||||
                    text: qsTr("Public timeline")
 | 
			
		||||
                    onTriggered:{
 | 
			
		||||
                        newsStack.updateMethodNews="refresh";
 | 
			
		||||
                        newstab.newstabstatus="Public Timeline";
 | 
			
		||||
                        Service.updateView("Public Timeline")
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
                QC2.Action {
 | 
			
		||||
                    text: qsTr("Direct Messages")
 | 
			
		||||
                    onTriggered:{
 | 
			
		||||
                        newsStack.updateMethodNews="refresh";
 | 
			
		||||
                        newstab.newstabstatus="Direct Messages";
 | 
			
		||||
                        Service.updateView("Direct Messages")
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                QC2.Action {
 | 
			
		||||
                    text: qsTr("Notifications")
 | 
			
		||||
                    onTriggered:{
 | 
			
		||||
                        newsStack.updateMethodNews="refresh";
 | 
			
		||||
                        newstab.newstabstatus="Notifications";
 | 
			
		||||
                        Service.updateView("Notifications")
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                QC2.Action {
 | 
			
		||||
 | 
			
		||||
                     text: qsTr("Group news")
 | 
			
		||||
                     onTriggered:
 | 
			
		||||
                     {
 | 
			
		||||
                         newsStack.updateMethodNews="refresh";
 | 
			
		||||
                         Service.showGroups();
 | 
			
		||||
                     }
 | 
			
		||||
                }
 | 
			
		||||
                QC2.Action {
 | 
			
		||||
                    text: qsTr("Quit")
 | 
			
		||||
                    onTriggered:{
 | 
			
		||||
                         Service.cleanNews(root.db,function(){
 | 
			
		||||
                             Service.cleanContacts(root.login,root.db,function(){
 | 
			
		||||
                                 Qt.quit()})
 | 
			
		||||
                             })
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
        transitions: Transition {
 | 
			
		||||
            PropertyAnimation { properties: "height";
 | 
			
		||||
                easing.type: Easing.InOutQuad
 | 
			
		||||
                duration: 1000
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Row{
 | 
			
		||||
           spacing: mm
 | 
			
		||||
           anchors.top: parent.top
 | 
			
		||||
           anchors.topMargin: 0.5*mm
 | 
			
		||||
           anchors.right: parent.right
 | 
			
		||||
 | 
			
		||||
           BlueButton {
 | 
			
		||||
             id: searchButton
 | 
			
		||||
             text: "\uf002"
 | 
			
		||||
             onClicked: {
 | 
			
		||||
                  newsView.anchors.topMargin=18*mm;
 | 
			
		||||
                  var component = Qt.createComponent("qrc:/qml/genericqml/Search.qml");
 | 
			
		||||
                  var searchItem = component.createObject(newsStack,{y:8*mm,width:root.width,height: 8*mm});
 | 
			
		||||
             }
 | 
			
		||||
           }
 | 
			
		||||
 | 
			
		||||
           BlueButton {
 | 
			
		||||
               id: newMessageButton
 | 
			
		||||
               text: "\uf040"
 | 
			
		||||
               onClicked: {
 | 
			
		||||
                   var groups=[];
 | 
			
		||||
                   Helperjs.readData(root.db,"groups",root.login.username,function(groupobject){
 | 
			
		||||
                       groups=groupobject
 | 
			
		||||
                   });
 | 
			
		||||
                   newstab.newstabstatus="SendMessage";
 | 
			
		||||
                   Helperjs.readData(root.db,"contacts",root.login.username,function(friends){
 | 
			
		||||
                      newsStack.push("qrc:/qml/newsqml/MessageSend.qml",{"contacts": friends,"login":root.login})
 | 
			
		||||
                   },"isFriend",1);
 | 
			
		||||
               }
 | 
			
		||||
           }
 | 
			
		||||
//           BlueButton {
 | 
			
		||||
//             id: quitButton
 | 
			
		||||
//             text: "\uf08b"
 | 
			
		||||
//             onClicked: {Service.cleanNews(root.db,function(){
 | 
			
		||||
//                 Service.cleanContacts(root.login,root.db,function(){
 | 
			
		||||
//                    Qt.quit() })
 | 
			
		||||
//             })}
 | 
			
		||||
//           }
 | 
			
		||||
           BlueButton {
 | 
			
		||||
            id: update
 | 
			
		||||
            text: "\uf021"
 | 
			
		||||
            onClicked: {
 | 
			
		||||
                if (newstab.newstabstatus=="Timeline"){
 | 
			
		||||
                    newsStack.updateMethodNews="append"
 | 
			
		||||
                } else {newsStack.updateMethodNews="refresh"}
 | 
			
		||||
                //root.contactLoadType="news";
 | 
			
		||||
                Service.updateView(newstab.newstabstatus)
 | 
			
		||||
        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";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //anchors.fill: parent
 | 
			
		||||
        Loader{
 | 
			
		||||
            id: friendstimeline
 | 
			
		||||
            source:(newsSwipeview.currentIndex==0)? "qrc:/qml/newsqml/NewsStack.qml":""
 | 
			
		||||
            //onLoaded: newsSwipeview.stacktype="Home"
 | 
			
		||||
        }
 | 
			
		||||
        Component {  id:footerComponent
 | 
			
		||||
            Rectangle{
 | 
			
		||||
                border.color: "#EEEEEE"
 | 
			
		||||
                border.width: 1
 | 
			
		||||
                 width:newsView.width
 | 
			
		||||
                 height:6*mm
 | 
			
		||||
                 Text{
 | 
			
		||||
                     font.pixelSize: 1.5*mm
 | 
			
		||||
                     anchors.centerIn: parent
 | 
			
		||||
                     text:qsTr("More")
 | 
			
		||||
                 }
 | 
			
		||||
                 MouseArea{anchors.fill:parent
 | 
			
		||||
                     onClicked:{
 | 
			
		||||
                        var currentTime= new Date();
 | 
			
		||||
                        var lastnews_id=newsModel.get(newsModel.count-1).newsitemobject.created_at;
 | 
			
		||||
                        if(newstab.newstabstatus=="Timeline"){
 | 
			
		||||
                            Newsjs.newsfromdb(root.db,root.login.username, function(news){
 | 
			
		||||
                                var msg = {'currentTime': currentTime, 'model': newsModel,'news':news,'appendnews':true, 'options':globaloptions};
 | 
			
		||||
                                newsWorker.sendMessage(msg);
 | 
			
		||||
                            },false,lastnews_id)}
 | 
			
		||||
                        if(newstab.newstabstatus=="Conversations"){
 | 
			
		||||
                            Newsjs.chatsfromdb(root.db,root.login.username, function(news){
 | 
			
		||||
                                var msg = {'currentTime': currentTime, 'model': newsModel,'news':news,'appendnews':true, 'options':globaloptions};
 | 
			
		||||
                                newsWorker.sendMessage(msg);
 | 
			
		||||
                            },lastnews_id)}
 | 
			
		||||
//                        else if(newstab.newstabstatus=="Contact"){
 | 
			
		||||
//                            Newsjs.newsfromdb(root.db,root.login.username, function(news){
 | 
			
		||||
//                                var msg = {'currentTime': currentTime, 'model': newsModel,'news':news,'appendnews':true};
 | 
			
		||||
//                                newsWorker.sendMessage(msg);
 | 
			
		||||
//                            },newsModel.get(newsModel.count-1).newsitemobject.uid,lastnews_id)}
 | 
			
		||||
                        else if (newstab.newstabstatus=="Notifications"){}
 | 
			
		||||
                        else{
 | 
			
		||||
                            //newsStack.appendNews=true;
 | 
			
		||||
                            xhr.setParam("max_id",newsModel.get(newsModel.count-1).newsitemobject.id-1);
 | 
			
		||||
                            xhr.get()
 | 
			
		||||
                     }}
 | 
			
		||||
                 }
 | 
			
		||||
             }
 | 
			
		||||
        Loader{
 | 
			
		||||
            id: replies
 | 
			
		||||
            //property string stacktype:"Replies"
 | 
			
		||||
            source:(newsSwipeview.currentIndex==1)? "qrc:/qml/newsqml/NewsStack.qml":""
 | 
			
		||||
            //onLoaded: newsSwipeview.stacktype="Replies"
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        ListView {
 | 
			
		||||
          id: newsView
 | 
			
		||||
          anchors.fill: parent
 | 
			
		||||
          anchors.topMargin: 7*root.mm
 | 
			
		||||
          anchors.leftMargin: 3*root.mm; anchors.rightMargin: root.mm
 | 
			
		||||
          anchors.bottomMargin: 1*root.mm
 | 
			
		||||
          clip: true
 | 
			
		||||
          spacing: 0
 | 
			
		||||
          footer: footerComponent
 | 
			
		||||
          model: newsModel
 | 
			
		||||
          delegate: Newsitem{}
 | 
			
		||||
          //onContentYChanged:{if(contentY<-8*mm&&contentY>(-8*mm-1)){print("refreshing");
 | 
			
		||||
          onDragEnded:{if(contentY<-5*mm){
 | 
			
		||||
                   var onlynew=true;
 | 
			
		||||
                  Service.updateView(newstab.newstabstatus)
 | 
			
		||||
              }}
 | 
			
		||||
        Loader{
 | 
			
		||||
            id: directmessages
 | 
			
		||||
            property var friend:({})
 | 
			
		||||
            source:(newsSwipeview.currentIndex==2)? "qrc:/qml/newsqml/NewsStack.qml":""
 | 
			
		||||
            //onLoaded: newsSwipeview.stacktype="DirectMessages"
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
       ListModel{id: newsModel}
 | 
			
		||||
 | 
			
		||||
       WorkerScript {
 | 
			
		||||
              id: newsWorker
 | 
			
		||||
              source: "qrc:/js/newsworker.js"
 | 
			
		||||
          }
 | 
			
		||||
       
 | 
			
		||||
       BusyIndicator{
 | 
			
		||||
         id: newsBusy
 | 
			
		||||
         anchors.horizontalCenter: newsView.horizontalCenter
 | 
			
		||||
         anchors.top:newsView.top
 | 
			
		||||
         anchors.topMargin: 2*mm
 | 
			
		||||
         width:10*mm
 | 
			
		||||
         height: 10*mm
 | 
			
		||||
       }
 | 
			
		||||
       Rectangle{
 | 
			
		||||
          id:downloadNotice
 | 
			
		||||
          property alias text: noticeText.text
 | 
			
		||||
          color:"white"
 | 
			
		||||
          border.color:"grey"
 | 
			
		||||
          z:1
 | 
			
		||||
          anchors.horizontalCenter: newsView.horizontalCenter
 | 
			
		||||
          anchors.bottom:newsView.bottom
 | 
			
		||||
          anchors.bottomMargin: 2*mm
 | 
			
		||||
          width: noticeText.width+2*mm
 | 
			
		||||
          height: noticeText.height+2*mm
 | 
			
		||||
          visible: (downloadNotice.text!="")
 | 
			
		||||
          
 | 
			
		||||
          Text{
 | 
			
		||||
              id:noticeText
 | 
			
		||||
              color: "grey"
 | 
			
		||||
              anchors.centerIn: parent
 | 
			
		||||
              width: contentWidth
 | 
			
		||||
              height: contentHeight
 | 
			
		||||
              font.pixelSize: 2*mm
 | 
			
		||||
              text:""
 | 
			
		||||
          }
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
        Component.onCompleted: {
 | 
			
		||||
           root.messageSignal.connect(onFriendsMessages);
 | 
			
		||||
           root.directmessageSignal.connect(onDirectMessage);
 | 
			
		||||
           root.contactdetailsSignal.connect(showContact);
 | 
			
		||||
           root.newsSignal.connect(showNews);
 | 
			
		||||
           root.uploadSignal.connect(sendUrls);
 | 
			
		||||
           root.sendtextSignal.connect(sendtext);
 | 
			
		||||
           try{newsModel.clear()} catch(e){}
 | 
			
		||||
//           xhr.setLogin(login.username+":"+Qt.atob(login.password));
 | 
			
		||||
//           xhr.setUrl(login.server);
 | 
			
		||||
            if(root.news.length>0){showNews(root.news)}
 | 
			
		||||
            else{ newstab.newstabstatus=login.newsViewType; 
 | 
			
		||||
                if(login.newsViewType=="Timeline"){Newsjs.newsfromdb(db,login.username,function(dbnews){showNews(dbnews)})}
 | 
			
		||||
                else{Newsjs.chatsfromdb(db,login.username,function(dbnews){
 | 
			
		||||
                    showNews(dbnews);
 | 
			
		||||
                })}
 | 
			
		||||
            }
 | 
			
		||||
        Loader{
 | 
			
		||||
            id: notifications
 | 
			
		||||
            //property string stacktype:"Notifications"
 | 
			
		||||
            source:(newsSwipeview.currentIndex==3)? "qrc:/qml/newsqml/NewsStack.qml":""
 | 
			
		||||
            //onLoaded: newsSwipeview.stacktype="Notifications"
 | 
			
		||||
        }
 | 
			
		||||
     }
 | 
			
		||||
  }
 | 
			
		||||
        Component.onCompleted: {root.directmessageSignal.connect(onDirectMessage);}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    PageIndicator {
 | 
			
		||||
        id: swipeIndicator
 | 
			
		||||
        count: newsSwipeview.count
 | 
			
		||||
        currentIndex: newsSwipeview.currentIndex
 | 
			
		||||
 | 
			
		||||
        anchors.bottom: newsSwipeview.bottom
 | 
			
		||||
        anchors.horizontalCenter: parent.horizontalCenter
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,8 +30,8 @@
 | 
			
		|||
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
import QtQuick 2.0
 | 
			
		||||
import QtQuick.Controls 1.4
 | 
			
		||||
import QtQuick.Controls.Styles 1.4
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
//import QtQuick.Controls.Styles 1.4
 | 
			
		||||
import "qrc:/js/news.js" as Newsjs
 | 
			
		||||
import "qrc:/js/helper.js" as Helperjs
 | 
			
		||||
import "qrc:/qml/genericqml"
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +62,7 @@ Item {
 | 
			
		|||
    Rectangle{
 | 
			
		||||
    width:newsitem.width
 | 
			
		||||
    height:newsitem.height-1
 | 
			
		||||
    color:  (newsitemobject.messagetype==1)?"#ffe6e6" : "white"
 | 
			
		||||
    color:  "white"//(newsitemobject.messagetype==1)?"#ffe6e6" : "white"
 | 
			
		||||
 | 
			
		||||
    Row{id:toprow
 | 
			
		||||
        Column {
 | 
			
		||||
| 
						 | 
				
			
			@ -102,8 +102,7 @@ Item {
 | 
			
		|||
            Label {
 | 
			
		||||
                id:messageTypeLabel
 | 
			
		||||
                color: "grey"
 | 
			
		||||
                text: if (newsitemobject.messagetype==0){qsTr("Source: ")+newsitemobject.source
 | 
			
		||||
                      } else if (newsitemobject.messagetype==1){ qsTr("Direct Message")} else {" Notification"}
 | 
			
		||||
                text: if (newsitemobject.messagetype==1){ qsTr("Direct Message")} else if(newsitemobject.messagetype==2) {" Notification"} else {qsTr("Source: ")+newsitemobject.source}
 | 
			
		||||
                font.pixelSize: 1.5*mm
 | 
			
		||||
            }
 | 
			
		||||
            Label {
 | 
			
		||||
| 
						 | 
				
			
			@ -117,6 +116,7 @@ Item {
 | 
			
		|||
                id:replytoLabel
 | 
			
		||||
                color: "grey"
 | 
			
		||||
                font.pixelSize: 1.5*mm
 | 
			
		||||
                font.family: "Noto Sans"
 | 
			
		||||
                horizontalAlignment: Label.AlignRight
 | 
			
		||||
                text:   try {qsTr("In reply to ")+newsitemobject.reply_user.screen_name
 | 
			
		||||
                      }catch(e){" "}
 | 
			
		||||
| 
						 | 
				
			
			@ -160,6 +160,7 @@ Item {
 | 
			
		|||
            linkColor: "light green"
 | 
			
		||||
            id: itemMessage
 | 
			
		||||
            textFormat: Text.RichText
 | 
			
		||||
            font.family: "Noto Sans"
 | 
			
		||||
            text: newsitemobject.statusnet_html//newsitemobject.attachmentList.length>0?newsitemobject.text : newsitemobject.statusnet_html
 | 
			
		||||
            width: newsitem.width-8*mm-2
 | 
			
		||||
            height: implicitHeight
 | 
			
		||||
| 
						 | 
				
			
			@ -178,7 +179,6 @@ Item {
 | 
			
		|||
                }}
 | 
			
		||||
 | 
			
		||||
                if (newsitemobject.attachmentList.length>0){
 | 
			
		||||
 | 
			
		||||
                    for(var attachments in newsitemobject.attachmentList){//   (newsitemobject.attachmentList[attachments].url);
 | 
			
		||||
                        if(newsitemobject.attachmentList[attachments].mimetype.substring(0,5)=="image"){
 | 
			
		||||
                            var component = Qt.createComponent("qrc:/qml/newsqml/NewsImage.qml");
 | 
			
		||||
| 
						 | 
				
			
			@ -191,8 +191,7 @@ Item {
 | 
			
		|||
                        else {//print(newsitemobject.attachmentList[attachments].url+" Type: "+newsitemobject.attachmentList[attachments].mimetype)
 | 
			
		||||
                            var component = Qt.createComponent("qrc:/qml/newsqml/NewsVideo.qml");
 | 
			
		||||
                            var videoQml = component.createObject(messageColumn,{"source":newsitemobject.attachmentList[attachments].url,"mimetype":newsitemobject.attachmentList[attachments].mimetype});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -289,9 +288,9 @@ Item {
 | 
			
		|||
       CheckBox{
 | 
			
		||||
           id:likeCheckbox
 | 
			
		||||
           width:10*mm
 | 
			
		||||
           visible: (newsitemobject.messagetype==0)? true:false
 | 
			
		||||
           visible: ((newsitemobject.messagetype==0)||(newsitemobject.messagetype==3))? true:false
 | 
			
		||||
           checked:(friendica_activities.self.liked==1)?true:false
 | 
			
		||||
           style: CheckBoxStyle {
 | 
			
		||||
           //style: CheckBoxStyle {
 | 
			
		||||
                indicator: Rectangle{
 | 
			
		||||
                    implicitWidth: 10*mm
 | 
			
		||||
                    implicitHeight:3*mm
 | 
			
		||||
| 
						 | 
				
			
			@ -299,11 +298,11 @@ Item {
 | 
			
		|||
                        anchors.centerIn: parent
 | 
			
		||||
                        font.pixelSize: 2.5*mm
 | 
			
		||||
                        font.family:fontAwesome.name
 | 
			
		||||
                        color:control.checked?"black": "grey"
 | 
			
		||||
                        text:control.checked?"\uf118"+"!":"\uf118"
 | 
			
		||||
                        color:likeCheckbox.checked?"black": "grey"
 | 
			
		||||
                        text:likeCheckbox.checked?"\uf118"+"!":"\uf118"
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
           }
 | 
			
		||||
           //}
 | 
			
		||||
           onClicked: {
 | 
			
		||||
            if(likeCheckbox.checked==true){Newsjs.like(root.login,root.db,1,"like",newsitemobject.id,root);dislikeCheckbox.checked=false; model.friendica_activities.self.liked=0 }
 | 
			
		||||
            else{Newsjs.like(root.login,root.db,0,"like",newsitemobject.id,root); model.friendica_activities.self.liked=1}}
 | 
			
		||||
| 
						 | 
				
			
			@ -311,9 +310,9 @@ Item {
 | 
			
		|||
       CheckBox{
 | 
			
		||||
           id: dislikeCheckbox
 | 
			
		||||
           width:10*mm
 | 
			
		||||
           visible: (newsitemobject.messagetype==0)? true:false
 | 
			
		||||
           visible: ((newsitemobject.messagetype==0)||(newsitemobject.messagetype==3))? true:false
 | 
			
		||||
           checked: (friendica_activities.self.disliked==1)?true:false
 | 
			
		||||
           style: CheckBoxStyle {
 | 
			
		||||
           //style: CheckBoxStyle {
 | 
			
		||||
            indicator: Rectangle{
 | 
			
		||||
                implicitWidth: 10*mm
 | 
			
		||||
                implicitHeight:3*mm
 | 
			
		||||
| 
						 | 
				
			
			@ -321,11 +320,11 @@ Item {
 | 
			
		|||
                    anchors.centerIn: parent
 | 
			
		||||
                    font.pixelSize: 2.5*mm
 | 
			
		||||
                    font.family:fontAwesome.name
 | 
			
		||||
                    color:control.checked?"black": "grey"
 | 
			
		||||
                    text:  control.checked?"\uf119"+"!":"\uf119"
 | 
			
		||||
                    color:dislikeCheckbox.checked?"black": "grey"
 | 
			
		||||
                    text:  dislikeCheckbox.checked?"\uf119"+"!":"\uf119"
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
           }
 | 
			
		||||
           //}
 | 
			
		||||
           onClicked: {
 | 
			
		||||
            if (dislikeCheckbox.checked==true){Newsjs.like(root.login,root.db,1,"dislike",newsitemobject.id,root);likeCheckbox.checked=false; model.friendica_activities.self.disliked=0}
 | 
			
		||||
            else {Newsjs.like(root.login,root.db,0,"dislike",newsitemobject.id,root); model.friendica_activities.self.disliked=1}}
 | 
			
		||||
| 
						 | 
				
			
			@ -333,20 +332,20 @@ Item {
 | 
			
		|||
 | 
			
		||||
       CheckBox {
 | 
			
		||||
           id:favoritedCheckbox
 | 
			
		||||
           visible:(newsitemobject.messagetype==0)
 | 
			
		||||
           visible:((newsitemobject.messagetype==0)||(newsitemobject.messagetype==3))
 | 
			
		||||
           width: 10*mm
 | 
			
		||||
           style: CheckBoxStyle {
 | 
			
		||||
           //style: CheckBoxStyle {
 | 
			
		||||
               indicator:Rectangle{
 | 
			
		||||
                   x:4*mm
 | 
			
		||||
                   width: 3*mm
 | 
			
		||||
                   implicitHeight:4*mm
 | 
			
		||||
                    Text{
 | 
			
		||||
                        color: control.checked?"black":"grey"
 | 
			
		||||
                        color: favoritedCheckbox.checked?"black":"grey"
 | 
			
		||||
                        font.pixelSize: 2.5*mm
 | 
			
		||||
                        text:"\uf005"
 | 
			
		||||
                        }
 | 
			
		||||
               }
 | 
			
		||||
           }
 | 
			
		||||
           //}
 | 
			
		||||
           checked:(newsitemobject.favorited>0)
 | 
			
		||||
           onClicked:{
 | 
			
		||||
               if(favoritedCheckbox.checkedState==Qt.Checked){
 | 
			
		||||
| 
						 | 
				
			
			@ -401,21 +400,29 @@ Item {
 | 
			
		|||
 | 
			
		||||
    Menu {
 | 
			
		||||
        id:newsmenu
 | 
			
		||||
        MenuItem {
 | 
			
		||||
        width: 30*mm
 | 
			
		||||
        delegate: MenuItem{
 | 
			
		||||
            contentItem: Text{
 | 
			
		||||
                font.pixelSize: 3*mm
 | 
			
		||||
                text: parent.text
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        Action{
 | 
			
		||||
            text: qsTr("Reply")
 | 
			
		||||
            onTriggered: {
 | 
			
		||||
                var directmessage=0;
 | 
			
		||||
                if (newsitemobject.messagetype==1){ directmessage=1}
 | 
			
		||||
                newsStack.push("qrc:/qml/newsqml/MessageSend.qml",{"reply_to_user": newsitemobject.user.screen_name,"parentId":newsitemobject.id,"login":root.login,"directmessage":directmessage});
 | 
			
		||||
                replySignal(newsitemobject)
 | 
			
		||||
                //newsStack.push("qrc:/qml/newsqml/MessageSend.qml",{"reply_to_user": newsitemobject.user.screen_name,"parentId":newsitemobject.id,"login":root.login,"directmessage":directmessage});
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        MenuItem {
 | 
			
		||||
        Action {
 | 
			
		||||
            text: qsTr("DM")
 | 
			
		||||
            onTriggered: {
 | 
			
		||||
                root.directmessageSignal(newsitemobject.user.screen_name);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        MenuItem {
 | 
			
		||||
        Action {
 | 
			
		||||
            text: qsTr("Repost")
 | 
			
		||||
            onTriggered: {
 | 
			
		||||
                Newsjs.retweetNews(root.login,db,newsitemobject.id,root,function(reply){
 | 
			
		||||
| 
						 | 
				
			
			@ -423,7 +430,7 @@ Item {
 | 
			
		|||
                })
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        MenuItem {
 | 
			
		||||
        Action {
 | 
			
		||||
            text: qsTr("Conversation")
 | 
			
		||||
            onTriggered: {
 | 
			
		||||
                conversationsymbol.color="black";
 | 
			
		||||
| 
						 | 
				
			
			@ -435,24 +442,31 @@ Item {
 | 
			
		|||
 | 
			
		||||
        Menu{
 | 
			
		||||
            title: qsTr("Attending")
 | 
			
		||||
            MenuItem{
 | 
			
		||||
            width: 20*mm
 | 
			
		||||
            delegate: MenuItem{
 | 
			
		||||
                contentItem: Text{
 | 
			
		||||
                    font.pixelSize: 3*mm
 | 
			
		||||
                    text: parent.text
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            Action{
 | 
			
		||||
                text:qsTr("yes")
 | 
			
		||||
                onTriggered: {Newsjs.attend(root.login,db,"yes",newsitemobject.id,root,function(){
 | 
			
		||||
                    model.friendica_activities.self.attending="yes";attending="yes"})
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            MenuItem{text:qsTr("maybe")
 | 
			
		||||
            Action{text:qsTr("maybe")
 | 
			
		||||
                onTriggered: {Newsjs.attend(root.login,db,"maybe",newsitemobject.id,root,function(){
 | 
			
		||||
                    model.friendica_activities.self.attending="maybe";attending="maybe"})
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            MenuItem{text:qsTr("no")
 | 
			
		||||
            Action{text:qsTr("no")
 | 
			
		||||
                onTriggered: {Newsjs.attend(root.login,db,"no",newsitemobject.id,root,function(){
 | 
			
		||||
                model.friendica_activities.self.attending="no";attending="no"})}
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        MenuItem {
 | 
			
		||||
        Action {
 | 
			
		||||
            text: qsTr("Delete")
 | 
			
		||||
            onTriggered: {
 | 
			
		||||
                Newsjs.deleteNews(root.login,root.db,newsitemobject.id,newsitemobject.messagetype,root,function(reply){
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,7 @@
 | 
			
		|||
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
import QtQuick 2.0
 | 
			
		||||
import QtQuick.Controls 2.3
 | 
			
		||||
import "qrc:/js/service.js" as Service
 | 
			
		||||
import "qrc:/js/helper.js" as Helperjs
 | 
			
		||||
import "qrc:/qml/genericqml"
 | 
			
		||||
| 
						 | 
				
			
			@ -37,7 +38,7 @@ import "qrc:/qml/genericqml"
 | 
			
		|||
Rectangle{
 | 
			
		||||
    id:permissionDialog
 | 
			
		||||
    x: mm
 | 
			
		||||
    width: messageColumn.width-5*mm
 | 
			
		||||
    width: messageColumn.width-3*mm
 | 
			
		||||
    height:root.height/3
 | 
			
		||||
    function updatePerms(){
 | 
			
		||||
        for (var i=0;i<groupModel.count;i++)
 | 
			
		||||
| 
						 | 
				
			
			@ -64,6 +65,7 @@ Rectangle{
 | 
			
		|||
         x:0.5*mm
 | 
			
		||||
         y:0.5*mm
 | 
			
		||||
         text: qsTr("Friends")
 | 
			
		||||
         font.pixelSize: 2*mm
 | 
			
		||||
    }
 | 
			
		||||
    ListView {
 | 
			
		||||
          id: contactView
 | 
			
		||||
| 
						 | 
				
			
			@ -95,6 +97,7 @@ Rectangle{
 | 
			
		|||
             Text{
 | 
			
		||||
               color:"grey"
 | 
			
		||||
               text:contact.screen_name
 | 
			
		||||
               font.pixelSize: 2*mm
 | 
			
		||||
               }
 | 
			
		||||
            MouseArea{
 | 
			
		||||
                anchors.fill: parent
 | 
			
		||||
| 
						 | 
				
			
			@ -125,6 +128,7 @@ Rectangle{
 | 
			
		|||
         x:contactView.width+2*mm
 | 
			
		||||
         y:0.5*mm
 | 
			
		||||
         text: qsTr("Groups")
 | 
			
		||||
         font.pixelSize: 2*mm
 | 
			
		||||
    }
 | 
			
		||||
    ListView {
 | 
			
		||||
          id: groupView
 | 
			
		||||
| 
						 | 
				
			
			@ -156,6 +160,7 @@ Rectangle{
 | 
			
		|||
              Text{
 | 
			
		||||
                  color:"grey"
 | 
			
		||||
                  text:group.groupname
 | 
			
		||||
                  font.pixelSize: 2*mm
 | 
			
		||||
                   }
 | 
			
		||||
               MouseArea{
 | 
			
		||||
                anchors.fill: parent
 | 
			
		||||
| 
						 | 
				
			
			@ -178,8 +183,10 @@ Rectangle{
 | 
			
		|||
               else {groupstatus="neutral"}  }
 | 
			
		||||
              }
 | 
			
		||||
      }
 | 
			
		||||
      BlueButton{
 | 
			
		||||
     MButton{
 | 
			
		||||
         x:0.5*mm
 | 
			
		||||
         height: 6*mm
 | 
			
		||||
         width: 8*mm
 | 
			
		||||
         anchors.bottom: parent.bottom
 | 
			
		||||
         anchors.bottomMargin:1
 | 
			
		||||
         text:"\uf0c7"
 | 
			
		||||
| 
						 | 
				
			
			@ -190,8 +197,10 @@ Rectangle{
 | 
			
		|||
            Service.savePermissions(db,perms)
 | 
			
		||||
                   }
 | 
			
		||||
      }
 | 
			
		||||
      BlueButton{
 | 
			
		||||
      MButton{
 | 
			
		||||
         x:contactView.width+2*mm
 | 
			
		||||
         height: 6*mm
 | 
			
		||||
         width: 8*mm
 | 
			
		||||
         anchors.bottom: parent.bottom
 | 
			
		||||
         anchors.bottomMargin:1
 | 
			
		||||
         text:"\u2713"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,9 +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.7
 | 
			
		||||
import QtQuick.Controls 1.2
 | 
			
		||||
import QtQuick.Controls.Styles 1.4
 | 
			
		||||
import QtQuick 2.11
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
import QtQuick.Layouts 1.11
 | 
			
		||||
//import QtQuick.Controls.Styles 1.4
 | 
			
		||||
import "qrc:/js/smiley.js" as Smileyjs
 | 
			
		||||
import "qrc:/js/helper.js" as Helperjs
 | 
			
		||||
import "qrc:/qml/genericqml"
 | 
			
		||||
| 
						 | 
				
			
			@ -42,8 +43,10 @@ Rectangle{
 | 
			
		|||
    width: messageColumn.width-5*mm
 | 
			
		||||
    height:root.height/2
 | 
			
		||||
    
 | 
			
		||||
    BlueButton{
 | 
			
		||||
    Button{
 | 
			
		||||
       id:closeButton
 | 
			
		||||
       height: 6*mm
 | 
			
		||||
       width: 8*mm
 | 
			
		||||
       anchors.top: parent.top
 | 
			
		||||
       anchors.topMargin: 1*mm
 | 
			
		||||
       anchors.right: parent.right
 | 
			
		||||
| 
						 | 
				
			
			@ -52,34 +55,57 @@ Rectangle{
 | 
			
		|||
       onClicked:{smileyDialog.visible=false}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    TabView{
 | 
			
		||||
 | 
			
		||||
    TabBar {
 | 
			
		||||
      id: smileybar
 | 
			
		||||
      width: parent.width
 | 
			
		||||
      height: 9*mm
 | 
			
		||||
      position:TabBar.Header
 | 
			
		||||
      TabButton {
 | 
			
		||||
          text:qsTr("Unicode")
 | 
			
		||||
          font.pixelSize: 2*mm
 | 
			
		||||
      }
 | 
			
		||||
      TabButton {
 | 
			
		||||
          text:  qsTr("Standard")
 | 
			
		||||
          font.pixelSize: 2*mm
 | 
			
		||||
      }
 | 
			
		||||
      TabButton {
 | 
			
		||||
          text:  qsTr("Addon")
 | 
			
		||||
          font.pixelSize: 2*mm
 | 
			
		||||
      }
 | 
			
		||||
    
 | 
			
		||||
      TabButton {
 | 
			
		||||
          text:  qsTr("Adult")
 | 
			
		||||
          font.pixelSize: 2*mm
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    StackLayout{
 | 
			
		||||
        id:smileyTabView
 | 
			
		||||
        tabPosition: Qt.BottomEdge
 | 
			
		||||
        currentIndex: smileybar.currentIndex
 | 
			
		||||
        anchors.top: closeButton.bottom
 | 
			
		||||
        anchors.topMargin: 1*mm
 | 
			
		||||
        width: smileyDialog.width-2*mm
 | 
			
		||||
        height: smileyDialog.height-7*mm
 | 
			
		||||
        currentIndex: 0
 | 
			
		||||
        style: TabViewStyle {
 | 
			
		||||
            frameOverlap: 1
 | 
			
		||||
            tab: Rectangle {
 | 
			
		||||
               color: "white"
 | 
			
		||||
               implicitWidth: smileyTabView.width/4-2*mm
 | 
			
		||||
               implicitHeight: 4*mm
 | 
			
		||||
               Text { id: text
 | 
			
		||||
                  anchors.centerIn: parent
 | 
			
		||||
                  text: styleData.title
 | 
			
		||||
                  color: "dark grey"
 | 
			
		||||
                  font.pixelSize:2.5*mm
 | 
			
		||||
                  font.bold: styleData.selected
 | 
			
		||||
               }
 | 
			
		||||
            }
 | 
			
		||||
            frame: Rectangle { color: "light grey" }
 | 
			
		||||
            tabsAlignment:Qt.AlignHCenter
 | 
			
		||||
         }
 | 
			
		||||
//        style: TabViewStyle {
 | 
			
		||||
//            frameOverlap: 1
 | 
			
		||||
//            tab: Rectangle {
 | 
			
		||||
//               color: "white"
 | 
			
		||||
//               implicitWidth: smileyTabView.width/4-2*mm
 | 
			
		||||
//               implicitHeight: 4*mm
 | 
			
		||||
//               Text { id: text
 | 
			
		||||
//                  anchors.centerIn: parent
 | 
			
		||||
//                  text: styleData.title
 | 
			
		||||
//                  color: "dark grey"
 | 
			
		||||
//                  font.pixelSize:2.5*mm
 | 
			
		||||
//                  font.bold: styleData.selected
 | 
			
		||||
//               }
 | 
			
		||||
//            }
 | 
			
		||||
//            frame: Rectangle { color: "light grey" }
 | 
			
		||||
//            tabsAlignment:Qt.AlignHCenter
 | 
			
		||||
//         }
 | 
			
		||||
 | 
			
		||||
        Tab{
 | 
			
		||||
           title: qsTr("Unicode")
 | 
			
		||||
           Rectangle{
 | 
			
		||||
               id: htmlGridTab
 | 
			
		||||
               GridView {
 | 
			
		||||
| 
						 | 
				
			
			@ -101,9 +127,7 @@ Rectangle{
 | 
			
		|||
                   }
 | 
			
		||||
               }
 | 
			
		||||
           }
 | 
			
		||||
         }
 | 
			
		||||
      Tab{
 | 
			
		||||
        title: qsTr("Standard")
 | 
			
		||||
 | 
			
		||||
        Rectangle{
 | 
			
		||||
            id: coreGridTab
 | 
			
		||||
            GridView {
 | 
			
		||||
| 
						 | 
				
			
			@ -127,9 +151,7 @@ Rectangle{
 | 
			
		|||
                }
 | 
			
		||||
             }
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
      Tab{
 | 
			
		||||
        title: qsTr("Addon")
 | 
			
		||||
 | 
			
		||||
        Rectangle{
 | 
			
		||||
            id: addonGridTab
 | 
			
		||||
            GridView {
 | 
			
		||||
| 
						 | 
				
			
			@ -151,9 +173,8 @@ Rectangle{
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    Tab{
 | 
			
		||||
        title: qsTr("Adult")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        Rectangle{
 | 
			
		||||
            id: adultGridTab
 | 
			
		||||
            GridView {
 | 
			
		||||
| 
						 | 
				
			
			@ -175,7 +196,7 @@ Rectangle{
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
| 
						 | 
				
			
			@ -218,6 +239,4 @@ Rectangle{
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
         }
 | 
			
		||||
         
 | 
			
		||||
         
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,7 +30,7 @@
 | 
			
		|||
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
import QtQuick 2.5
 | 
			
		||||
import QtQuick.Controls 1.4
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
import "qrc:/js/helper.js" as Helperjs
 | 
			
		||||
import "qrc:/js/image.js" as Imagejs
 | 
			
		||||
import "qrc:/qml/genericqml"
 | 
			
		||||
| 
						 | 
				
			
			@ -132,9 +132,11 @@ function updateImage(){
 | 
			
		|||
//            }
 | 
			
		||||
//        }
 | 
			
		||||
        
 | 
			
		||||
        BlueButton{
 | 
			
		||||
     Button{
 | 
			
		||||
            id:closeButton
 | 
			
		||||
            height: 8*mm
 | 
			
		||||
            text:   "\uf057"
 | 
			
		||||
            font.pixelSize: 3*mm
 | 
			
		||||
            onClicked:{photoStack.pop();
 | 
			
		||||
                //imageDialog.destroy()
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -236,7 +238,7 @@ function updateImage(){
 | 
			
		|||
            source:"qrc:/images/addImage.png"
 | 
			
		||||
            MouseArea{
 | 
			
		||||
                anchors.fill: parent
 | 
			
		||||
                onClicked:{print(imagePicking)
 | 
			
		||||
                onClicked:{
 | 
			
		||||
                    imagePicking=true;
 | 
			
		||||
                    var imagePicker = Qt.createQmlObject('import QtQuick 2.0; import "qrc:/qml/genericqml";'+
 | 
			
		||||
                    osSettings.imagePickQml+'{multiple : false;onReady: {attachImageURLs.push(imageUrl);'+
 | 
			
		||||
| 
						 | 
				
			
			@ -264,10 +266,12 @@ function updateImage(){
 | 
			
		|||
 | 
			
		||||
    ListModel{id:albumModel}
 | 
			
		||||
 | 
			
		||||
    BlueButton{
 | 
			
		||||
    Button{
 | 
			
		||||
        id:uploadButton
 | 
			
		||||
        height: 8*mm
 | 
			
		||||
        x:4*mm; y:root.width/2+18*mm //40*mm
 | 
			
		||||
        text:   imageId==""?qsTr("Upload"):qsTr("Change")
 | 
			
		||||
        font.pixelSize: 3*mm
 | 
			
		||||
        onClicked:{
 | 
			
		||||
            if(album.currentText==""){Helperjs.showMessage(qsTr("Error"),qsTr(" No album name given"), imageDialog)}
 | 
			
		||||
            else if (imageId!=""){uploadBusy.running=true; updateImage()}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,7 +30,7 @@
 | 
			
		|||
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
import QtQuick 2.5
 | 
			
		||||
import QtQuick.Controls 1.4
 | 
			
		||||
import QtQuick.Controls 2.4
 | 
			
		||||
import QtQml.Models 2.1
 | 
			
		||||
import "qrc:/js/image.js" as Imagejs
 | 
			
		||||
import "qrc:/js/helper.js" as Helperjs
 | 
			
		||||
| 
						 | 
				
			
			@ -40,12 +40,13 @@ import "qrc:/qml/genericqml"
 | 
			
		|||
 | 
			
		||||
StackView{
 | 
			
		||||
    id: photoStack
 | 
			
		||||
    anchors.fill:parent
 | 
			
		||||
    //anchors.fill:parent
 | 
			
		||||
    initialItem:Rectangle {
 | 
			
		||||
    id:fotorectangle
 | 
			
		||||
    y:1
 | 
			
		||||
    width:root.width-mm
 | 
			
		||||
    height:root.height-5*mm
 | 
			
		||||
    anchors.fill:parent
 | 
			
		||||
//    y:1
 | 
			
		||||
//    width:root.width-mm
 | 
			
		||||
//    height:root.height-5*mm
 | 
			
		||||
    color: '#fff'
 | 
			
		||||
    property var newimages:[]
 | 
			
		||||
    property int currentimageno: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -141,14 +142,14 @@ StackView{
 | 
			
		|||
    function updatepic(method,type,id){
 | 
			
		||||
            if(method=="update"){
 | 
			
		||||
                Helperjs.readData(db,"imageData",login.username,function(url){
 | 
			
		||||
                photoStack.push({
 | 
			
		||||
                    item:"qrc:/qml/photoqml/ImageUploadDialog.qml",properties:{attachImageURLs:[url[0].location+url[0].filename],imageId:id,currentAlbum:url[0].album}
 | 
			
		||||
                                })
 | 
			
		||||
                photoStack.push(
 | 
			
		||||
                    "qrc:/qml/photoqml/ImageUploadDialog.qml",{"attachImageURLs":[url[0].location+url[0].filename],"imageId":id,"currentAlbum":url[0].album}
 | 
			
		||||
                                )
 | 
			
		||||
            },"id",id)}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function uploadUrls(urls){
 | 
			
		||||
        photoStack.push({item:"qrc:/qml/photoqml/ImageUploadDialog.qml",properties:{attachImageURLs:urls}})
 | 
			
		||||
        photoStack.push("qrc:/qml/photoqml/ImageUploadDialog.qml",{"attachImageURLs":urls})
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ProgressBar{
 | 
			
		||||
| 
						 | 
				
			
			@ -162,35 +163,43 @@ StackView{
 | 
			
		|||
        value: fotorectangle.currentimageno/fotorectangle.newimages.length
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    BlueButton{
 | 
			
		||||
    MButton{
 | 
			
		||||
        id:  uploadPhoto
 | 
			
		||||
        anchors.top: parent.top
 | 
			
		||||
        anchors.topMargin: 0.5*mm
 | 
			
		||||
        anchors.right:updatePhotolist.left
 | 
			
		||||
        anchors.rightMargin:mm
 | 
			
		||||
        height: 6*mm
 | 
			
		||||
        width: 8*mm
 | 
			
		||||
        text:"\uf0ee"
 | 
			
		||||
        onClicked: {print(root.imagePicking)
 | 
			
		||||
            photoStack.push({item:"qrc:/qml/photoqml/ImageUploadDialog.qml",properties:{}});
 | 
			
		||||
        onClicked: {
 | 
			
		||||
            photoStack.push("qrc:/qml/photoqml/ImageUploadDialog.qml");
 | 
			
		||||
//            var component = Qt.createComponent("qrc:/qml/photoqml/ImageUploadDialog.qml");
 | 
			
		||||
//                     var imageUpload = component.createObject(fotorectangle);
 | 
			
		||||
            }}
 | 
			
		||||
 | 
			
		||||
    BlueButton{
 | 
			
		||||
    MButton{
 | 
			
		||||
        id:  updatePhotolist
 | 
			
		||||
        anchors.top: parent.top
 | 
			
		||||
        anchors.topMargin: 0.5*mm
 | 
			
		||||
        anchors.right:phototabstatusButton.left
 | 
			
		||||
        anchors.rightMargin:mm
 | 
			
		||||
        height: 6*mm
 | 
			
		||||
        width:  8*mm
 | 
			
		||||
        text:"\uf0ed"
 | 
			
		||||
 | 
			
		||||
        Menu {
 | 
			
		||||
            id:photoupdatemenu
 | 
			
		||||
            width:40*mm
 | 
			
		||||
            MenuItem {
 | 
			
		||||
                text: qsTr("All Images")
 | 
			
		||||
                font.pixelSize: 3*mm
 | 
			
		||||
                onTriggered: {
 | 
			
		||||
                    Imagejs.requestList(root.login,root.db, false, fotostab,function(obj){fotorectangle.newimages=obj})}
 | 
			
		||||
            }
 | 
			
		||||
            MenuItem {
 | 
			
		||||
                text: qsTr("Only new")
 | 
			
		||||
                font.pixelSize: 3*mm
 | 
			
		||||
                onTriggered: {
 | 
			
		||||
                    Imagejs.requestList(root.login,root.db, true,fotostab,function(obj){fotorectangle.newimages=obj})}
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -198,17 +207,21 @@ StackView{
 | 
			
		|||
        onClicked: {photoupdatemenu.popup()}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    BlueButton{
 | 
			
		||||
    MButton{
 | 
			
		||||
        id:  phototabstatusButton
 | 
			
		||||
        anchors.top: parent.top
 | 
			
		||||
        anchors.topMargin: 0.5*mm
 | 
			
		||||
        anchors.right: parent.right
 | 
			
		||||
        anchors.rightMargin:2*mm
 | 
			
		||||
        height: 6*mm
 | 
			
		||||
        width: Math.max(10*mm,implicitWidth)
 | 
			
		||||
        text: fotostab.phototabstatus=="Images"?qsTr("Own Images"):fotostab.phototabstatus
 | 
			
		||||
        Menu {
 | 
			
		||||
            id:phototabmenu
 | 
			
		||||
            width: 40*mm
 | 
			
		||||
            MenuItem {
 | 
			
		||||
                text: qsTr("Own Images")
 | 
			
		||||
                font.pixelSize: 3*mm
 | 
			
		||||
                onTriggered: {
 | 
			
		||||
                    fotostab.phototabstatus="Images";
 | 
			
		||||
                   // phototabstatusButton.text=qsTr("Own images");
 | 
			
		||||
| 
						 | 
				
			
			@ -267,8 +280,10 @@ StackView{
 | 
			
		|||
 | 
			
		||||
    ListView { width: parent.width; height:parent.height; model: visualphotoModel.parts.browser; interactive: false }
 | 
			
		||||
 | 
			
		||||
    BlueButton {
 | 
			
		||||
    MButton {
 | 
			
		||||
        id: backButton
 | 
			
		||||
        height: 6*mm
 | 
			
		||||
        width: 8*mm
 | 
			
		||||
        text: "\uf057"
 | 
			
		||||
        x: parent.width - backButton.width - 3*mm
 | 
			
		||||
        y: -backButton.height - 4*mm
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										14
									
								
								source-android/qtquickcontrols2.conf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								source-android/qtquickcontrols2.conf
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
[Controls]
 | 
			
		||||
Style=Material
 | 
			
		||||
 | 
			
		||||
[Universal]
 | 
			
		||||
Theme=System
 | 
			
		||||
Accent=Red
 | 
			
		||||
 | 
			
		||||
[Material]
 | 
			
		||||
Theme=Light
 | 
			
		||||
Accent=LightBlue
 | 
			
		||||
Primary=BlueGrey,50
 | 
			
		||||
Background=Grey,50
 | 
			
		||||
Variant=Dense
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -1,151 +1,234 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!DOCTYPE TS>
 | 
			
		||||
<TS version="2.1" language="de">
 | 
			
		||||
<context>
 | 
			
		||||
    <name>AccountPage</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="59"/>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="370"/>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="393"/>
 | 
			
		||||
        <source>User</source>
 | 
			
		||||
        <translation>Name</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="86"/>
 | 
			
		||||
        <source>Server</source>
 | 
			
		||||
        <translation>Server</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="91"/>
 | 
			
		||||
        <source>Nickname</source>
 | 
			
		||||
        <translation>Kurzname</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="97"/>
 | 
			
		||||
        <source>Password</source>
 | 
			
		||||
        <translation>Passwort</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="102"/>
 | 
			
		||||
        <source>Image dir.</source>
 | 
			
		||||
        <translation>Bildverz.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="113"/>
 | 
			
		||||
        <source>News as</source>
 | 
			
		||||
        <translation>Anzeige</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="184"/>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="321"/>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="345"/>
 | 
			
		||||
        <source>Error</source>
 | 
			
		||||
        <translation>Fehler</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="184"/>
 | 
			
		||||
        <source>Nicknames containing @ symbol currently not supported</source>
 | 
			
		||||
        <translation>Kurznamen mit @ Zeichen werden derzeit nicht unterstützt.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="304"/>
 | 
			
		||||
        <source>Confirm</source>
 | 
			
		||||
        <translation>Bestätigen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="310"/>
 | 
			
		||||
        <source>No server given! </source>
 | 
			
		||||
        <translation>Kein Server angegeben!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="311"/>
 | 
			
		||||
        <source>No nickname given! </source>
 | 
			
		||||
        <translation>Kein Kurzname angegeben!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="312"/>
 | 
			
		||||
        <source>No password given! </source>
 | 
			
		||||
        <translation>Kein Passwort angegeben!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="313"/>
 | 
			
		||||
        <source>No image directory given!</source>
 | 
			
		||||
        <translation>Kein Verzeichnis für Bilder angegeben!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="321"/>
 | 
			
		||||
        <source>Wrong password!</source>
 | 
			
		||||
        <translation>Falsches Passwort!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="340"/>
 | 
			
		||||
        <source>Success</source>
 | 
			
		||||
        <translation>Bestätigt</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="340"/>
 | 
			
		||||
        <source>Name</source>
 | 
			
		||||
        <translation>Name</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="420"/>
 | 
			
		||||
        <source>Timeline</source>
 | 
			
		||||
        <translation>Chronologisch</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="425"/>
 | 
			
		||||
        <source>Conversations</source>
 | 
			
		||||
        <translation>Unterhaltungen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>CalendarTab</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/calendarqml/CalendarTab.qml" line="105"/>
 | 
			
		||||
        <location filename="../qml/calendarqml/CalendarTab.qml" line="109"/>
 | 
			
		||||
        <source>Events</source>
 | 
			
		||||
        <translation>Termine</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/calendarqml/CalendarTab.qml" line="109"/>
 | 
			
		||||
        <location filename="../qml/calendarqml/CalendarTab.qml" line="114"/>
 | 
			
		||||
        <source>Own Calendar</source>
 | 
			
		||||
        <translation>Eigener Kalender</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>ConfigTab</name>
 | 
			
		||||
    <name>ConfigPage</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="69"/>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="402"/>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="425"/>
 | 
			
		||||
        <source>User</source>
 | 
			
		||||
        <translation>Name</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="96"/>
 | 
			
		||||
        <source>Server</source>
 | 
			
		||||
        <translation>Server</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="101"/>
 | 
			
		||||
        <source>Nickname</source>
 | 
			
		||||
        <translation>Kurzname</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="107"/>
 | 
			
		||||
        <source>Password</source>
 | 
			
		||||
        <translation>Passwort</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="112"/>
 | 
			
		||||
        <source>Image dir.</source>
 | 
			
		||||
        <translation>Bildverz.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="118"/>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigPage.qml" line="66"/>
 | 
			
		||||
        <source>Max. News</source>
 | 
			
		||||
        <translation>Max. Nachr.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="123"/>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigPage.qml" line="143"/>
 | 
			
		||||
        <source>Sync</source>
 | 
			
		||||
        <translation>Autom. Aktualisierung</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>ConfigTab</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>User</source>
 | 
			
		||||
        <translation type="vanished">Name</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Server</source>
 | 
			
		||||
        <translation type="vanished">Server</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Nickname</source>
 | 
			
		||||
        <translation type="vanished">Kurzname</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Password</source>
 | 
			
		||||
        <translation type="vanished">Passwort</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Image dir.</source>
 | 
			
		||||
        <translation type="vanished">Bildverz.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Max. News</source>
 | 
			
		||||
        <translation type="vanished">Max. Nachr.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>News as</source>
 | 
			
		||||
        <translation>Anzeige</translation>
 | 
			
		||||
        <translation type="vanished">Anzeige</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Interval (0=None)</source>
 | 
			
		||||
        <translation type="vanished">Intervall (0=keins)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="198"/>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="350"/>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="377"/>
 | 
			
		||||
        <source>Error</source>
 | 
			
		||||
        <translation>Fehler</translation>
 | 
			
		||||
        <translation type="vanished">Fehler</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Nickname not registered at given server!</source>
 | 
			
		||||
        <translation type="vanished">Name auf der Seite nicht registriert!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="335"/>
 | 
			
		||||
        <source>Confirm</source>
 | 
			
		||||
        <translation>Bestätigen</translation>
 | 
			
		||||
        <translation type="vanished">Bestätigen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="339"/>
 | 
			
		||||
        <source>No server given! </source>
 | 
			
		||||
        <translation>Kein Server angegeben!</translation>
 | 
			
		||||
        <translation type="vanished">Kein Server angegeben!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="340"/>
 | 
			
		||||
        <source>No nickname given! </source>
 | 
			
		||||
        <translation>Kein Kurzname angegeben!</translation>
 | 
			
		||||
        <translation type="vanished">Kein Kurzname angegeben!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="341"/>
 | 
			
		||||
        <source>Nickname not registered at given server! </source>
 | 
			
		||||
        <translation>Name auf der Seite nicht registriert!</translation>
 | 
			
		||||
        <translation type="vanished">Name auf der Seite nicht registriert!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>No username given! </source>
 | 
			
		||||
        <translation type="vanished">Kein Nutzername angegeben!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="128"/>
 | 
			
		||||
        <source>Sync Interval (0=None)</source>
 | 
			
		||||
        <translation>Akt.-intervall (0=keine)</translation>
 | 
			
		||||
        <translation type="vanished">Akt.-intervall (0=keine)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="198"/>
 | 
			
		||||
        <source>Nicknames containing @ symbol currently not supported</source>
 | 
			
		||||
        <translation>Kurznamen mit @ Zeichen werden derzeit nicht unterstützt.</translation>
 | 
			
		||||
        <translation type="vanished">Kurznamen mit @ Zeichen werden derzeit nicht unterstützt.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="315"/>
 | 
			
		||||
        <source>Min.</source>
 | 
			
		||||
        <translation>Min.</translation>
 | 
			
		||||
        <translation type="vanished">Min.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="342"/>
 | 
			
		||||
        <source>No password given! </source>
 | 
			
		||||
        <translation>Kein Passwort angegeben!</translation>
 | 
			
		||||
        <translation type="vanished">Kein Passwort angegeben!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="343"/>
 | 
			
		||||
        <source>No image directory given!</source>
 | 
			
		||||
        <translation>Kein Verzeichnis für Bilder angegeben!</translation>
 | 
			
		||||
        <translation type="vanished">Kein Verzeichnis für Bilder angegeben!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="344"/>
 | 
			
		||||
        <source>No maximum news number given!</source>
 | 
			
		||||
        <translation>Maximale News-Anzahl nicht angegeben!</translation>
 | 
			
		||||
        <translation type="vanished">Maximale News-Anzahl nicht angegeben!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="350"/>
 | 
			
		||||
        <source>Wrong password!</source>
 | 
			
		||||
        <translation>Falsches Passwort!</translation>
 | 
			
		||||
        <translation type="vanished">Falsches Passwort!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="372"/>
 | 
			
		||||
        <source>Success</source>
 | 
			
		||||
        <translation>Bestätigt</translation>
 | 
			
		||||
        <translation type="vanished">Bestätigt</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="372"/>
 | 
			
		||||
        <source>Name</source>
 | 
			
		||||
        <translation>Name</translation>
 | 
			
		||||
        <translation type="vanished">Name</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="440"/>
 | 
			
		||||
        <source>Timeline</source>
 | 
			
		||||
        <translation>Chronologisch</translation>
 | 
			
		||||
        <translation type="vanished">Chronologisch</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="444"/>
 | 
			
		||||
        <source>Conversations</source>
 | 
			
		||||
        <translation>Unterhaltungen</translation>
 | 
			
		||||
        <translation type="vanished">Unterhaltungen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
| 
						 | 
				
			
			@ -197,27 +280,27 @@
 | 
			
		|||
        <translation>Kontaktanfrage</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="151"/>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="164"/>
 | 
			
		||||
        <source>Description</source>
 | 
			
		||||
        <translation>Beschreibung</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="151"/>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="164"/>
 | 
			
		||||
        <source>Location</source>
 | 
			
		||||
        <translation>Ort</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="151"/>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="164"/>
 | 
			
		||||
        <source>Posts</source>
 | 
			
		||||
        <translation>Beiträge</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="152"/>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="165"/>
 | 
			
		||||
        <source>URL</source>
 | 
			
		||||
        <translation>Profilseite</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="153"/>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="166"/>
 | 
			
		||||
        <source>Created at</source>
 | 
			
		||||
        <translation>Erstellt</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			@ -225,22 +308,22 @@
 | 
			
		|||
<context>
 | 
			
		||||
    <name>FriendsTab</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="111"/>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="80"/>
 | 
			
		||||
        <source>Me</source>
 | 
			
		||||
        <translation>Ich</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="121"/>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="84"/>
 | 
			
		||||
        <source>Friends</source>
 | 
			
		||||
        <translation>Freunde</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="202"/>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="88"/>
 | 
			
		||||
        <source>Contacts</source>
 | 
			
		||||
        <translation>Kontakte</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="257"/>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="92"/>
 | 
			
		||||
        <source>Groups</source>
 | 
			
		||||
        <translation>Gruppen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			@ -272,27 +355,27 @@
 | 
			
		|||
        <translation type="vanished">Bild</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="221"/>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="223"/>
 | 
			
		||||
        <source>Description</source>
 | 
			
		||||
        <translation>Beschreibung</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="270"/>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="273"/>
 | 
			
		||||
        <source>Upload</source>
 | 
			
		||||
        <translation>Hochladen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="270"/>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="273"/>
 | 
			
		||||
        <source>Change</source>
 | 
			
		||||
        <translation>Ändern</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="272"/>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="276"/>
 | 
			
		||||
        <source>Error</source>
 | 
			
		||||
        <translation>Fehler</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="272"/>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="276"/>
 | 
			
		||||
        <source> No album name given</source>
 | 
			
		||||
        <translation>Kein Albumname angegeben</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			@ -300,22 +383,54 @@
 | 
			
		|||
<context>
 | 
			
		||||
    <name>MessageSend</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="108"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="72"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="141"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="146"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="188"/>
 | 
			
		||||
        <source>to:</source>
 | 
			
		||||
        <translation>an:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="200"/>
 | 
			
		||||
        <source>Title (optional)</source>
 | 
			
		||||
        <translation>Überschrift (optional)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="189"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="222"/>
 | 
			
		||||
        <source>What's on your mind?</source>
 | 
			
		||||
        <translation>Woran denkst du gerade?</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="319"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="367"/>
 | 
			
		||||
        <source>Error</source>
 | 
			
		||||
        <translation>Fehler</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="189"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="319"/>
 | 
			
		||||
        <source>Only one attachment supported at the moment.
 | 
			
		||||
 Remove other attachment first!</source>
 | 
			
		||||
        <translation>Nur ein Anhang derzeit unterstützt.
 | 
			
		||||
 Lösche zuerst den anderen Anhang!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="367"/>
 | 
			
		||||
        <source>No receiver supplied!</source>
 | 
			
		||||
        <translation>Kein Empfänger angegeben!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>NewsStack</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsStack.qml" line="158"/>
 | 
			
		||||
        <source>Network Error</source>
 | 
			
		||||
        <translation>Netzwerk-Fehler</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsStack.qml" line="376"/>
 | 
			
		||||
        <source>More</source>
 | 
			
		||||
        <translation>Mehr</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>NewsTab</name>
 | 
			
		||||
| 
						 | 
				
			
			@ -324,63 +439,52 @@
 | 
			
		|||
        <translation type="vanished">Lade Profilbild für </translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="359"/>
 | 
			
		||||
        <source>More</source>
 | 
			
		||||
        <translation>Mehr</translation>
 | 
			
		||||
        <translation type="vanished">Mehr</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="221"/>
 | 
			
		||||
        <source>Timeline</source>
 | 
			
		||||
        <translation>Chronologisch</translation>
 | 
			
		||||
        <translation type="vanished">Chronologisch</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Error</source>
 | 
			
		||||
        <translation type="vanished">Fehler</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="238"/>
 | 
			
		||||
        <source>Favorites</source>
 | 
			
		||||
        <translation>Markierte News</translation>
 | 
			
		||||
        <translation type="vanished">Markierte News</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="230"/>
 | 
			
		||||
        <source>Conversations</source>
 | 
			
		||||
        <translation>Unterhaltungen</translation>
 | 
			
		||||
        <translation type="vanished">Unterhaltungen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="56"/>
 | 
			
		||||
        <source>Network Error</source>
 | 
			
		||||
        <translation>Netzwerk-Fehler</translation>
 | 
			
		||||
        <translation type="vanished">Netzwerk-Fehler</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="246"/>
 | 
			
		||||
        <source>Replies</source>
 | 
			
		||||
        <translation>Interaktionen</translation>
 | 
			
		||||
        <translation type="vanished">Interaktionen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="254"/>
 | 
			
		||||
        <source>Public timeline</source>
 | 
			
		||||
        <translation>Gemeinschaft</translation>
 | 
			
		||||
        <translation type="vanished">Gemeinschaft</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="263"/>
 | 
			
		||||
        <source>Direct Messages</source>
 | 
			
		||||
        <translation>Direktnachrichten</translation>
 | 
			
		||||
        <translation type="vanished">Direktnachrichten</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="271"/>
 | 
			
		||||
        <source>Notifications</source>
 | 
			
		||||
        <translation>Meldungen</translation>
 | 
			
		||||
        <translation type="vanished">Meldungen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="280"/>
 | 
			
		||||
        <source>Group news</source>
 | 
			
		||||
        <translation>News Gruppe</translation>
 | 
			
		||||
        <translation type="vanished">News Gruppe</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="288"/>
 | 
			
		||||
        <source>Quit</source>
 | 
			
		||||
        <translation>Schliessen</translation>
 | 
			
		||||
        <translation type="vanished">Schliessen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
| 
						 | 
				
			
			@ -396,7 +500,7 @@
 | 
			
		|||
        <translation>Quelle: </translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="106"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="105"/>
 | 
			
		||||
        <source>Direct Message</source>
 | 
			
		||||
        <translation>Direktnachricht</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			@ -411,65 +515,60 @@
 | 
			
		|||
        <translation> Kommentare</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="283"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="282"/>
 | 
			
		||||
        <source>Attending: </source>
 | 
			
		||||
        <translation>Teilnahme: </translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="405"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="411"/>
 | 
			
		||||
        <source>Reply</source>
 | 
			
		||||
        <translation>Antworten</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="413"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="420"/>
 | 
			
		||||
        <source>DM</source>
 | 
			
		||||
        <translation>Direktnachricht</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="419"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="426"/>
 | 
			
		||||
        <source>Repost</source>
 | 
			
		||||
        <translation>Teilen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="422"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="429"/>
 | 
			
		||||
        <source>Success!</source>
 | 
			
		||||
        <translation>Erledigt!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="427"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="434"/>
 | 
			
		||||
        <source>Conversation</source>
 | 
			
		||||
        <translation>Unterhaltung</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="437"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="444"/>
 | 
			
		||||
        <source>Attending</source>
 | 
			
		||||
        <translation>Teilnahme</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="439"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="453"/>
 | 
			
		||||
        <source>yes</source>
 | 
			
		||||
        <translation>ja</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="444"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="458"/>
 | 
			
		||||
        <source>maybe</source>
 | 
			
		||||
        <translation>vielleicht</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="449"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="463"/>
 | 
			
		||||
        <source>no</source>
 | 
			
		||||
        <translation>nein</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="456"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="470"/>
 | 
			
		||||
        <source>Delete</source>
 | 
			
		||||
        <translation>Löschen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="465"/>
 | 
			
		||||
        <source>Post</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>PermissionDialog</name>
 | 
			
		||||
| 
						 | 
				
			
			@ -487,28 +586,28 @@
 | 
			
		|||
<context>
 | 
			
		||||
    <name>PhotoTab</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="123"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="124"/>
 | 
			
		||||
        <source>'s images</source>
 | 
			
		||||
        <translation>s Bilder</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="188"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="195"/>
 | 
			
		||||
        <source>All Images</source>
 | 
			
		||||
        <translation>Alle Bilder</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="193"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="201"/>
 | 
			
		||||
        <source>Only new</source>
 | 
			
		||||
        <translation>Nur neue</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="207"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="211"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="218"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="223"/>
 | 
			
		||||
        <source>Own Images</source>
 | 
			
		||||
        <translation>Eigene Bilder</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="248"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="261"/>
 | 
			
		||||
        <source>More</source>
 | 
			
		||||
        <translation>Mehr</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			@ -516,222 +615,222 @@
 | 
			
		|||
<context>
 | 
			
		||||
    <name>ProfileComponent</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="60"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="61"/>
 | 
			
		||||
        <source>profile name</source>
 | 
			
		||||
        <translation>Profilname</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="61"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="62"/>
 | 
			
		||||
        <source>is default</source>
 | 
			
		||||
        <translation>Hauptprofil</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="62"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="63"/>
 | 
			
		||||
        <source>hide friends</source>
 | 
			
		||||
        <translation>Verberge Freunde</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="63"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="64"/>
 | 
			
		||||
        <source>profile photo</source>
 | 
			
		||||
        <translation>Profilbild</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="64"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="65"/>
 | 
			
		||||
        <source>profile thumb</source>
 | 
			
		||||
        <translation>Mini-Profilbild</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="65"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="66"/>
 | 
			
		||||
        <source>publish</source>
 | 
			
		||||
        <translation>öffentlich</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="66"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="67"/>
 | 
			
		||||
        <source>publish in network</source>
 | 
			
		||||
        <translation>Öffentlich im Netzwerk</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="67"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="68"/>
 | 
			
		||||
        <source>description</source>
 | 
			
		||||
        <translation>Beschreibung</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="68"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="69"/>
 | 
			
		||||
        <source>date of birth</source>
 | 
			
		||||
        <translation>Geburtstag</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="69"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="70"/>
 | 
			
		||||
        <source>address</source>
 | 
			
		||||
        <translation>Adresse</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="70"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="71"/>
 | 
			
		||||
        <source>city</source>
 | 
			
		||||
        <translation>Stadt</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="71"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="72"/>
 | 
			
		||||
        <source>region</source>
 | 
			
		||||
        <translation>Region</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="72"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="73"/>
 | 
			
		||||
        <source>postal code</source>
 | 
			
		||||
        <translation>Postleitzahl</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="73"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="74"/>
 | 
			
		||||
        <source>country</source>
 | 
			
		||||
        <translation>Land</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="74"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="75"/>
 | 
			
		||||
        <source>hometown</source>
 | 
			
		||||
        <translation>Heimatstadt</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="75"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="76"/>
 | 
			
		||||
        <source>gender</source>
 | 
			
		||||
        <translation>Geschlecht</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="76"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="77"/>
 | 
			
		||||
        <source>marital status</source>
 | 
			
		||||
        <translation>Beziehungsstatus</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="77"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="78"/>
 | 
			
		||||
        <source>married with</source>
 | 
			
		||||
        <translation>verheiratet mit</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="78"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="79"/>
 | 
			
		||||
        <source>married since</source>
 | 
			
		||||
        <translation>verheiratet seit</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="79"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="80"/>
 | 
			
		||||
        <source>sexual</source>
 | 
			
		||||
        <translation>Sex</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="80"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="81"/>
 | 
			
		||||
        <source>politics</source>
 | 
			
		||||
        <translation>Politik</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="81"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="82"/>
 | 
			
		||||
        <source>religion</source>
 | 
			
		||||
        <translation>Religion</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="82"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="83"/>
 | 
			
		||||
        <source>public keywords</source>
 | 
			
		||||
        <translation>öffentliche Schlagwörter</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="83"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="84"/>
 | 
			
		||||
        <source>private keywords</source>
 | 
			
		||||
        <translation>private Schlagwörter</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="84"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="85"/>
 | 
			
		||||
        <source>likes</source>
 | 
			
		||||
        <translation>Vorlieben</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="85"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="86"/>
 | 
			
		||||
        <source>dislikes</source>
 | 
			
		||||
        <translation>Abneigungen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="86"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="87"/>
 | 
			
		||||
        <source>about</source>
 | 
			
		||||
        <translation>über</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="87"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="88"/>
 | 
			
		||||
        <source>music</source>
 | 
			
		||||
        <translation>Musik</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="88"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="89"/>
 | 
			
		||||
        <source>book</source>
 | 
			
		||||
        <translation>Bücher</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="89"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="90"/>
 | 
			
		||||
        <source>tv</source>
 | 
			
		||||
        <translation>TV</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="90"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="91"/>
 | 
			
		||||
        <source>film</source>
 | 
			
		||||
        <translation>Filme</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="91"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="92"/>
 | 
			
		||||
        <source>interest</source>
 | 
			
		||||
        <translation>Interessen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="92"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="93"/>
 | 
			
		||||
        <source>romance</source>
 | 
			
		||||
        <translation>Liebschaften</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="93"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="94"/>
 | 
			
		||||
        <source>work</source>
 | 
			
		||||
        <translation>Arbeit</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="94"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="95"/>
 | 
			
		||||
        <source>education</source>
 | 
			
		||||
        <translation>Bildung</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="95"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="96"/>
 | 
			
		||||
        <source>social networks</source>
 | 
			
		||||
        <translation>Soziale Netzwerke</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="96"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="97"/>
 | 
			
		||||
        <source>homepage</source>
 | 
			
		||||
        <translation>Homepage</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="177"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="183"/>
 | 
			
		||||
        <source>Update</source>
 | 
			
		||||
        <translation>Aktualisieren</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="209"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="216"/>
 | 
			
		||||
        <source>profile id</source>
 | 
			
		||||
        <translation>Profil-Nummer</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="233"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="240"/>
 | 
			
		||||
        <source>Description</source>
 | 
			
		||||
        <translation>Beschreibung</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="233"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="240"/>
 | 
			
		||||
        <source>Location</source>
 | 
			
		||||
        <translation>Ort</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="233"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="240"/>
 | 
			
		||||
        <source>Posts</source>
 | 
			
		||||
        <translation>Beiträge</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="234"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="241"/>
 | 
			
		||||
        <source>URL</source>
 | 
			
		||||
        <translation>Profilseite</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="235"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="242"/>
 | 
			
		||||
        <source>Created at</source>
 | 
			
		||||
        <translation>Erstellt</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			@ -739,101 +838,183 @@
 | 
			
		|||
<context>
 | 
			
		||||
    <name>SmileyDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="82"/>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="65"/>
 | 
			
		||||
        <source>Unicode</source>
 | 
			
		||||
        <translation>Unicode</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="106"/>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="69"/>
 | 
			
		||||
        <source>Standard</source>
 | 
			
		||||
        <translation>Standard</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="132"/>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="73"/>
 | 
			
		||||
        <source>Addon</source>
 | 
			
		||||
        <translation>Addon</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="156"/>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="78"/>
 | 
			
		||||
        <source>Adult</source>
 | 
			
		||||
        <translation>XXX</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>SyncComponent</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/SyncComponent.qml" line="56"/>
 | 
			
		||||
        <source>sync</source>
 | 
			
		||||
        <translation>akt.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/SyncComponent.qml" line="75"/>
 | 
			
		||||
        <source>notify</source>
 | 
			
		||||
        <translation>benachr.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>SyncConfig</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/SyncConfig.qml" line="42"/>
 | 
			
		||||
        <source>Sync Interval (0=None)</source>
 | 
			
		||||
        <translation>Akt.-intervall (0=keine)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/SyncConfig.qml" line="75"/>
 | 
			
		||||
        <source>Min.</source>
 | 
			
		||||
        <translation>Min.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>friendiqa</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="161"/>
 | 
			
		||||
        <source>Refresh</source>
 | 
			
		||||
        <translation>Aktualisieren</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="179"/>
 | 
			
		||||
        <source>Timeline</source>
 | 
			
		||||
        <translation>Chronologisch</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="192"/>
 | 
			
		||||
        <source>Conversations</source>
 | 
			
		||||
        <translation>Unterhaltungen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="205"/>
 | 
			
		||||
        <source>Favorites</source>
 | 
			
		||||
        <translation>Markierte News</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="217"/>
 | 
			
		||||
        <source>Replies</source>
 | 
			
		||||
        <translation>Interaktionen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="231"/>
 | 
			
		||||
        <source>Public Timeline</source>
 | 
			
		||||
        <translation>öff. Timeline</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="244"/>
 | 
			
		||||
        <source>Group news</source>
 | 
			
		||||
        <translation>News Gruppe</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="257"/>
 | 
			
		||||
        <source>Search</source>
 | 
			
		||||
        <translation>Suche</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="270"/>
 | 
			
		||||
        <source>Settings</source>
 | 
			
		||||
        <translation>Einstellungen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="281"/>
 | 
			
		||||
        <source>Accounts</source>
 | 
			
		||||
        <translation>Konten</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="294"/>
 | 
			
		||||
        <source>Quit</source>
 | 
			
		||||
        <translation>Schliessen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>newsworker</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="63"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="66"/>
 | 
			
		||||
        <source>likes this.</source>
 | 
			
		||||
        <translation>mag das.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="64"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="67"/>
 | 
			
		||||
        <source>like this.</source>
 | 
			
		||||
        <translation>mögen das.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="67"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="70"/>
 | 
			
		||||
        <source>doesn't like this.</source>
 | 
			
		||||
        <translation>mag das nicht.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="68"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="71"/>
 | 
			
		||||
        <source>don't like this.</source>
 | 
			
		||||
        <translation>mögen das nicht.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="71"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="74"/>
 | 
			
		||||
        <source>will attend.</source>
 | 
			
		||||
        <translation>nehmen teil.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="72"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="75"/>
 | 
			
		||||
        <source>persons will attend.</source>
 | 
			
		||||
        <translation>Personen nehmen teil.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="75"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="78"/>
 | 
			
		||||
        <source>will not attend.</source>
 | 
			
		||||
        <translation>nimmt nicht teil.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="76"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="79"/>
 | 
			
		||||
        <source>persons will not attend.</source>
 | 
			
		||||
        <translation>Personen nehmen nicht teil.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="79"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="82"/>
 | 
			
		||||
        <source>may attend.</source>
 | 
			
		||||
        <translation>nimmt vielleicht teil.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="80"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="83"/>
 | 
			
		||||
        <source>persons may attend.</source>
 | 
			
		||||
        <translation>Personen nehmen vielleicht teil.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="84"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="87"/>
 | 
			
		||||
        <source>yes</source>
 | 
			
		||||
        <translation>ja</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="85"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="88"/>
 | 
			
		||||
        <source>no</source>
 | 
			
		||||
        <translation>nein</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="86"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="89"/>
 | 
			
		||||
        <source>maybe</source>
 | 
			
		||||
        <translation>vielleicht</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="172"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="174"/>
 | 
			
		||||
        <source>seconds</source>
 | 
			
		||||
        <translation>Sekunden</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="172"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="173"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="174"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="175"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="176"/>
 | 
			
		||||
| 
						 | 
				
			
			@ -842,51 +1023,53 @@
 | 
			
		|||
        <location filename="../js/newsworker.js" line="179"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="180"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="181"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="182"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="183"/>
 | 
			
		||||
        <source>ago</source>
 | 
			
		||||
        <translation>her</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="173"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="175"/>
 | 
			
		||||
        <source>minute</source>
 | 
			
		||||
        <translation>Minute</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="174"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="176"/>
 | 
			
		||||
        <source>minutes</source>
 | 
			
		||||
        <translation>Minuten</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="175"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="177"/>
 | 
			
		||||
        <source>hour</source>
 | 
			
		||||
        <translation>Stunde</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="176"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="178"/>
 | 
			
		||||
        <source>hours</source>
 | 
			
		||||
        <translation>Stunden</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="177"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="179"/>
 | 
			
		||||
        <source>day</source>
 | 
			
		||||
        <translation>Tag</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="178"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="180"/>
 | 
			
		||||
        <source>days</source>
 | 
			
		||||
        <translation>Tage</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="179"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="181"/>
 | 
			
		||||
        <source>month</source>
 | 
			
		||||
        <translation>Monat</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="180"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="182"/>
 | 
			
		||||
        <source>months</source>
 | 
			
		||||
        <translation>Monate</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="181"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="183"/>
 | 
			
		||||
        <source>years</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			@ -898,12 +1081,12 @@
 | 
			
		|||
        <translation type="vanished">Fehler</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/service.js" line="390"/>
 | 
			
		||||
        <location filename="../js/service.js" line="391"/>
 | 
			
		||||
        <source>Undefined Array Error</source>
 | 
			
		||||
        <translation>Antwort-Array ungültig</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/service.js" line="393"/>
 | 
			
		||||
        <location filename="../js/service.js" line="394"/>
 | 
			
		||||
        <source>JSON status Error</source>
 | 
			
		||||
        <translation>Server-Antwort: Fehler</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -1,147 +1,218 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!DOCTYPE TS>
 | 
			
		||||
<TS version="2.1" language="es">
 | 
			
		||||
<context>
 | 
			
		||||
    <name>AccountPage</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="59"/>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="370"/>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="393"/>
 | 
			
		||||
        <source>User</source>
 | 
			
		||||
        <translation>Usuario</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="86"/>
 | 
			
		||||
        <source>Server</source>
 | 
			
		||||
        <translation>Servidor</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="91"/>
 | 
			
		||||
        <source>Nickname</source>
 | 
			
		||||
        <translation>Usuario</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="97"/>
 | 
			
		||||
        <source>Password</source>
 | 
			
		||||
        <translation>Contraseña</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="102"/>
 | 
			
		||||
        <source>Image dir.</source>
 | 
			
		||||
        <translation>Dir. de imágenes</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="113"/>
 | 
			
		||||
        <source>News as</source>
 | 
			
		||||
        <translation>Noticias como</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="184"/>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="321"/>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="345"/>
 | 
			
		||||
        <source>Error</source>
 | 
			
		||||
        <translation>Error</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="184"/>
 | 
			
		||||
        <source>Nicknames containing @ symbol currently not supported</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="304"/>
 | 
			
		||||
        <source>Confirm</source>
 | 
			
		||||
        <translation>Confirmar</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="310"/>
 | 
			
		||||
        <source>No server given! </source>
 | 
			
		||||
        <translation>¡Servidor no encontrado!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="311"/>
 | 
			
		||||
        <source>No nickname given! </source>
 | 
			
		||||
        <translation>¡Usuario incorrecto!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="312"/>
 | 
			
		||||
        <source>No password given! </source>
 | 
			
		||||
        <translation>¡Contraseña incorrecta!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="313"/>
 | 
			
		||||
        <source>No image directory given!</source>
 | 
			
		||||
        <translation>¡No se ha encontrado el directorio de imágenes!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="321"/>
 | 
			
		||||
        <source>Wrong password!</source>
 | 
			
		||||
        <translation>¡Contraseña incorrecta!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="340"/>
 | 
			
		||||
        <source>Success</source>
 | 
			
		||||
        <translation>éxito!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="340"/>
 | 
			
		||||
        <source>Name</source>
 | 
			
		||||
        <translation>Nombre</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="420"/>
 | 
			
		||||
        <source>Timeline</source>
 | 
			
		||||
        <translation>Cronología</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="425"/>
 | 
			
		||||
        <source>Conversations</source>
 | 
			
		||||
        <translation>Conversaciones</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>CalendarTab</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/calendarqml/CalendarTab.qml" line="105"/>
 | 
			
		||||
        <location filename="../qml/calendarqml/CalendarTab.qml" line="109"/>
 | 
			
		||||
        <source>Events</source>
 | 
			
		||||
        <translation>Eventos</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/calendarqml/CalendarTab.qml" line="109"/>
 | 
			
		||||
        <location filename="../qml/calendarqml/CalendarTab.qml" line="114"/>
 | 
			
		||||
        <source>Own Calendar</source>
 | 
			
		||||
        <translation>Calendario propio</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>ConfigTab</name>
 | 
			
		||||
    <name>ConfigPage</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="69"/>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="402"/>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="425"/>
 | 
			
		||||
        <source>User</source>
 | 
			
		||||
        <translation>Usuario</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="96"/>
 | 
			
		||||
        <source>Server</source>
 | 
			
		||||
        <translation>Servidor</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="101"/>
 | 
			
		||||
        <source>Nickname</source>
 | 
			
		||||
        <translation>Usuario</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="107"/>
 | 
			
		||||
        <source>Password</source>
 | 
			
		||||
        <translation>Contraseña</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="112"/>
 | 
			
		||||
        <source>Image dir.</source>
 | 
			
		||||
        <translation>Dir. de imágenes</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="118"/>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigPage.qml" line="66"/>
 | 
			
		||||
        <source>Max. News</source>
 | 
			
		||||
        <translation>Nº Max. de noticias.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="123"/>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigPage.qml" line="143"/>
 | 
			
		||||
        <source>Sync</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>ConfigTab</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>User</source>
 | 
			
		||||
        <translation type="vanished">Usuario</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Server</source>
 | 
			
		||||
        <translation type="vanished">Servidor</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Nickname</source>
 | 
			
		||||
        <translation type="vanished">Usuario</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Password</source>
 | 
			
		||||
        <translation type="vanished">Contraseña</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Image dir.</source>
 | 
			
		||||
        <translation type="vanished">Dir. de imágenes</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Max. News</source>
 | 
			
		||||
        <translation type="vanished">Nº Max. de noticias.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>News as</source>
 | 
			
		||||
        <translation>Noticias como</translation>
 | 
			
		||||
        <translation type="vanished">Noticias como</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Interval (0=None)</source>
 | 
			
		||||
        <translation type="vanished">Intervalo (0=ningún)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="198"/>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="350"/>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="377"/>
 | 
			
		||||
        <source>Error</source>
 | 
			
		||||
        <translation>Error</translation>
 | 
			
		||||
        <translation type="vanished">Error</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="335"/>
 | 
			
		||||
        <source>Confirm</source>
 | 
			
		||||
        <translation>Confirmar</translation>
 | 
			
		||||
        <translation type="vanished">Confirmar</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="339"/>
 | 
			
		||||
        <source>No server given! </source>
 | 
			
		||||
        <translation>¡Servidor no encontrado!</translation>
 | 
			
		||||
        <translation type="vanished">¡Servidor no encontrado!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="340"/>
 | 
			
		||||
        <source>No nickname given! </source>
 | 
			
		||||
        <translation>¡Usuario incorrecto!</translation>
 | 
			
		||||
        <translation type="vanished">¡Usuario incorrecto!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="341"/>
 | 
			
		||||
        <source>Nickname not registered at given server! </source>
 | 
			
		||||
        <translation>¡Usuario incorrecto!</translation>
 | 
			
		||||
        <translation type="vanished">¡Usuario incorrecto!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>No username given! </source>
 | 
			
		||||
        <translation type="vanished">¡Usuario incorrecto!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="128"/>
 | 
			
		||||
        <source>Sync Interval (0=None)</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="198"/>
 | 
			
		||||
        <source>Nicknames containing @ symbol currently not supported</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="315"/>
 | 
			
		||||
        <source>Min.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="342"/>
 | 
			
		||||
        <source>No password given! </source>
 | 
			
		||||
        <translation>¡Contraseña incorrecta!</translation>
 | 
			
		||||
        <translation type="vanished">¡Contraseña incorrecta!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="343"/>
 | 
			
		||||
        <source>No image directory given!</source>
 | 
			
		||||
        <translation>¡No se ha encontrado el directorio de imágenes!</translation>
 | 
			
		||||
        <translation type="vanished">¡No se ha encontrado el directorio de imágenes!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="344"/>
 | 
			
		||||
        <source>No maximum news number given!</source>
 | 
			
		||||
        <translation>¡Nº máximo de noticias incorrecto!</translation>
 | 
			
		||||
        <translation type="vanished">¡Nº máximo de noticias incorrecto!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="350"/>
 | 
			
		||||
        <source>Wrong password!</source>
 | 
			
		||||
        <translation>¡Contraseña incorrecta!</translation>
 | 
			
		||||
        <translation type="vanished">¡Contraseña incorrecta!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="372"/>
 | 
			
		||||
        <source>Success</source>
 | 
			
		||||
        <translation>éxito!</translation>
 | 
			
		||||
        <translation type="vanished">éxito!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="372"/>
 | 
			
		||||
        <source>Name</source>
 | 
			
		||||
        <translation>Nombre</translation>
 | 
			
		||||
        <translation type="vanished">Nombre</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="440"/>
 | 
			
		||||
        <source>Timeline</source>
 | 
			
		||||
        <translation>Cronología</translation>
 | 
			
		||||
        <translation type="vanished">Cronología</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="444"/>
 | 
			
		||||
        <source>Conversations</source>
 | 
			
		||||
        <translation>Conversaciones</translation>
 | 
			
		||||
        <translation type="vanished">Conversaciones</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
| 
						 | 
				
			
			@ -193,27 +264,27 @@
 | 
			
		|||
        <translation>Conectar</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="151"/>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="164"/>
 | 
			
		||||
        <source>Description</source>
 | 
			
		||||
        <translation>Descripción</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="151"/>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="164"/>
 | 
			
		||||
        <source>Location</source>
 | 
			
		||||
        <translation>Localización</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="151"/>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="164"/>
 | 
			
		||||
        <source>Posts</source>
 | 
			
		||||
        <translation>Mensajes</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="152"/>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="165"/>
 | 
			
		||||
        <source>URL</source>
 | 
			
		||||
        <translation>URL</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="153"/>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="166"/>
 | 
			
		||||
        <source>Created at</source>
 | 
			
		||||
        <translation>Creado en</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			@ -221,22 +292,22 @@
 | 
			
		|||
<context>
 | 
			
		||||
    <name>FriendsTab</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="111"/>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="80"/>
 | 
			
		||||
        <source>Me</source>
 | 
			
		||||
        <translation>Yo</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="121"/>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="84"/>
 | 
			
		||||
        <source>Friends</source>
 | 
			
		||||
        <translation>Amigos</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="202"/>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="88"/>
 | 
			
		||||
        <source>Contacts</source>
 | 
			
		||||
        <translation>Contactos</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="257"/>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="92"/>
 | 
			
		||||
        <source>Groups</source>
 | 
			
		||||
        <translation>Grupos</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			@ -257,27 +328,27 @@
 | 
			
		|||
        <translation type="vanished">imagen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="221"/>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="223"/>
 | 
			
		||||
        <source>Description</source>
 | 
			
		||||
        <translation>Descripción</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="270"/>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="273"/>
 | 
			
		||||
        <source>Upload</source>
 | 
			
		||||
        <translation>Subir</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="270"/>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="273"/>
 | 
			
		||||
        <source>Change</source>
 | 
			
		||||
        <translation>Cambiar</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="272"/>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="276"/>
 | 
			
		||||
        <source>Error</source>
 | 
			
		||||
        <translation>Error</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="272"/>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="276"/>
 | 
			
		||||
        <source> No album name given</source>
 | 
			
		||||
        <translation>¡Nombre del álbum no encontrado!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			@ -285,22 +356,54 @@
 | 
			
		|||
<context>
 | 
			
		||||
    <name>MessageSend</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="108"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="72"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="141"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="146"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="188"/>
 | 
			
		||||
        <source>to:</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="200"/>
 | 
			
		||||
        <source>Title (optional)</source>
 | 
			
		||||
        <translation>Título (opcional)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="189"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="222"/>
 | 
			
		||||
        <source>What's on your mind?</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="319"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="367"/>
 | 
			
		||||
        <source>Error</source>
 | 
			
		||||
        <translation>Error</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="189"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="319"/>
 | 
			
		||||
        <source>Only one attachment supported at the moment.
 | 
			
		||||
 Remove other attachment first!</source>
 | 
			
		||||
        <translation>Solo se admite adjuntar un solo archivo en este momento.
 | 
			
		||||
 ¡Elimine y deje un archivo adjunto!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="367"/>
 | 
			
		||||
        <source>No receiver supplied!</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>NewsStack</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsStack.qml" line="158"/>
 | 
			
		||||
        <source>Network Error</source>
 | 
			
		||||
        <translation>Fallo de red</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsStack.qml" line="376"/>
 | 
			
		||||
        <source>More</source>
 | 
			
		||||
        <translation>Mas</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>NewsTab</name>
 | 
			
		||||
| 
						 | 
				
			
			@ -309,63 +412,48 @@
 | 
			
		|||
        <translation type="vanished">Descargar la imagen del perfil para </translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="359"/>
 | 
			
		||||
        <source>More</source>
 | 
			
		||||
        <translation>Mas</translation>
 | 
			
		||||
        <translation type="vanished">Mas</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="221"/>
 | 
			
		||||
        <source>Timeline</source>
 | 
			
		||||
        <translation>Cronología</translation>
 | 
			
		||||
        <translation type="vanished">Cronología</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Error</source>
 | 
			
		||||
        <translation type="obsolete">Error</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="238"/>
 | 
			
		||||
        <source>Favorites</source>
 | 
			
		||||
        <translation>Favoritos</translation>
 | 
			
		||||
        <translation type="vanished">Favoritos</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="230"/>
 | 
			
		||||
        <source>Conversations</source>
 | 
			
		||||
        <translation>Conversaciones</translation>
 | 
			
		||||
        <translation type="vanished">Conversaciones</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="56"/>
 | 
			
		||||
        <source>Network Error</source>
 | 
			
		||||
        <translation>Fallo de red</translation>
 | 
			
		||||
        <translation type="vanished">Fallo de red</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="246"/>
 | 
			
		||||
        <source>Replies</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="254"/>
 | 
			
		||||
        <source>Public timeline</source>
 | 
			
		||||
        <translation>Cronología pública</translation>
 | 
			
		||||
        <translation type="vanished">Cronología pública</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="263"/>
 | 
			
		||||
        <source>Direct Messages</source>
 | 
			
		||||
        <translation>Mensaje directo</translation>
 | 
			
		||||
        <translation type="vanished">Mensaje directo</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="271"/>
 | 
			
		||||
        <source>Notifications</source>
 | 
			
		||||
        <translation>Notificaciones</translation>
 | 
			
		||||
        <translation type="vanished">Notificaciones</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="280"/>
 | 
			
		||||
        <source>Group news</source>
 | 
			
		||||
        <translation>Grupos</translation>
 | 
			
		||||
        <translation type="vanished">Grupos</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="288"/>
 | 
			
		||||
        <source>Quit</source>
 | 
			
		||||
        <translation>Salida</translation>
 | 
			
		||||
        <translation type="vanished">Salida</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
| 
						 | 
				
			
			@ -381,7 +469,7 @@
 | 
			
		|||
        <translation>Fuente: </translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="106"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="105"/>
 | 
			
		||||
        <source>Direct Message</source>
 | 
			
		||||
        <translation>Mensaje directo</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			@ -396,65 +484,60 @@
 | 
			
		|||
        <translation> comentarios</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="283"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="282"/>
 | 
			
		||||
        <source>Attending: </source>
 | 
			
		||||
        <translation>Asistiendo: </translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="405"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="411"/>
 | 
			
		||||
        <source>Reply</source>
 | 
			
		||||
        <translation>Respuesta</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="413"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="420"/>
 | 
			
		||||
        <source>DM</source>
 | 
			
		||||
        <translation>Mensaje directo</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="419"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="426"/>
 | 
			
		||||
        <source>Repost</source>
 | 
			
		||||
        <translation>Volver a publicar</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="422"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="429"/>
 | 
			
		||||
        <source>Success!</source>
 | 
			
		||||
        <translation>éxito!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="427"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="434"/>
 | 
			
		||||
        <source>Conversation</source>
 | 
			
		||||
        <translation>Conversación</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="437"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="444"/>
 | 
			
		||||
        <source>Attending</source>
 | 
			
		||||
        <translation>Asistiendo</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="439"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="453"/>
 | 
			
		||||
        <source>yes</source>
 | 
			
		||||
        <translation>si</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="444"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="458"/>
 | 
			
		||||
        <source>maybe</source>
 | 
			
		||||
        <translation>quizás</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="449"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="463"/>
 | 
			
		||||
        <source>no</source>
 | 
			
		||||
        <translation>no</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="456"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="470"/>
 | 
			
		||||
        <source>Delete</source>
 | 
			
		||||
        <translation>Borrar</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="465"/>
 | 
			
		||||
        <source>Post</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>PermissionDialog</name>
 | 
			
		||||
| 
						 | 
				
			
			@ -472,28 +555,28 @@
 | 
			
		|||
<context>
 | 
			
		||||
    <name>PhotoTab</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="123"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="124"/>
 | 
			
		||||
        <source>'s images</source>
 | 
			
		||||
        <translation>s Imágenes</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="188"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="195"/>
 | 
			
		||||
        <source>All Images</source>
 | 
			
		||||
        <translation>Todas las imagenes</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="193"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="201"/>
 | 
			
		||||
        <source>Only new</source>
 | 
			
		||||
        <translation>Solo nueva</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="207"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="211"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="218"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="223"/>
 | 
			
		||||
        <source>Own Images</source>
 | 
			
		||||
        <translation>Mis imágenes</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="248"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="261"/>
 | 
			
		||||
        <source>More</source>
 | 
			
		||||
        <translation>Mas</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			@ -501,324 +584,406 @@
 | 
			
		|||
<context>
 | 
			
		||||
    <name>ProfileComponent</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="60"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="61"/>
 | 
			
		||||
        <source>profile name</source>
 | 
			
		||||
        <translation>Nombre de perfil</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="61"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="62"/>
 | 
			
		||||
        <source>is default</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="62"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="63"/>
 | 
			
		||||
        <source>hide friends</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="63"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="64"/>
 | 
			
		||||
        <source>profile photo</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="64"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="65"/>
 | 
			
		||||
        <source>profile thumb</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="65"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="66"/>
 | 
			
		||||
        <source>publish</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="66"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="67"/>
 | 
			
		||||
        <source>publish in network</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="67"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="68"/>
 | 
			
		||||
        <source>description</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="68"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="69"/>
 | 
			
		||||
        <source>date of birth</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="69"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="70"/>
 | 
			
		||||
        <source>address</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="70"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="71"/>
 | 
			
		||||
        <source>city</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="71"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="72"/>
 | 
			
		||||
        <source>region</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="72"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="73"/>
 | 
			
		||||
        <source>postal code</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="73"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="74"/>
 | 
			
		||||
        <source>country</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="74"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="75"/>
 | 
			
		||||
        <source>hometown</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="75"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="76"/>
 | 
			
		||||
        <source>gender</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="76"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="77"/>
 | 
			
		||||
        <source>marital status</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="77"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="78"/>
 | 
			
		||||
        <source>married with</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="78"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="79"/>
 | 
			
		||||
        <source>married since</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="79"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="80"/>
 | 
			
		||||
        <source>sexual</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="80"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="81"/>
 | 
			
		||||
        <source>politics</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="81"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="82"/>
 | 
			
		||||
        <source>religion</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="82"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="83"/>
 | 
			
		||||
        <source>public keywords</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="83"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="84"/>
 | 
			
		||||
        <source>private keywords</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="84"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="85"/>
 | 
			
		||||
        <source>likes</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="85"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="86"/>
 | 
			
		||||
        <source>dislikes</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="86"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="87"/>
 | 
			
		||||
        <source>about</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="87"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="88"/>
 | 
			
		||||
        <source>music</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="88"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="89"/>
 | 
			
		||||
        <source>book</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="89"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="90"/>
 | 
			
		||||
        <source>tv</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="90"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="91"/>
 | 
			
		||||
        <source>film</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="91"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="92"/>
 | 
			
		||||
        <source>interest</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="92"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="93"/>
 | 
			
		||||
        <source>romance</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="93"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="94"/>
 | 
			
		||||
        <source>work</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="94"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="95"/>
 | 
			
		||||
        <source>education</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="95"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="96"/>
 | 
			
		||||
        <source>social networks</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="96"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="97"/>
 | 
			
		||||
        <source>homepage</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="177"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="183"/>
 | 
			
		||||
        <source>Update</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="209"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="216"/>
 | 
			
		||||
        <source>profile id</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="233"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="240"/>
 | 
			
		||||
        <source>Description</source>
 | 
			
		||||
        <translation type="unfinished">Descripción</translation>
 | 
			
		||||
        <translation>Descripción</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="233"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="240"/>
 | 
			
		||||
        <source>Location</source>
 | 
			
		||||
        <translation type="unfinished">Localización</translation>
 | 
			
		||||
        <translation>Localización</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="233"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="240"/>
 | 
			
		||||
        <source>Posts</source>
 | 
			
		||||
        <translation type="unfinished">Mensajes</translation>
 | 
			
		||||
        <translation>Mensajes</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="234"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="241"/>
 | 
			
		||||
        <source>URL</source>
 | 
			
		||||
        <translation type="unfinished">URL</translation>
 | 
			
		||||
        <translation>URL</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="235"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="242"/>
 | 
			
		||||
        <source>Created at</source>
 | 
			
		||||
        <translation type="unfinished">Creado en</translation>
 | 
			
		||||
        <translation>Creado en</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>SmileyDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="82"/>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="65"/>
 | 
			
		||||
        <source>Unicode</source>
 | 
			
		||||
        <translation>Unicode</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="106"/>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="69"/>
 | 
			
		||||
        <source>Standard</source>
 | 
			
		||||
        <translation>Standard</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="132"/>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="73"/>
 | 
			
		||||
        <source>Addon</source>
 | 
			
		||||
        <translation>Addon</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="156"/>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="78"/>
 | 
			
		||||
        <source>Adult</source>
 | 
			
		||||
        <translation>XXX</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>SyncComponent</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/SyncComponent.qml" line="56"/>
 | 
			
		||||
        <source>sync</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/SyncComponent.qml" line="75"/>
 | 
			
		||||
        <source>notify</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>SyncConfig</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/SyncConfig.qml" line="42"/>
 | 
			
		||||
        <source>Sync Interval (0=None)</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/SyncConfig.qml" line="75"/>
 | 
			
		||||
        <source>Min.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>friendiqa</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="161"/>
 | 
			
		||||
        <source>Refresh</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="179"/>
 | 
			
		||||
        <source>Timeline</source>
 | 
			
		||||
        <translation>Cronología</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="192"/>
 | 
			
		||||
        <source>Conversations</source>
 | 
			
		||||
        <translation>Conversaciones</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="205"/>
 | 
			
		||||
        <source>Favorites</source>
 | 
			
		||||
        <translation>Favoritos</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="217"/>
 | 
			
		||||
        <source>Replies</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="231"/>
 | 
			
		||||
        <source>Public Timeline</source>
 | 
			
		||||
        <translation>Cronología pública</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="244"/>
 | 
			
		||||
        <source>Group news</source>
 | 
			
		||||
        <translation>Grupos</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="257"/>
 | 
			
		||||
        <source>Search</source>
 | 
			
		||||
        <translation>Busca</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="270"/>
 | 
			
		||||
        <source>Settings</source>
 | 
			
		||||
        <translation>Ajustes</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="281"/>
 | 
			
		||||
        <source>Accounts</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="294"/>
 | 
			
		||||
        <source>Quit</source>
 | 
			
		||||
        <translation>Salida</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>newsworker</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="63"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="66"/>
 | 
			
		||||
        <source>likes this.</source>
 | 
			
		||||
        <translation>le gusta esto.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="64"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="67"/>
 | 
			
		||||
        <source>like this.</source>
 | 
			
		||||
        <translation>me gusta esto.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="67"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="70"/>
 | 
			
		||||
        <source>doesn't like this.</source>
 | 
			
		||||
        <translation>no de ése.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="68"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="71"/>
 | 
			
		||||
        <source>don't like this.</source>
 | 
			
		||||
        <translation>no me gusta.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="71"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="74"/>
 | 
			
		||||
        <source>will attend.</source>
 | 
			
		||||
        <translation>asistirá.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="72"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="75"/>
 | 
			
		||||
        <source>persons will attend.</source>
 | 
			
		||||
        <translation>Personas que asistirán.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="75"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="78"/>
 | 
			
		||||
        <source>will not attend.</source>
 | 
			
		||||
        <translation>no asistirá.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="76"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="79"/>
 | 
			
		||||
        <source>persons will not attend.</source>
 | 
			
		||||
        <translation>Personas que no asistirán..</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="79"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="82"/>
 | 
			
		||||
        <source>may attend.</source>
 | 
			
		||||
        <translation>Puede asistir.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="80"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="83"/>
 | 
			
		||||
        <source>persons may attend.</source>
 | 
			
		||||
        <translation>Personas que pueden asistir.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="84"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="87"/>
 | 
			
		||||
        <source>yes</source>
 | 
			
		||||
        <translation>si</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="85"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="88"/>
 | 
			
		||||
        <source>no</source>
 | 
			
		||||
        <translation>no</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="86"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="89"/>
 | 
			
		||||
        <source>maybe</source>
 | 
			
		||||
        <translation>quizás</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="172"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="174"/>
 | 
			
		||||
        <source>seconds</source>
 | 
			
		||||
        <translation>Segundos</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="172"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="173"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="174"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="175"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="176"/>
 | 
			
		||||
| 
						 | 
				
			
			@ -827,51 +992,53 @@
 | 
			
		|||
        <location filename="../js/newsworker.js" line="179"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="180"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="181"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="182"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="183"/>
 | 
			
		||||
        <source>ago</source>
 | 
			
		||||
        <translation>hace</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="173"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="175"/>
 | 
			
		||||
        <source>minute</source>
 | 
			
		||||
        <translation>Minuto</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="174"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="176"/>
 | 
			
		||||
        <source>minutes</source>
 | 
			
		||||
        <translation>Minutos</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="175"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="177"/>
 | 
			
		||||
        <source>hour</source>
 | 
			
		||||
        <translation>Hora</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="176"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="178"/>
 | 
			
		||||
        <source>hours</source>
 | 
			
		||||
        <translation>Horas</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="177"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="179"/>
 | 
			
		||||
        <source>day</source>
 | 
			
		||||
        <translation>Dia</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="178"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="180"/>
 | 
			
		||||
        <source>days</source>
 | 
			
		||||
        <translation>Dias</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="179"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="181"/>
 | 
			
		||||
        <source>month</source>
 | 
			
		||||
        <translation>Mes</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="180"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="182"/>
 | 
			
		||||
        <source>months</source>
 | 
			
		||||
        <translation>Meses</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="181"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="183"/>
 | 
			
		||||
        <source>years</source>
 | 
			
		||||
        <translation>Años</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			@ -883,12 +1050,12 @@
 | 
			
		|||
        <translation type="obsolete">Error</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/service.js" line="390"/>
 | 
			
		||||
        <location filename="../js/service.js" line="391"/>
 | 
			
		||||
        <source>Undefined Array Error</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/service.js" line="393"/>
 | 
			
		||||
        <location filename="../js/service.js" line="394"/>
 | 
			
		||||
        <source>JSON status Error</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -1,147 +1,206 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!DOCTYPE TS>
 | 
			
		||||
<TS version="2.1" language="it">
 | 
			
		||||
<context>
 | 
			
		||||
    <name>AccountPage</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="59"/>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="370"/>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="393"/>
 | 
			
		||||
        <source>User</source>
 | 
			
		||||
        <translation>Utente</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="86"/>
 | 
			
		||||
        <source>Server</source>
 | 
			
		||||
        <translation>Server</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="91"/>
 | 
			
		||||
        <source>Nickname</source>
 | 
			
		||||
        <translation>Utente</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="97"/>
 | 
			
		||||
        <source>Password</source>
 | 
			
		||||
        <translation>Password</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="102"/>
 | 
			
		||||
        <source>Image dir.</source>
 | 
			
		||||
        <translation>Directory immagini</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="113"/>
 | 
			
		||||
        <source>News as</source>
 | 
			
		||||
        <translation>News come</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="184"/>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="321"/>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="345"/>
 | 
			
		||||
        <source>Error</source>
 | 
			
		||||
        <translation>Errore</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="184"/>
 | 
			
		||||
        <source>Nicknames containing @ symbol currently not supported</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="304"/>
 | 
			
		||||
        <source>Confirm</source>
 | 
			
		||||
        <translation>Conferma</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="310"/>
 | 
			
		||||
        <source>No server given! </source>
 | 
			
		||||
        <translation>Nessun server inserito!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="311"/>
 | 
			
		||||
        <source>No nickname given! </source>
 | 
			
		||||
        <translation>Nessun utente inserito!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="312"/>
 | 
			
		||||
        <source>No password given! </source>
 | 
			
		||||
        <translation>Nessuna password inserita!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="313"/>
 | 
			
		||||
        <source>No image directory given!</source>
 | 
			
		||||
        <translation>Nessuna directory immagini inserita!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="321"/>
 | 
			
		||||
        <source>Wrong password!</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="340"/>
 | 
			
		||||
        <source>Success</source>
 | 
			
		||||
        <translation>Ha funzionato!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="340"/>
 | 
			
		||||
        <source>Name</source>
 | 
			
		||||
        <translation>Nome</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="420"/>
 | 
			
		||||
        <source>Timeline</source>
 | 
			
		||||
        <translation>Cronologia</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/AccountPage.qml" line="425"/>
 | 
			
		||||
        <source>Conversations</source>
 | 
			
		||||
        <translation>Conversazioni</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>CalendarTab</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/calendarqml/CalendarTab.qml" line="105"/>
 | 
			
		||||
        <location filename="../qml/calendarqml/CalendarTab.qml" line="109"/>
 | 
			
		||||
        <source>Events</source>
 | 
			
		||||
        <translation>Eventi</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/calendarqml/CalendarTab.qml" line="109"/>
 | 
			
		||||
        <location filename="../qml/calendarqml/CalendarTab.qml" line="114"/>
 | 
			
		||||
        <source>Own Calendar</source>
 | 
			
		||||
        <translation>Calendario</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>ConfigTab</name>
 | 
			
		||||
    <name>ConfigPage</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="69"/>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="402"/>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="425"/>
 | 
			
		||||
        <source>User</source>
 | 
			
		||||
        <translation>Utente</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="96"/>
 | 
			
		||||
        <source>Server</source>
 | 
			
		||||
        <translation>Server</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="101"/>
 | 
			
		||||
        <source>Nickname</source>
 | 
			
		||||
        <translation>Utente</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="107"/>
 | 
			
		||||
        <source>Password</source>
 | 
			
		||||
        <translation>Password</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="112"/>
 | 
			
		||||
        <source>Image dir.</source>
 | 
			
		||||
        <translation>Directory immagini</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="118"/>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigPage.qml" line="66"/>
 | 
			
		||||
        <source>Max. News</source>
 | 
			
		||||
        <translation>Nº Max. di notizie</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="123"/>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigPage.qml" line="143"/>
 | 
			
		||||
        <source>Sync</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>ConfigTab</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>User</source>
 | 
			
		||||
        <translation type="vanished">Utente</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Server</source>
 | 
			
		||||
        <translation type="vanished">Server</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Nickname</source>
 | 
			
		||||
        <translation type="vanished">Utente</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Password</source>
 | 
			
		||||
        <translation type="vanished">Password</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Image dir.</source>
 | 
			
		||||
        <translation type="vanished">Directory immagini</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Max. News</source>
 | 
			
		||||
        <translation type="vanished">Nº Max. di notizie</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>News as</source>
 | 
			
		||||
        <translation>News come</translation>
 | 
			
		||||
        <translation type="vanished">News come</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Interval (0=None)</source>
 | 
			
		||||
        <translation type="vanished">Intervallo (0=nessuno)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="198"/>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="350"/>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="377"/>
 | 
			
		||||
        <source>Error</source>
 | 
			
		||||
        <translation>Errore</translation>
 | 
			
		||||
        <translation type="vanished">Errore</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="335"/>
 | 
			
		||||
        <source>Confirm</source>
 | 
			
		||||
        <translation>Conferma</translation>
 | 
			
		||||
        <translation type="vanished">Conferma</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="339"/>
 | 
			
		||||
        <source>No server given! </source>
 | 
			
		||||
        <translation>Nessun server inserito!</translation>
 | 
			
		||||
        <translation type="vanished">Nessun server inserito!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="340"/>
 | 
			
		||||
        <source>No nickname given! </source>
 | 
			
		||||
        <translation>Nessun utente inserito!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="341"/>
 | 
			
		||||
        <source>Nickname not registered at given server! </source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
        <translation type="vanished">Nessun utente inserito!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>No username given! </source>
 | 
			
		||||
        <translation type="vanished">Nessun utente inserito!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="128"/>
 | 
			
		||||
        <source>Sync Interval (0=None)</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="198"/>
 | 
			
		||||
        <source>Nicknames containing @ symbol currently not supported</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="315"/>
 | 
			
		||||
        <source>Min.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="342"/>
 | 
			
		||||
        <source>No password given! </source>
 | 
			
		||||
        <translation>Nessuna password inserita!</translation>
 | 
			
		||||
        <translation type="vanished">Nessuna password inserita!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="343"/>
 | 
			
		||||
        <source>No image directory given!</source>
 | 
			
		||||
        <translation>Nessuna directory immagini inserita!</translation>
 | 
			
		||||
        <translation type="vanished">Nessuna directory immagini inserita!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="344"/>
 | 
			
		||||
        <source>No maximum news number given!</source>
 | 
			
		||||
        <translation>Nessun numero massimo di news inserito!</translation>
 | 
			
		||||
        <translation type="vanished">Nessun numero massimo di news inserito!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="350"/>
 | 
			
		||||
        <source>Wrong password!</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="372"/>
 | 
			
		||||
        <source>Success</source>
 | 
			
		||||
        <translation>Ha funzionato!</translation>
 | 
			
		||||
        <translation type="vanished">Ha funzionato!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="372"/>
 | 
			
		||||
        <source>Name</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="440"/>
 | 
			
		||||
        <source>Timeline</source>
 | 
			
		||||
        <translation>Cronologia</translation>
 | 
			
		||||
        <translation type="vanished">Cronologia</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/ConfigTab.qml" line="444"/>
 | 
			
		||||
        <source>Conversations</source>
 | 
			
		||||
        <translation>Conversazioni</translation>
 | 
			
		||||
        <translation type="vanished">Conversazioni</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
| 
						 | 
				
			
			@ -193,27 +252,27 @@
 | 
			
		|||
        <translation>Connetti</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="151"/>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="164"/>
 | 
			
		||||
        <source>Description</source>
 | 
			
		||||
        <translation>Descrizione</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="151"/>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="164"/>
 | 
			
		||||
        <source>Location</source>
 | 
			
		||||
        <translation>Località</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="151"/>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="164"/>
 | 
			
		||||
        <source>Posts</source>
 | 
			
		||||
        <translation>Messaggi</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="152"/>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="165"/>
 | 
			
		||||
        <source>URL</source>
 | 
			
		||||
        <translation>URL</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="153"/>
 | 
			
		||||
        <location filename="../qml/newsqml/ContactPage.qml" line="166"/>
 | 
			
		||||
        <source>Created at</source>
 | 
			
		||||
        <translation>Creato il</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			@ -221,22 +280,22 @@
 | 
			
		|||
<context>
 | 
			
		||||
    <name>FriendsTab</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="111"/>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="80"/>
 | 
			
		||||
        <source>Me</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="121"/>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="84"/>
 | 
			
		||||
        <source>Friends</source>
 | 
			
		||||
        <translation>Amici</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="202"/>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="88"/>
 | 
			
		||||
        <source>Contacts</source>
 | 
			
		||||
        <translation>Contatti</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="257"/>
 | 
			
		||||
        <location filename="../qml/contactqml/FriendsTab.qml" line="92"/>
 | 
			
		||||
        <source>Groups</source>
 | 
			
		||||
        <translation>Gruppi</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			@ -257,27 +316,27 @@
 | 
			
		|||
        <translation type="vanished">Immagine</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="221"/>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="223"/>
 | 
			
		||||
        <source>Description</source>
 | 
			
		||||
        <translation>Descrizione</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="270"/>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="273"/>
 | 
			
		||||
        <source>Upload</source>
 | 
			
		||||
        <translation>Carica</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="270"/>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="273"/>
 | 
			
		||||
        <source>Change</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="272"/>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="276"/>
 | 
			
		||||
        <source>Error</source>
 | 
			
		||||
        <translation>Errore</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="272"/>
 | 
			
		||||
        <location filename="../qml/photoqml/ImageUploadDialog.qml" line="276"/>
 | 
			
		||||
        <source> No album name given</source>
 | 
			
		||||
        <translation>Nessun nome album inserito!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			@ -285,22 +344,54 @@
 | 
			
		|||
<context>
 | 
			
		||||
    <name>MessageSend</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="108"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="72"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="141"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="146"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="188"/>
 | 
			
		||||
        <source>to:</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="200"/>
 | 
			
		||||
        <source>Title (optional)</source>
 | 
			
		||||
        <translation>Titolo (opzionale)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="189"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="222"/>
 | 
			
		||||
        <source>What's on your mind?</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="319"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="367"/>
 | 
			
		||||
        <source>Error</source>
 | 
			
		||||
        <translation>Errore</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="189"/>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="319"/>
 | 
			
		||||
        <source>Only one attachment supported at the moment.
 | 
			
		||||
 Remove other attachment first!</source>
 | 
			
		||||
        <translation>Solo un allegato è attualmente supportato.
 | 
			
		||||
 Rimuovere prima gli altri allegati!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/MessageSend.qml" line="367"/>
 | 
			
		||||
        <source>No receiver supplied!</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>NewsStack</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsStack.qml" line="158"/>
 | 
			
		||||
        <source>Network Error</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsStack.qml" line="376"/>
 | 
			
		||||
        <source>More</source>
 | 
			
		||||
        <translation>Ancora</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>NewsTab</name>
 | 
			
		||||
| 
						 | 
				
			
			@ -309,63 +400,36 @@
 | 
			
		|||
        <translation type="vanished">Download immagine profilo per </translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="359"/>
 | 
			
		||||
        <source>More</source>
 | 
			
		||||
        <translation>Ancora</translation>
 | 
			
		||||
        <translation type="vanished">Ancora</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="221"/>
 | 
			
		||||
        <source>Timeline</source>
 | 
			
		||||
        <translation>Cronologia</translation>
 | 
			
		||||
        <translation type="vanished">Cronologia</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>Error</source>
 | 
			
		||||
        <translation type="obsolete">Errore</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="238"/>
 | 
			
		||||
        <source>Favorites</source>
 | 
			
		||||
        <translation>Favoriti</translation>
 | 
			
		||||
        <translation type="vanished">Favoriti</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="230"/>
 | 
			
		||||
        <source>Conversations</source>
 | 
			
		||||
        <translation>Conversazioni</translation>
 | 
			
		||||
        <translation type="vanished">Conversazioni</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="56"/>
 | 
			
		||||
        <source>Network Error</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="246"/>
 | 
			
		||||
        <source>Replies</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="254"/>
 | 
			
		||||
        <source>Public timeline</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="263"/>
 | 
			
		||||
        <source>Direct Messages</source>
 | 
			
		||||
        <translation>Messaggio diretto</translation>
 | 
			
		||||
        <translation type="vanished">Messaggio diretto</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="271"/>
 | 
			
		||||
        <source>Notifications</source>
 | 
			
		||||
        <translation>Notifiche</translation>
 | 
			
		||||
        <translation type="vanished">Notifiche</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="280"/>
 | 
			
		||||
        <source>Group news</source>
 | 
			
		||||
        <translation>Gruppi</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/NewsTab.qml" line="288"/>
 | 
			
		||||
        <source>Quit</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
        <translation type="vanished">Gruppi</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
| 
						 | 
				
			
			@ -381,7 +445,7 @@
 | 
			
		|||
        <translation>Codice: </translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="106"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="105"/>
 | 
			
		||||
        <source>Direct Message</source>
 | 
			
		||||
        <translation>Messaggio diretto</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			@ -396,65 +460,60 @@
 | 
			
		|||
        <translation> commenti</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="283"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="282"/>
 | 
			
		||||
        <source>Attending: </source>
 | 
			
		||||
        <translation>Attendi: </translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="405"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="411"/>
 | 
			
		||||
        <source>Reply</source>
 | 
			
		||||
        <translation>Risposta</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="413"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="420"/>
 | 
			
		||||
        <source>DM</source>
 | 
			
		||||
        <translation>Messaggio diretto</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="419"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="426"/>
 | 
			
		||||
        <source>Repost</source>
 | 
			
		||||
        <translation>Condividi</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="422"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="429"/>
 | 
			
		||||
        <source>Success!</source>
 | 
			
		||||
        <translation>Ha funzionato!</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="427"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="434"/>
 | 
			
		||||
        <source>Conversation</source>
 | 
			
		||||
        <translation>Conversazione</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="437"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="444"/>
 | 
			
		||||
        <source>Attending</source>
 | 
			
		||||
        <translation>Attendi</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="439"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="453"/>
 | 
			
		||||
        <source>yes</source>
 | 
			
		||||
        <translation>si</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="444"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="458"/>
 | 
			
		||||
        <source>maybe</source>
 | 
			
		||||
        <translation>potrebbe</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="449"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="463"/>
 | 
			
		||||
        <source>no</source>
 | 
			
		||||
        <translation>no</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="456"/>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="470"/>
 | 
			
		||||
        <source>Delete</source>
 | 
			
		||||
        <translation>Cancella</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/Newsitem.qml" line="465"/>
 | 
			
		||||
        <source>Post</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>PermissionDialog</name>
 | 
			
		||||
| 
						 | 
				
			
			@ -472,28 +531,28 @@
 | 
			
		|||
<context>
 | 
			
		||||
    <name>PhotoTab</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="123"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="124"/>
 | 
			
		||||
        <source>'s images</source>
 | 
			
		||||
        <translation> Immagini</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="188"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="195"/>
 | 
			
		||||
        <source>All Images</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="193"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="201"/>
 | 
			
		||||
        <source>Only new</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="207"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="211"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="218"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="223"/>
 | 
			
		||||
        <source>Own Images</source>
 | 
			
		||||
        <translation>Mie immagini</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="248"/>
 | 
			
		||||
        <location filename="../qml/photoqml/PhotoTab.qml" line="261"/>
 | 
			
		||||
        <source>More</source>
 | 
			
		||||
        <translation>Ancora</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			@ -501,324 +560,406 @@
 | 
			
		|||
<context>
 | 
			
		||||
    <name>ProfileComponent</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="60"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="61"/>
 | 
			
		||||
        <source>profile name</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="61"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="62"/>
 | 
			
		||||
        <source>is default</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="62"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="63"/>
 | 
			
		||||
        <source>hide friends</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="63"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="64"/>
 | 
			
		||||
        <source>profile photo</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="64"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="65"/>
 | 
			
		||||
        <source>profile thumb</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="65"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="66"/>
 | 
			
		||||
        <source>publish</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="66"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="67"/>
 | 
			
		||||
        <source>publish in network</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="67"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="68"/>
 | 
			
		||||
        <source>description</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="68"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="69"/>
 | 
			
		||||
        <source>date of birth</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="69"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="70"/>
 | 
			
		||||
        <source>address</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="70"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="71"/>
 | 
			
		||||
        <source>city</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="71"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="72"/>
 | 
			
		||||
        <source>region</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="72"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="73"/>
 | 
			
		||||
        <source>postal code</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="73"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="74"/>
 | 
			
		||||
        <source>country</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="74"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="75"/>
 | 
			
		||||
        <source>hometown</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="75"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="76"/>
 | 
			
		||||
        <source>gender</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="76"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="77"/>
 | 
			
		||||
        <source>marital status</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="77"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="78"/>
 | 
			
		||||
        <source>married with</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="78"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="79"/>
 | 
			
		||||
        <source>married since</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="79"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="80"/>
 | 
			
		||||
        <source>sexual</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="80"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="81"/>
 | 
			
		||||
        <source>politics</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="81"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="82"/>
 | 
			
		||||
        <source>religion</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="82"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="83"/>
 | 
			
		||||
        <source>public keywords</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="83"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="84"/>
 | 
			
		||||
        <source>private keywords</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="84"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="85"/>
 | 
			
		||||
        <source>likes</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="85"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="86"/>
 | 
			
		||||
        <source>dislikes</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="86"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="87"/>
 | 
			
		||||
        <source>about</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="87"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="88"/>
 | 
			
		||||
        <source>music</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="88"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="89"/>
 | 
			
		||||
        <source>book</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="89"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="90"/>
 | 
			
		||||
        <source>tv</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="90"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="91"/>
 | 
			
		||||
        <source>film</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="91"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="92"/>
 | 
			
		||||
        <source>interest</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="92"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="93"/>
 | 
			
		||||
        <source>romance</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="93"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="94"/>
 | 
			
		||||
        <source>work</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="94"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="95"/>
 | 
			
		||||
        <source>education</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="95"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="96"/>
 | 
			
		||||
        <source>social networks</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="96"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="97"/>
 | 
			
		||||
        <source>homepage</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="177"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="183"/>
 | 
			
		||||
        <source>Update</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="209"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="216"/>
 | 
			
		||||
        <source>profile id</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="233"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="240"/>
 | 
			
		||||
        <source>Description</source>
 | 
			
		||||
        <translation type="unfinished">Descrizione</translation>
 | 
			
		||||
        <translation>Descrizione</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="233"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="240"/>
 | 
			
		||||
        <source>Location</source>
 | 
			
		||||
        <translation type="unfinished">Località</translation>
 | 
			
		||||
        <translation>Località</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="233"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="240"/>
 | 
			
		||||
        <source>Posts</source>
 | 
			
		||||
        <translation type="unfinished">Messaggi</translation>
 | 
			
		||||
        <translation>Messaggi</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="234"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="241"/>
 | 
			
		||||
        <source>URL</source>
 | 
			
		||||
        <translation type="unfinished">URL</translation>
 | 
			
		||||
        <translation>URL</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="235"/>
 | 
			
		||||
        <location filename="../qml/contactqml/ProfileComponent.qml" line="242"/>
 | 
			
		||||
        <source>Created at</source>
 | 
			
		||||
        <translation type="unfinished">Creato il</translation>
 | 
			
		||||
        <translation>Creato il</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>SmileyDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="82"/>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="65"/>
 | 
			
		||||
        <source>Unicode</source>
 | 
			
		||||
        <translation>Unicode</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="106"/>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="69"/>
 | 
			
		||||
        <source>Standard</source>
 | 
			
		||||
        <translation>Standard</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="132"/>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="73"/>
 | 
			
		||||
        <source>Addon</source>
 | 
			
		||||
        <translation>Addon</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="156"/>
 | 
			
		||||
        <location filename="../qml/newsqml/SmileyDialog.qml" line="78"/>
 | 
			
		||||
        <source>Adult</source>
 | 
			
		||||
        <translation>XXX</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>SyncComponent</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/SyncComponent.qml" line="56"/>
 | 
			
		||||
        <source>sync</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/SyncComponent.qml" line="75"/>
 | 
			
		||||
        <source>notify</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>SyncConfig</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/SyncConfig.qml" line="42"/>
 | 
			
		||||
        <source>Sync Interval (0=None)</source>
 | 
			
		||||
        <translation>Intervallo (0=nessuno)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/configqml/SyncConfig.qml" line="75"/>
 | 
			
		||||
        <source>Min.</source>
 | 
			
		||||
        <translation>Min.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>friendiqa</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="161"/>
 | 
			
		||||
        <source>Refresh</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="179"/>
 | 
			
		||||
        <source>Timeline</source>
 | 
			
		||||
        <translation>Cronologia</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="192"/>
 | 
			
		||||
        <source>Conversations</source>
 | 
			
		||||
        <translation>Conversazioni</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="205"/>
 | 
			
		||||
        <source>Favorites</source>
 | 
			
		||||
        <translation>Favoriti</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="217"/>
 | 
			
		||||
        <source>Replies</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="231"/>
 | 
			
		||||
        <source>Public Timeline</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="244"/>
 | 
			
		||||
        <source>Group news</source>
 | 
			
		||||
        <translation type="unfinished">Gruppi</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="257"/>
 | 
			
		||||
        <source>Search</source>
 | 
			
		||||
        <translation>Cerca</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="270"/>
 | 
			
		||||
        <source>Settings</source>
 | 
			
		||||
        <translation>Configurazione</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="281"/>
 | 
			
		||||
        <source>Accounts</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../qml/friendiqa.qml" line="294"/>
 | 
			
		||||
        <source>Quit</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>newsworker</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="63"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="66"/>
 | 
			
		||||
        <source>likes this.</source>
 | 
			
		||||
        <translation>mi piace.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="64"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="67"/>
 | 
			
		||||
        <source>like this.</source>
 | 
			
		||||
        <translation>mi piace.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="67"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="70"/>
 | 
			
		||||
        <source>doesn't like this.</source>
 | 
			
		||||
        <translation>non mi piace.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="68"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="71"/>
 | 
			
		||||
        <source>don't like this.</source>
 | 
			
		||||
        <translation>non mi piace.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="71"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="74"/>
 | 
			
		||||
        <source>will attend.</source>
 | 
			
		||||
        <translation>attendere.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="72"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="75"/>
 | 
			
		||||
        <source>persons will attend.</source>
 | 
			
		||||
        <translation>Persone che attendono.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="75"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="78"/>
 | 
			
		||||
        <source>will not attend.</source>
 | 
			
		||||
        <translation>non aspettare.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="76"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="79"/>
 | 
			
		||||
        <source>persons will not attend.</source>
 | 
			
		||||
        <translation>Persone che non aspettano.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="79"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="82"/>
 | 
			
		||||
        <source>may attend.</source>
 | 
			
		||||
        <translation>puoi attendere.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="80"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="83"/>
 | 
			
		||||
        <source>persons may attend.</source>
 | 
			
		||||
        <translation>Persone che possono attendere.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="84"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="87"/>
 | 
			
		||||
        <source>yes</source>
 | 
			
		||||
        <translation>si</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="85"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="88"/>
 | 
			
		||||
        <source>no</source>
 | 
			
		||||
        <translation>no</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="86"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="89"/>
 | 
			
		||||
        <source>maybe</source>
 | 
			
		||||
        <translation>potrebbe</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="172"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="174"/>
 | 
			
		||||
        <source>seconds</source>
 | 
			
		||||
        <translation>secondi</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="172"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="173"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="174"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="175"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="176"/>
 | 
			
		||||
| 
						 | 
				
			
			@ -827,51 +968,53 @@
 | 
			
		|||
        <location filename="../js/newsworker.js" line="179"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="180"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="181"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="182"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="183"/>
 | 
			
		||||
        <source>ago</source>
 | 
			
		||||
        <translation>fa</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="173"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="175"/>
 | 
			
		||||
        <source>minute</source>
 | 
			
		||||
        <translation>minuti</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="174"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="176"/>
 | 
			
		||||
        <source>minutes</source>
 | 
			
		||||
        <translation>minuti</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="175"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="177"/>
 | 
			
		||||
        <source>hour</source>
 | 
			
		||||
        <translation>ora</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="176"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="178"/>
 | 
			
		||||
        <source>hours</source>
 | 
			
		||||
        <translation>ore</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="177"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="179"/>
 | 
			
		||||
        <source>day</source>
 | 
			
		||||
        <translation>giorno</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="178"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="180"/>
 | 
			
		||||
        <source>days</source>
 | 
			
		||||
        <translation>giorni</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="179"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="181"/>
 | 
			
		||||
        <source>month</source>
 | 
			
		||||
        <translation>mese</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="180"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="182"/>
 | 
			
		||||
        <source>months</source>
 | 
			
		||||
        <translation>mesi</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="181"/>
 | 
			
		||||
        <location filename="../js/newsworker.js" line="183"/>
 | 
			
		||||
        <source>years</source>
 | 
			
		||||
        <translation>anni</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			@ -883,12 +1026,12 @@
 | 
			
		|||
        <translation type="obsolete">Errore</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/service.js" line="390"/>
 | 
			
		||||
        <location filename="../js/service.js" line="391"/>
 | 
			
		||||
        <source>Undefined Array Error</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../js/service.js" line="393"/>
 | 
			
		||||
        <location filename="../js/service.js" line="394"/>
 | 
			
		||||
        <source>JSON status Error</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue