This commit is contained in:
LubuWest 2020-01-27 21:53:51 +01:00
parent 3e8585aa93
commit c1bdcbf963
48 changed files with 1333 additions and 1229 deletions

View file

@ -1,3 +1,9 @@
## v0.5.2 ##
* Redesign of news item
* Background sync for Android >8.0
* Bugfixes
## v0.5.1 ## ## v0.5.1 ##
* Videos open in full screen * Videos open in full screen
* Youtube videos open in app * Youtube videos open in app

View file

@ -1,5 +1,5 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<manifest package="org.qtproject.friendiqa" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.5.1" android:versionCode="14" android:installLocation="auto"> <manifest package="org.qtproject.friendiqa" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.5.2" android:versionCode="17" 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"> <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="singleTask" android:taskAffinity=""> <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="singleTask" android:taskAffinity="">
<intent-filter> <intent-filter>
@ -88,7 +88,8 @@
</application> </application>
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28"/> <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28"/>
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/> <supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!-- The following comment will be replaced upon deployment with default permissions based on the dependencies of the application. <!-- The following comment will be replaced upon deployment with default permissions based on the dependencies of the application.
Remove the comment if you do not require these default permissions. --> Remove the comment if you do not require these default permissions. -->
<!-- %%INSERT_PERMISSIONS --> <!-- %%INSERT_PERMISSIONS -->

View file

@ -1,15 +1,17 @@
buildscript { buildscript {
repositories { repositories {
google()
jcenter() jcenter()
mavenCentral()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:1.1.0' classpath 'com.android.tools.build:gradle:3.5.2'
} }
} }
allprojects { allprojects {
repositories { repositories {
google()
jcenter() jcenter()
maven { maven {
url "https://maven.google.com" url "https://maven.google.com"
@ -25,12 +27,16 @@ dependencies {
//apply plugin: 'android-library' //apply plugin: 'android-library'
dependencies { //dependencies {
compile 'com.android.support:support-v4:25.4.0' // compile 'com.android.support:support-v4:25.4.0'
} //}
//dependencies {
// compile 'com.android.support:support-compat:25.4.0'
//}
dependencies { dependencies {
compile 'com.android.support:support-compat:25.4.0' compile 'androidx.appcompat:appcompat:1.1.0'
} }
android { android {

View file

@ -1,4 +1,4 @@
androidBuildToolsVersion=25.0.3
androidCompileSdkVersion=27
buildDir=.build buildDir=.build
qt5AndroidDir=/home/pankraz/Qt/5.11.1/android_armv7/src/android/java android.useAndroidX=true
android.enableJetifier=true
android.enforceUniquePackageName=false

View file

@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip

0
source-android/android/gradlew vendored Normal file → Executable file
View file

View file

@ -7,8 +7,10 @@ import java.util.Map;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.Context; import android.content.Context;
import android.Manifest.permission; import android.Manifest.permission;
import android.support.v4.app.ActivityCompat; //import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat; //import android.support.v4.content.ContextCompat;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
/** An alternative Activity class for Qt applicaiton. /** An alternative Activity class for Qt applicaiton.

View file

@ -1,23 +1,69 @@
package androidnative; package androidnative;
import android.os.Build;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.app.PendingIntent;
import android.content.Context;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.util.Log; import android.util.Log;
import android.app.Notification.Builder;
import android.app.Notification;
import android.app.job.JobScheduler;
import org.qtproject.qt5.android.bindings.QtService; import org.qtproject.qt5.android.bindings.QtService;
import org.qtproject.qt5.android.QtNative;
import org.qtproject.friendiqa.R;
import androidnative.friendiqa.FriendiqaActivity;
public class AndroidNativeService extends QtService public class AndroidNativeService extends QtService
{ {
private static String TAG = "AndroidNative"; private static String TAG = "AndroidNative";
public void startQtService(Context ctx) { public void startQtService(Context ctx) {
Log.d(TAG,"Friendiqa QtService"); Log.d(TAG, "QtActivity active "+String.valueOf(QtNative.activity()!=null));
ctx.startService(new Intent(ctx, AndroidNativeService.class)); if (QtNative.activity()==null){
//Log.d(TAG,"Friendiqasync Stop existing QtService");
ctx.stopService(new Intent(ctx, AndroidNativeService.class));
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
//Log.d(TAG,"Friendiqasync startForegroundService");
ctx.startForegroundService(new Intent(ctx, AndroidNativeService.class));
} else {
ctx.startService(new Intent(ctx, AndroidNativeService.class));
}
} }
public static void stopQtService(Context ctx) { public static void stopQtService(Context ctx) {
Log.d(TAG,"Friendiqa QtServiceStop"); //Log.d(TAG,"Friendiqasync QtServiceStop");
ctx.stopService(new Intent(ctx, AndroidNativeService.class)); ctx.stopService(new Intent(ctx, AndroidNativeService.class));
} }
@Override
public void onCreate()
{
Context context;
context = this.getApplicationContext();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Intent intent = new Intent(context,FriendiqaActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
String CHANNEL_ID = "channel_02";
NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
"Sync Channel",
NotificationManager.IMPORTANCE_DEFAULT);
channel.setSound(null,null);
((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(channel);
//Log.d(TAG,"Friendiqa onCreate Notification");
Notification notification = new Notification.Builder(context,CHANNEL_ID)
.setSmallIcon(R.drawable.friendiqanotification)
.setContentTitle("Friendiqa")
.setContentText("Background Sync")
.setContentIntent(pendingIntent).build();
startForeground(1, notification);}
JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.cancel(1);
super.onCreate();
}
} }

View file

@ -11,8 +11,10 @@ import android.content.ComponentName;
import android.app.job.JobScheduler; import android.app.job.JobScheduler;
import android.app.job.JobInfo; import android.app.job.JobInfo;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.support.v4.app.NotificationCompat; import android.app.NotificationChannel;
import android.support.v4.app.NotificationManagerCompat; import android.app.NotificationManager;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import org.qtproject.qt5.android.QtNative; import org.qtproject.qt5.android.QtNative;
import androidnative.friendiqa.FriendiqaService; import androidnative.friendiqa.FriendiqaService;
import androidnative.friendiqa.FriendiqaStopService; import androidnative.friendiqa.FriendiqaStopService;
@ -120,32 +122,46 @@ public class Util {
final String textTitle = (String) message.get("title"); final String textTitle = (String) message.get("title");
final String textContent = (String) message.get("message"); final String textContent = (String) message.get("message");
final int notificationId = (int) message.get("id"); final int notificationId = (int) message.get("id");
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.friendiqanotification) NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
.setContentIntent(pendingIntent)
.setContentTitle(textTitle)
.setContentText(textContent)
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(textContent))
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setAutoCancel(true);
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
notificationManager.notify(notificationId, builder.build()); final String CHANNEL_ID = "channel_01";
NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
"Channel for Friendiqa News",
NotificationManagerCompat.IMPORTANCE_LOW);
notificationManager.createNotificationChannel(channel);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context,CHANNEL_ID)
.setSmallIcon(R.drawable.friendiqanotification)
.setContentIntent(pendingIntent)
.setContentTitle(textTitle)
.setContentText(textContent)
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(textContent))
.setAutoCancel(true);
notificationManager.notify(notificationId, builder.build());
} else {
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);
notificationManager.notify(notificationId, builder.build());
}
} }
static void setSchedule(Map message) { static void setSchedule(Map message) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
return; return;
} }
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) {
return;
}
//Log.d(TAG,"Friendiqa schedule Androidnative service");
final Integer value = (Integer) message.get("value"); final Integer value = (Integer) message.get("value");
//final Activity activity = QtNative.activity();
//final Service service = QtNative.service();
//final int JOB_ID = 1; //final int JOB_ID = 1;
final int ONE_MIN = 60 * 1000; final int ONE_MIN = 60 * 1000;
Context context; Context context;
@ -155,34 +171,49 @@ public class Util {
} else { } else {
context = QtNative.activity().getApplicationContext(); context = QtNative.activity().getApplicationContext();
} }
ComponentName component = new ComponentName(context, FriendiqaService.class); if (value==0){
JobInfo.Builder builder = new JobInfo.Builder(2, component) JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
// schedule it to run any time between 1 - 5 minutes jobScheduler.cancelAll();
.setMinimumLatency(value * ONE_MIN) //Log.d(TAG,"Friendiqasync deleting Androidnative jobscheduler");
.setOverrideDeadline((value + 5)*ONE_MIN) } else {
//.setPeriodic(value * ONE_MIN) //Log.d(TAG,"Friendiqasync schedule Androidnative jobscheduler");
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); ComponentName component = new ComponentName(context, FriendiqaService.class);
JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(builder.build()); //Log.d(TAG,"Jobinfolist size " + String.valueOf(jobScheduler.getAllPendingJobs().size()));
if (jobScheduler.getAllPendingJobs().size()==0){
if (QtNative.service() != null){ JobInfo.Builder builder = new JobInfo.Builder(2, component)
//Log.d(TAG,"Schedule Stopping Friendiqa Androidnative service"); .setPeriodic(value * ONE_MIN)
ComponentName componentStopper = new ComponentName(context, FriendiqaStopService.class); .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
JobInfo.Builder stopbuilder = new JobInfo.Builder(1, componentStopper) .setPersisted(true)
.setMinimumLatency(50) .setPrefetch(true);
.setOverrideDeadline(100); //Log.d(TAG,"Friendiqa schedule Androidnative sync schedule"+ (value * ONE_MIN));
jobScheduler.schedule(builder.build());
} else {
for ( JobInfo jobInfo : jobScheduler.getAllPendingJobs() ) {
//Log.d(TAG,"Jobinfo current interval " + String.valueOf(jobInfo.getIntervalMillis ()));
if (jobInfo.getIntervalMillis ()!=(value * ONE_MIN)){
JobInfo.Builder builder = new JobInfo.Builder(2, component)
.setPeriodic(value * ONE_MIN)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setPersisted(true)
.setPrefetch(true);
//Log.d(TAG,"Friendiqa schedule Androidnative sync schedule"+ (value * ONE_MIN));
jobScheduler.schedule(builder.build());
}
}
}
//Log.d(TAG,"Active service " + String.valueOf(QtNative.service()!=null));
if (QtNative.service() != null){
//Log.d(TAG,"Schedule Stopping Friendiqa Androidnative service");
ComponentName componentStopper = new ComponentName(context, FriendiqaStopService.class);
JobInfo.Builder stopbuilder = new JobInfo.Builder(1, componentStopper)
.setMinimumLatency(50)
.setOverrideDeadline(100);
JobScheduler jobStopScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); JobScheduler jobStopScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobStopScheduler.schedule(stopbuilder.build()); jobStopScheduler.schedule(stopbuilder.build());
}
//AndroidNativeService.stopQtService(context);
} }
//context.stopService(new Intent(context, AndroidNativeService.class)); //context.stopService(new Intent(context, AndroidNativeService.class));
} }
/**static void stopService(Map message){
this.stopService(new Intent(this, AndroidNativeService.class));
}
**/
} }

View file

@ -77,3 +77,9 @@ contains(ANDROID_TARGET_ARCH,armeabi-v7a) {
$$PWD/android/libcrypto_1_1.so \ $$PWD/android/libcrypto_1_1.so \
$$PWD/android/libssl_1_1.so $$PWD/android/libssl_1_1.so
} }
contains(ANDROID_TARGET_ARCH,arm64-v8a) {
ANDROID_EXTRA_LIBS = \
/home/pankraz/ownCloud/clientsync/Friendiqa/v0.5.2/source-android/../../../../../git/android_openssl/arm64/libcrypto_1_1.so \
$$PWD/../../../../../git/android_openssl/arm64/libssl_1_1.so
}

View file

@ -1 +1 @@
./../source-linux/images/ ../source-linux/images

View file

@ -1 +1 @@
./../source-linux/js/ ../source-linux/js

View file

@ -1 +1 @@
./../../source-linux/qml/calendarqml/ ../../source-linux/qml/calendarqml

View file

@ -1 +1 @@
./../../source-linux/qml/configqml/ ../../source-linux/qml/configqml

View file

@ -1 +1 @@
./../../source-linux/qml/contactqml/ ../../source-linux/qml/contactqml

View file

@ -31,14 +31,14 @@
import QtQuick 2.5 import QtQuick 2.5
import QtQuick.LocalStorage 2.0 import QtQuick.LocalStorage 2.0
import QtQuick.Window 2.13 import QtQuick.Window 2.0
import QtQuick.Controls 2.4 import QtQuick.Controls 2.4
import QtQuick.Layouts 1.11 import QtQuick.Layouts 1.11
import "qrc:/js/news.js" as Newsjs import "qrc:/js/news.js" as Newsjs
import "qrc:/js/service.js" as Service import "qrc:/js/service.js" as Service
StackView{
StackView{
id:root id:root
property QtObject osSettings: {var tmp=Qt.createComponent("qrc:/qml/configqml/OSSettingsAndroid.qml");return tmp.createObject(root)} property QtObject osSettings: {var tmp=Qt.createComponent("qrc:/qml/configqml/OSSettingsAndroid.qml");return tmp.createObject(root)}
width: osSettings.appWidth width: osSettings.appWidth
@ -107,7 +107,6 @@ StackView{
Keys.onReleased: { Keys.onReleased: {
if (event.key === osSettings.backKey) { if (event.key === osSettings.backKey) {
if (rootstack.currentIndex==0){ if (rootstack.currentIndex==0){
newstab.active=true; newstab.active=true;
if (newstab.newstabstatus!=login.newsViewType){ if (newstab.newstabstatus!=login.newsViewType){
@ -120,6 +119,7 @@ StackView{
newsSignal(dbnews) newsSignal(dbnews)
})} })}
} }
else if (newstab.conversation.length>0){newstab.conversation=[]} else if (newstab.conversation.length>0){newstab.conversation=[]}
else if (root.depth>1){root.pop()} else if (root.depth>1){root.pop()}
else{Service.cleanNews(root.db,function(){ else{Service.cleanNews(root.db,function(){
@ -161,10 +161,10 @@ StackView{
anchors.fill: parent anchors.fill: parent
onClicked:{ onClicked:{
leftDrawer.close(); leftDrawer.close();
newstypeSignal("refresh") // newstypeSignal("refresh")
// updatenews.setDatabase(); updatenews.setDatabase();
// updatenews.login(); updatenews.login();
// updatenews.startsync(); updatenews.startsync();
} }
} }
} }
@ -308,6 +308,8 @@ StackView{
Item{ Item{
id:rootStackItem id:rootStackItem
width:parent.width
height: parent.height
//anchors.fill:parent //anchors.fill:parent
states: State { states: State {
name: "fullscreen"; name: "fullscreen";
@ -389,10 +391,10 @@ StackView{
} }
} }
Component.onCompleted: {
Component.onCompleted: { forceActiveFocus();
forceActiveFocus();
Service.readGlobaloptions(db,function(go){globaloptions=go}) Service.readGlobaloptions(db,function(go){globaloptions=go})
//print(xhr.networktype());
if(osSettings.osType=="Android"){ if(osSettings.osType=="Android"){
var component = Qt.createComponent("qrc:/qml/genericqml/IntentReceiver.qml"); var component = Qt.createComponent("qrc:/qml/genericqml/IntentReceiver.qml");
var IntentReceiverQml = component.createObject(root); var IntentReceiverQml = component.createObject(root);

View file

@ -1 +1 @@
./../../source-linux/qml/genericqml/ ../../source-linux/qml/genericqml

View file

@ -1 +1 @@
./../../source-linux/qml/newsqml/ ../../source-linux/qml/newsqml

View file

@ -1 +1 @@
./../../source-linux/qml/photoqml/ ../../source-linux/qml/photoqml

1
source-android/translations Symbolic link
View file

@ -0,0 +1 @@
../source-linux/translations

View file

@ -228,7 +228,7 @@
<file>images/smileys/adult/finger.gif</file> <file>images/smileys/adult/finger.gif</file>
<file>images/smileys/adult/sperm.gif</file> <file>images/smileys/adult/sperm.gif</file>
<file>images/smileys/adult/tits.gif</file> <file>images/smileys/adult/tits.gif</file>
<file>images/addImage.png</file> <file>images/addImage.png</file>
<file>common/filesystem.cpp</file> <file>common/filesystem.cpp</file>
<file>common/filesystem.h</file> <file>common/filesystem.h</file>
<file>common/friendiqa.cpp</file> <file>common/friendiqa.cpp</file>
@ -236,5 +236,6 @@
<file>common/uploadableimage.h</file> <file>common/uploadableimage.h</file>
<file>common/xhr.cpp</file> <file>common/xhr.cpp</file>
<file>common/xhr.h</file> <file>common/xhr.h</file>
<file>qml/newsqml/MoreComments.qml</file>
</qresource> </qresource>
</RCC> </RCC>

View file

@ -123,13 +123,19 @@ void UPDATENEWS::login()
notifylist.append(syncquery.value(0).toString()); notifylist.append(syncquery.value(0).toString());
//qDebug() << " notify " << syncquery.value(0).toString() << " " <<syncquery.value(1).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); QSqlQuery synctimequery("SELECT * FROM globaloptions WHERE k='lastsync'",m_db);
//qDebug() << "size " << notifyquery.size(); if (synctimequery.next()){
// while (notifyquery.next()){ QSqlQuery synctimequery2("UPDATE globaloptions SET v='"+QString::number(QDateTime::currentSecsSinceEpoch()) + "' WHERE k = 'lastsync'",m_db);
// notifylist.append(syncquery.value(0).toString()); if(!(synctimequery2.exec())) {qDebug()<<synctimequery2.lastError();}
// qDebug() << " notify " << syncquery.value(0).toString(); qDebug() << " synctimequery ";
//} } else {
qDebug() << "INSERT INTO globaloptions(k,v) VALUES('lastsync','"+QString::number(QDateTime::currentSecsSinceEpoch()) + "'";
QSqlQuery synctimequery3("INSERT INTO globaloptions(k,v) VALUES('lastsync','"+QString::number(QDateTime::currentSecsSinceEpoch()) + "')",m_db);
if(!(synctimequery3.exec())) {qDebug()<<synctimequery3.lastError();}
}
} }
void UPDATENEWS::startsync() void UPDATENEWS::startsync()
@ -242,107 +248,112 @@ void UPDATENEWS::store(QByteArray serverreply,QString apiname)
if (news.isArray()){ if (news.isArray()){
for (int i=0; i < news.array().count();i++){ for (int i=0; i < news.array().count();i++){
QJsonValue newsitem=news[i]; QJsonValue newsitem=news[i];
if (apiname=="/api/friendica/notifications"){ try{
QSqlQuery testquery("SELECT status_id FROM news WHERE status_id=" + QString::number(newsitem["id"].toInt()) + " AND messagetype=2 AND username='"+ username +"'",m_db); if (apiname=="/api/friendica/notifications"){
if (testquery.first()) {continue;} 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++){ QSqlQuery query(m_db);
dislikeArray.append(newsitem["friendica_activities"]["dislike"][b]["url"].toString()); 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);
for (int c=0; c < newsitem["friendica_activities"]["attendyes"].toArray().count();c++){ query.bindValue(1,"0");
attendyesArray.append(newsitem["friendica_activities"]["attendyes"][c]["url"].toString()); query.bindValue(2, newsitem["text"].toString().toUtf8().toBase64());
} QString sourcedate=newsitem["created_at"].toString();
for (int d=0; d < newsitem["friendica_activities"]["attendno"].toArray().count();d++){ QString formateddate=sourcedate.mid(0,3)+", "+sourcedate.mid(8,3)+sourcedate.mid(4,3)+sourcedate.mid(25,5)+sourcedate.mid(10,15);
attendnoArray.append(newsitem["friendica_activities"]["attendno"][d]["url"].toString()); 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());}
for (int e = 0; e < newsitem["friendica_activities"]["attendmaybe"].toArray().count();e++){ query.bindValue(5,newsitem["source"]);
attendmaybeArray.append(newsitem["friendica_activities"]["attendmaybe"][e]["url"].toString()); 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"]);
QJsonArray friendica_activities; friendica_activities={likeArray,dislikeArray,attendyesArray,attendnoArray,attendmaybeArray}; query.bindValue( 9, newsitem["favorited"].toInt());
QJsonDocument activities; activities.setArray(friendica_activities); query.bindValue(10, newsitem["user"]["id"].toInt());
query.bindValue(13,activities.toJson(QJsonDocument::Compact).toBase64()); query.bindValue(11, newsitem["statusnet_html"].toString().toUtf8().toBase64());
query.bindValue(14,"[]"); 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){ if (newsitem["attachments"]!=QJsonValue::Undefined){
query.bindValue(15, QJsonDocument(newsitem["attachments"].toArray()).toJson(QJsonDocument::Compact).toBase64()); query.bindValue(15, QJsonDocument(newsitem["attachments"].toArray()).toJson(QJsonDocument::Compact).toBase64());
}else { }else {
query.bindValue(15, ""); 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 (newsitem["friendica_author"]!=QJsonValue::Undefined){
if(notifylist.contains("notify_Replies")){ query.bindValue(16, newsitem["friendica_author"]["url"]);
alarm.notify("Replies: "+newsitem["user"]["name"].toString(),newsitem["text"].toString(),1); }else {
query.bindValue(16, newsitem["user"]["url"]);
}
if (apiname=="/api/statuses/replies"){
query.bindValue(1,"3");
} }
} if (apiname == "/api/direct_messages/all"){
if (apiname=="/api/direct_messages/all"){ query.bindValue(1,"1");
if(notifylist.contains("notify_DirectMessages")){ query.bindValue(5,"Friendica");
alarm.notify("DirectMessage: "+newsitem["sender"]["name"].toString(),newsitem["text"].toString(),2); 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"){
if (apiname=="/api/friendica/notifications"){ query.bindValue(1,"2");
if(notifylist.contains("notify_Notifications")){ query.bindValue(3,QDateTime::fromString(newsitem["date"].toString(),"yyyy-MM-dd hh:mm:ss").toMSecsSinceEpoch());
alarm.notify("Notification: "+newsitem["name"].toString(),newsitem["text"].toString(),3); 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);
}
}
}catch(...){
qDebug() << "Friendiqasync Error inserting news" << newsitem["text"].toString() << " " << newsitem.toString();
} }
} }
QList<QJsonValue> newcontacts=findNewContacts(news); QList<QJsonValue> newcontacts=findNewContacts(news);
@ -409,12 +420,23 @@ QList <QJsonValue> UPDATENEWS::findNewContacts(QJsonDocument news){
for (int i=0; i<news.array().count();i++){ for (int i=0; i<news.array().count();i++){
//main contacts //main contacts
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))){ if (news[i].toObject().contains("sender") ){
if(imageurls.contains(news[i]["sender"]["profile_image_url"].toString().section('?',0,0)) || newcontactimagelinks.contains(news[i]["sender"]["profile_image_url"].toString().section('?',0,0))){
}
else{
newcontacts.append(news[i]["sender"]);
newcontactimagelinks.append(news[i]["sender"]["profile_image_url"].toString().section('?',0,0));
newcontactnames.append(news[i]["sender"]["screen_name"].toString());
}
}
if (news[i].toObject().contains("user") ){
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().section('?',0,0));
newcontactnames.append(news[i]["user"]["screen_name"].toString());
} }
else{
newcontacts.append(news[i]["user"]);
newcontactimagelinks.append(news[i]["user"]["profile_image_url"].toString().section('?',0,0));
newcontactnames.append(news[i]["user"]["screen_name"].toString());
} }
//like/dislike contacts //like/dislike contacts
if (news[i].toObject().contains("friendica_activities") ){ if (news[i].toObject().contains("friendica_activities") ){
@ -457,86 +479,90 @@ void UPDATENEWS::updateContacts(QList<QJsonValue> contacts){
for (int i=0; i < contacts.count();i++){ for (int i=0; i < contacts.count();i++){
QJsonValue contact=contacts[i]; QJsonValue contact=contacts[i];
QSqlQuery query(m_db); QSqlQuery query(m_db);
//qDebug() << "updatecontact " << contact["screen_name"]; try{
QSqlQuery testquery("SELECT url FROM contacts WHERE username='"+ username +"' AND url='" + contact["url"].toString() +"'",m_db); //qDebug() << "updatecontact " << contact["screen_name"];
if (testquery.first()){ QSqlQuery testquery("SELECT url FROM contacts WHERE username='"+ username +"' AND url='" + contact["url"].toString() +"'",m_db);
query.prepare("UPDATE contacts SET id=?, name=?, screen_name=?, location=?,imageAge=?," if (testquery.first()){
"profile_image_url=?, description=?, protected=?, followers_count=?," query.prepare("UPDATE contacts SET id=?, name=?, screen_name=?, location=?,imageAge=?,"
"friends_count=?, created_at=?, favourites_count=?, utc_offset=?, time_zone=?, statuses_count=?," "profile_image_url=?, description=?, protected=?, followers_count=?,"
"following=?, verified=?, statusnet_blocking=?, notifications=?, statusnet_profile_url=?, cid=?, network=?, timestamp=? " "friends_count=?, created_at=?, favourites_count=?, utc_offset=?, time_zone=?, statuses_count=?,"
" WHERE username='"+ username +"' AND url='" + contact["url"].toString() +"'"); "following=?, verified=?, statusnet_blocking=?, notifications=?, statusnet_profile_url=?, cid=?, network=?, timestamp=? "
query.bindValue(0, contact["id"].toInt()); " WHERE username='"+ username +"' AND url='" + contact["url"].toString() +"'");
query.bindValue(1, contact["name"].toString().toUtf8().toBase64()); query.bindValue(0, contact["id"].toInt());
query.bindValue(2, contact["screen_name"]); query.bindValue(1, contact["name"].toString().toUtf8().toBase64());
query.bindValue(3, contact["location"]); query.bindValue(2, contact["screen_name"]);
query.bindValue(4, currentTime); query.bindValue(3, contact["location"]);
query.bindValue(5, contact["profile_image_url"].toString().section('?',0,0)); query.bindValue(4, currentTime);
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));
query.bindValue(7,contact["protected"].toBool()); if(contact["description"].isNull() ){query.bindValue(6,"");}else{query.bindValue(6, contact["description"].toString().toUtf8().toBase64());}
query.bindValue(8,contact["followers_count"].toInt()); query.bindValue(7,contact["protected"].toBool());
query.bindValue(9,contact["friends_count"].toInt()); query.bindValue(8,contact["followers_count"].toInt());
QString sourcedate=contact["created_at"].toString(); query.bindValue(9,contact["friends_count"].toInt());
QString formateddate=sourcedate.mid(0,3)+", "+sourcedate.mid(8,3)+sourcedate.mid(4,3)+sourcedate.mid(25,5)+sourcedate.mid(10,15); QString sourcedate=contact["created_at"].toString();
query.bindValue(10,QDateTime::fromString(formateddate,Qt::RFC2822Date).toMSecsSinceEpoch() ); QString formateddate=sourcedate.mid(0,3)+", "+sourcedate.mid(8,3)+sourcedate.mid(4,3)+sourcedate.mid(25,5)+sourcedate.mid(10,15);
query.bindValue(11,contact["favorites_count"].toInt()); query.bindValue(10,QDateTime::fromString(formateddate,Qt::RFC2822Date).toMSecsSinceEpoch() );
query.bindValue(12,contact["utc_offset"].toInt()); query.bindValue(11,contact["favorites_count"].toInt());
query.bindValue(13,contact["time_zone"].toString()); query.bindValue(12,contact["utc_offset"].toInt());
query.bindValue(14,contact["statuses_count"].toInt()); query.bindValue(13,contact["time_zone"].toString());
query.bindValue(15,contact["following"].toBool()); query.bindValue(14,contact["statuses_count"].toInt());
query.bindValue(16,contact["verfied"].toBool()); query.bindValue(15,contact["following"].toBool());
query.bindValue(17,contact["statusnet_blocking"].toBool()); query.bindValue(16,contact["verfied"].toBool());
query.bindValue(18,contact["notifications"].toBool()); query.bindValue(17,contact["statusnet_blocking"].toBool());
query.bindValue(19,contact["statusnet_profile_url"]); query.bindValue(18,contact["notifications"].toBool());
query.bindValue(20,contact["cid"].toInt()); query.bindValue(19,contact["statusnet_profile_url"]);
query.bindValue(21,contact["network"]); query.bindValue(20,contact["cid"].toInt());
qint64 timestamp=0; query.bindValue(21,contact["network"]);
QString timestamphelper=contact["profile_image_url"].toString(); qint64 timestamp=0;
try {timestamp=timestamphelper.mid(timestamphelper.indexOf("?ts")+4,timestamphelper.length()).toUInt();} catch(...){} QString timestamphelper=contact["profile_image_url"].toString();
query.bindValue(22,timestamp); try {timestamp=timestamphelper.mid(timestamphelper.indexOf("?ts")+4,timestamphelper.length()).toUInt();} catch(...){}
query.bindValue(22,timestamp);
}
else{
query.prepare("INSERT INTO contacts (username, id, name, screen_name, location,imageAge,"
"profile_image_url, description, profile_image, url, protected, followers_count,"
"friends_count, created_at, favourites_count, utc_offset, time_zone, statuses_count,"
"following, verified, statusnet_blocking, notifications, statusnet_profile_url, cid, network, isFriend, timestamp)"
"VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
query.bindValue(0,username);
query.bindValue(1, contact["id"].toInt());
query.bindValue(2, contact["name"].toString().toUtf8().toBase64());
query.bindValue(3, contact["screen_name"]);
query.bindValue(4, contact["location"]);
query.bindValue(5, currentTime);
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());
query.bindValue(11,contact["followers_count"].toInt());
query.bindValue(12,contact["friends_count"].toInt());
QString sourcedate=contact["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(13,QDateTime::fromString(formateddate,Qt::RFC2822Date).toMSecsSinceEpoch() );
query.bindValue(14,contact["favorites_count"].toInt());
query.bindValue(15,contact["utc_offset"].toInt());
query.bindValue(16,contact["time_zone"].toString());
query.bindValue(17,contact["statuses_count"].toInt());
query.bindValue(18,contact["following"].toBool());
query.bindValue(19,contact["verfied"].toBool());
query.bindValue(20,contact["statusnet_blocking"].toBool());
query.bindValue(21,contact["notifications"].toBool());
query.bindValue(22,contact["statusnet_profile_url"]);
query.bindValue(23,contact["cid"].toInt());
query.bindValue(24,contact["network"]);
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(...){}
query.bindValue(26,timestamp);
}
query.exec() ;
} catch(...){
qDebug() << "Friendiqasync Error inserting contact" << contact["screen_name"] << " " << contact.toString();
} }
else{
query.prepare("INSERT INTO contacts (username, id, name, screen_name, location,imageAge,"
"profile_image_url, description, profile_image, url, protected, followers_count,"
"friends_count, created_at, favourites_count, utc_offset, time_zone, statuses_count,"
"following, verified, statusnet_blocking, notifications, statusnet_profile_url, cid, network, isFriend, timestamp)"
"VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
query.bindValue(0,username);
query.bindValue(1, contact["id"].toInt());
query.bindValue(2, contact["name"].toString().toUtf8().toBase64());
query.bindValue(3, contact["screen_name"]);
query.bindValue(4, contact["location"]);
query.bindValue(5, currentTime);
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());
query.bindValue(11,contact["followers_count"].toInt());
query.bindValue(12,contact["friends_count"].toInt());
QString sourcedate=contact["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(13,QDateTime::fromString(formateddate,Qt::RFC2822Date).toMSecsSinceEpoch() );
query.bindValue(14,contact["favorites_count"].toInt());
query.bindValue(15,contact["utc_offset"].toInt());
query.bindValue(16,contact["time_zone"].toString());
query.bindValue(17,contact["statuses_count"].toInt());
query.bindValue(18,contact["following"].toBool());
query.bindValue(19,contact["verfied"].toBool());
query.bindValue(20,contact["statusnet_blocking"].toBool());
query.bindValue(21,contact["notifications"].toBool());
query.bindValue(22,contact["statusnet_profile_url"]);
query.bindValue(23,contact["cid"].toInt());
query.bindValue(24,contact["network"]);
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(...){}
query.bindValue(26,timestamp);
}
query.exec() ;
} }
} }

View file

@ -295,6 +295,7 @@ void XHR::onReplyError(QNetworkReply::NetworkError code)
emit this->error( bufferToString(), m_url,m_api, (int) code); emit this->error( bufferToString(), m_url,m_api, (int) code);
buffer.clear(); buffer.clear();
reply->deleteLater(); reply->deleteLater();
if((downloadtype()=="contactlist")||(downloadtype()=="picturelist")){dlindex=dlindex+1;XHR::getlist();}
} }
void XHR::onReplySuccess() void XHR::onReplySuccess()

View file

@ -47,6 +47,7 @@ HEADERS += \
DISTFILES += \ DISTFILES += \
qml/calendarqml/*.qml \ qml/calendarqml/*.qml \
qml/newsqml/Lastcomment.qml \
qml/newsqml/NewsVideoLarge.qml \ qml/newsqml/NewsVideoLarge.qml \
translations/*.ts \ translations/*.ts \
translations/*.qm \ translations/*.qm \
@ -58,3 +59,6 @@ DISTFILES += \
js/*.js \ js/*.js \
qml/newsqml/NewsStack.qml \ qml/newsqml/NewsStack.qml \
qml/configqml/SyncComponent.qml qml/configqml/SyncComponent.qml
target.path=/usr/bin/friendiqa
INSTALLS+=target

View file

@ -187,7 +187,7 @@ function storeNews(login,database,news,rootwindow){
// save news after contacts download, call next function // save news after contacts download, call next function
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]); var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
for (var i=0;i<news.length;i++){ for (var i=0;i<news.length;i++){
print('store news data for ' + 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); //print('store news data for ' + 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);
//var ausdruck=news[i]; //var ausdruck=news[i];
var likearray=[];var dislikearray=[];var attendyesarray=[];var attendnoarray=[];var attendmaybearray=[]; var likearray=[];var dislikearray=[];var attendyesarray=[];var attendnoarray=[];var attendmaybearray=[];
if(news[i].hasOwnProperty('friendica_activities')){ if(news[i].hasOwnProperty('friendica_activities')){
@ -480,6 +480,7 @@ function chatsfromdb(database,login,messagetype,callback,stop_time){
for(var j = 0; j< conversations.length; j++) { for(var j = 0; j< conversations.length; j++) {
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 newsrs=tx.executeSql('select * from news WHERE username="'+login.username+'" AND statusnet_conversation_id="'+conversations[j] +'" AND messagetype="'+messagetype+'" ORDER BY created_at ASC');
//print(JSON.stringify(newsrs.rows.item(0))+JSON.stringify(newsrs.rows.item(1)))
var helpernews=newsrs.rows.item(0); var helpernews=newsrs.rows.item(0);
helpernews.newscount=newsrs.rows.length; helpernews.newscount=newsrs.rows.length;
helpernews=fetchUsersForNews(database,login.username,helpernews,allcontacts); helpernews=fetchUsersForNews(database,login.username,helpernews,allcontacts);
@ -487,6 +488,17 @@ function chatsfromdb(database,login,messagetype,callback,stop_time){
helpernews.text=Qt.atob(helpernews.text); helpernews.text=Qt.atob(helpernews.text);
helpernews.id=helpernews.status_id; helpernews.id=helpernews.status_id;
if (helpernews.attachments!="" && 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))};
helpernews.currentconversation=[];
for (var h = 0;h<newsrs.rows.length;h++){
var helpernews2=newsrs.rows.item(h);
helpernews2.newscount=0;
helpernews2=fetchUsersForNews(database,login.username,helpernews2,allcontacts);
helpernews2.statusnet_html=Qt.atob(helpernews2.statusnet_html);
helpernews2.text=Qt.atob(helpernews2.text);//print(h+" "+helpernews2.text)
helpernews2.id=helpernews2.status_id;
if (helpernews2.attachments!="" && helpernews2.attachments!==null){helpernews2.attachments=JSON.parse(Qt.atob(helpernews2.attachments))};
helpernews.currentconversation.push(helpernews2)
}
newsArray.push(helpernews); newsArray.push(helpernews);
} }
callback(newsArray,lastid); callback(newsArray,lastid);

View file

@ -34,6 +34,149 @@ function findend (text, startpos) {
return (indexOf >= 0) ? (indexOf + (startpos || 0)) : text.length; return (indexOf >= 0) ? (indexOf + (startpos || 0)) : text.length;
} }
function beautify(newsitemobject,msg){
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));
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')){
if (newsitemobject.friendica_activities.like.length>0){
if (newsitemobject.friendica_activities.like.length==1){likeText= newsitemobject.friendica_activities.like[0].name+" "+ qsTr("likes this.")}
else {likeText= newsitemobject.friendica_activities.like.length+" "+ qsTr("like this.")}
}
if (newsitemobject.friendica_activities.dislike.length>0){
if (newsitemobject.friendica_activities.dislike.length==1){dislikeText= newsitemobject.friendica_activities.dislike[0].name+" "+ qsTr("doesn't like this.")}
else {dislikeText= newsitemobject.friendica_activities.dislike.length+" "+ qsTr("don't like this.")}
}
if (newsitemobject.friendica_activities.attendyes.length>0){
if (newsitemobject.friendica_activities.attendyes.length==1){attendyesText=newsitemobject.friendica_activities.attendyes[0].name+" "+ qsTr("will attend.")}
else {attendyesText= newsitemobject.friendica_activities.attendyes.length+" "+ qsTr("persons will attend.")}
}
if (newsitemobject.friendica_activities.attendno.length>0){
if (newsitemobject.friendica_activities.attendno.length==1){attendnoText= newsitemobject.friendica_activities.attendno[0].name+" "+ qsTr("will not attend.")}
else {attendnoText= newsitemobject.friendica_activities.attendno.length+" "+ qsTr("persons will not attend.")}
}
if (newsitemobject.friendica_activities.attendmaybe.length>0){
if (newsitemobject.friendica_activities.attendmaybe.length==1){attendmaybeText= newsitemobject.friendica_activities.attendmaybe[0].name+" "+ qsTr("may attend.")}
else {attendmaybeText= newsitemobject.friendica_activities.attendmaybe.length+" "+ qsTr("persons may attend.")}
}
//var friendica_activities_self=JSON.parse(newsitemobject.friendica_activities_self);
if (newsitemobject.hasOwnProperty("friendica_activities_self")){
if (newsitemobject.friendica_activities_self.indexOf(3)!=-1){self.attending=qsTr("yes")}
if (newsitemobject.friendica_activities_self.indexOf(4)!=-1){self.attending=qsTr("no")}
if (newsitemobject.friendica_activities_self.indexOf(5)!=-1){self.attending=qsTr("maybe")}
if (newsitemobject.friendica_activities_self.indexOf(1)!=-1){self.liked=1}
if (newsitemobject.friendica_activities_self.indexOf(2)!=-1){self.disliked=1}
}}} catch(e){print("Activities "+e+ " "+JSON.stringify(newsitemobject.friendica_activities))}
var friendica_activities={likeText:likeText,dislikeText:dislikeText,attendyesText:attendyesText,attendnoText:attendnoText,attendmaybeText:attendmaybeText,self:self}
var attachmentList=[];
var videoformats=["mp4", "avi", "webm","ogg","mp3"]
try{if(newsitemobject.attachments){
var attachArray=newsitemobject.attachments;
for (var image in attachArray){
var attachhelper={mimetype:attachArray[image].mimetype}
var attachhelperstring=Qt.btoa(attachArray[image].url)
var helperstringposition=newsitemobject.statusnet_html.indexOf(attachhelperstring);
if (helperstringposition>-1){attachhelper.url=newsitemobject.statusnet_html.substring(newsitemobject.statusnet_html.lastIndexOf("http",helperstringposition),helperstringposition+attachhelperstring.length);
if (attachArray[image].mimetype=="image/jpeg"){attachhelper.url=attachhelper.url+".jpg"}
else if (attachArray[image].mimetype=="image/gif"){attachhelper.url=attachhelper.url+".gif"}
else if (attachArray[image].mimetype=="image/png"){attachhelper.url=attachhelper.url+".png"}
}
else {attachhelper.url=attachArray[image].url}
attachmentList.push(attachhelper)
//print("Attachhelper "+attachhelper.url)
newsitemobject.statusnet_html=newsitemobject.statusnet_html.replace(attachhelper.url,"")
newsitemobject.statusnet_html=newsitemobject.statusnet_html.replace(attachhelper.url.substring(0,attachhelper.url.length-4)+".jpeg","")
newsitemobject.statusnet_html=newsitemobject.statusnet_html.replace(attachhelper.url.substring(0,attachhelper.url.length-4),"")
}
}
}catch(e){print("attachment "+e)}
for (var format in videoformats){
if (newsitemobject.text.indexOf("."+videoformats[format])>-1){
var videohelper={mimetype:"video/"+videoformats[format]}
var videotext=newsitemobject.text;
while (videotext.indexOf("."+videoformats[format])>-1){
var videohelperstringposition=videotext.indexOf("."+videoformats[format]);
videohelper.url=videotext.substring(videotext.lastIndexOf("http",videohelperstringposition),videohelperstringposition+4);
videotext=videotext.substring(videohelperstringposition+4,videotext.length)
if ((attachmentList.length==0) || (attachmentList[attachmentList.length-1].url!=videohelper.url)){attachmentList.push(videohelper)}
}
}
}
if (newsitemobject.text.indexOf("/videos/watch/")>-1){
var ptvideohelper={mimetype:"video/mp4"}
var ptvideotext=newsitemobject.text;
while (ptvideotext.indexOf("/videos/watch/")>-1){
var ptvideohelperstringposition=ptvideotext.indexOf("/videos/watch/");
var ptposend=findend(ptvideotext,ptvideohelperstringposition);
if(ptposend==-1){ptposend=ptvideotext.length};
ptvideohelper.url=ptvideotext.substring(ptvideotext.lastIndexOf("http",ptvideohelperstringposition),ptposend)+"-480.mp4";
ptvideohelper.url=ptvideohelper.url.replace("/videos/watch","/static/webseed");
ptvideotext=ptvideotext.substring(ptposend,ptvideotext.length)
if ((attachmentList.length==0) || (attachmentList[attachmentList.length-1].url!=ptvideohelper.url)){attachmentList.push(ptvideohelper)}
}
}
if (newsitemobject.text.indexOf("youtube.com/watch?v")>-1){
//print("message "+msg.options.showWebsiteForLinks);
//if (msg.options.showYoutube!="false"){
var yttext=newsitemobject.text;
while (yttext.indexOf("youtube.com/watch?v")>-1){
var ythelperstringposition=yttext.indexOf("watch?v=");
var ytposend=findend(yttext,ythelperstringposition);
var ythelper={mimetype:"video/youtube"}
ythelper.url=yttext.substring(ythelperstringposition+8,ytposend);
yttext=yttext.substring(ytposend,yttext.length);
if ((attachmentList.length==0) || (attachmentList[attachmentList.length-1].url!=ythelper.url)){attachmentList.push(ythelper)}
}
//}
}
// if (newsitemobject.text.indexOf(".html")>-1){
// //print("message "+msg.options.showWebsiteForLinks);
// if (msg.options.showWebsiteForLinks!="false"){
// var linkhelper={mimetype:"text/html"}
// var linktext=newsitemobject.text;
// while (linktext.indexOf(".html")>-1){
// var linkhelperstringposition=linktext.indexOf(".html");
// var linkposend=findend(linktext,linkhelperstringposition);
// linkhelper.url=linktext.substring(linktext.lastIndexOf("http",linkhelperstringposition),linkposend);
// linktext=linktext.substring(linkhelperstringposition+5,linktext.length)
// if ((attachmentList.length==0) || (attachmentList[attachmentList.length-1].url!=linkhelper.url)){attachmentList.push(linkhelper)}
// }
// }
// }
newsitemobject.attachmentList=attachmentList;
if ((msg.options.hasOwnProperty("hide_nsfw"))&&(msg.options.hide_nsfw==1)&&(newsitemobject.text.indexOf("#nsfw")>-1)){
newsitemobject.nsfw=true
} else{newsitemobject.nsfw=false}
var seconds=(msg.currentTime-newsitemobject.created_at)/1000;
var timestring="";
if (seconds<60) {timestring=seconds+" "+qsTr("seconds") +" "+qsTr("ago");}
else if (seconds<90){timestring=Math.round(seconds/60)+" "+qsTr("minute") +" "+qsTr("ago");}
else if (seconds<3600){timestring=Math.round(seconds/60)+" "+qsTr("minutes") +" "+qsTr("ago");}
else if (seconds<5400){timestring=Math.round(seconds/3600)+" "+qsTr("hour") +" "+qsTr("ago");}
else if (seconds<86400){timestring=Math.round(seconds/3600)+" "+qsTr("hours") +" "+qsTr("ago");}
else if (seconds<129600){timestring=Math.round(seconds/86400)+" "+qsTr("day") +" "+qsTr("ago");}
else if (seconds<3888000){timestring=Math.round(seconds/86400)+" "+qsTr("days") +" "+qsTr("ago");}
else if (seconds<5832000){timestring=Math.round(seconds/3888000)+" "+qsTr("month") +" "+qsTr("ago");}
else if (seconds<69984000){timestring=Math.round(seconds/3888000)+" "+qsTr("months") +" "+qsTr("ago");}
else {timestring=Math.round(seconds/46656000)+" "+qsTr("years") +" "+qsTr("ago");}
newsitemobject.dateDiff=timestring;
newsitemobject.friendica_activities_view=friendica_activities;
newsitemobject.forumname=forumname;
return newsitemobject;
}
WorkerScript.onMessage = function(msg) { WorkerScript.onMessage = function(msg) {
if(msg.deleteId!==undefined) if(msg.deleteId!==undefined)
@ -53,143 +196,17 @@ else{
// newsitemobject.user.profile_image_url=""; // newsitemobject.user.profile_image_url="";
// newsitemobject.user.name=""; // newsitemobject.user.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));
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')){
if (newsitemobject.friendica_activities.like.length>0){
if (newsitemobject.friendica_activities.like.length==1){likeText= newsitemobject.friendica_activities.like[0].name+" "+ qsTr("likes this.")}
else {likeText= newsitemobject.friendica_activities.like.length+" "+ qsTr("like this.")}
}
if (newsitemobject.friendica_activities.dislike.length>0){
if (newsitemobject.friendica_activities.dislike.length==1){dislikeText= newsitemobject.friendica_activities.dislike[0].name+" "+ qsTr("doesn't like this.")}
else {dislikeText= newsitemobject.friendica_activities.dislike.length+" "+ qsTr("don't like this.")}
}
if (newsitemobject.friendica_activities.attendyes.length>0){
if (newsitemobject.friendica_activities.attendyes.length==1){attendyesText=newsitemobject.friendica_activities.attendyes[0].name+" "+ qsTr("will attend.")}
else {attendyesText= newsitemobject.friendica_activities.attendyes.length+" "+ qsTr("persons will attend.")}
}
if (newsitemobject.friendica_activities.attendno.length>0){
if (newsitemobject.friendica_activities.attendno.length==1){attendnoText= newsitemobject.friendica_activities.attendno[0].name+" "+ qsTr("will not attend.")}
else {attendnoText= newsitemobject.friendica_activities.attendno.length+" "+ qsTr("persons will not attend.")}
}
if (newsitemobject.friendica_activities.attendmaybe.length>0){
if (newsitemobject.friendica_activities.attendmaybe.length==1){attendmaybeText= newsitemobject.friendica_activities.attendmaybe[0].name+" "+ qsTr("may attend.")}
else {attendmaybeText= newsitemobject.friendica_activities.attendmaybe.length+" "+ qsTr("persons may attend.")}
}
//var friendica_activities_self=JSON.parse(newsitemobject.friendica_activities_self);
if (newsitemobject.hasOwnProperty("friendica_activities_self")){
if (newsitemobject.friendica_activities_self.indexOf(3)!=-1){self.attending=qsTr("yes")}
if (newsitemobject.friendica_activities_self.indexOf(4)!=-1){self.attending=qsTr("no")}
if (newsitemobject.friendica_activities_self.indexOf(5)!=-1){self.attending=qsTr("maybe")}
if (newsitemobject.friendica_activities_self.indexOf(1)!=-1){self.liked=1}
if (newsitemobject.friendica_activities_self.indexOf(2)!=-1){self.disliked=1}
}}} catch(e){print("Activities "+e+ " "+JSON.stringify(newsitemobject.friendica_activities))}
var friendica_activities={likeText:likeText,dislikeText:dislikeText,attendyesText:attendyesText,attendnoText:attendnoText,attendmaybeText:attendmaybeText,self:self}
var attachmentList=[];
var videoformats=["mp4", "avi", "webm","ogg","mp3"]
try{if(newsitemobject.attachments){
var attachArray=newsitemobject.attachments;
for (var image in attachArray){
var attachhelper={mimetype:attachArray[image].mimetype}
var attachhelperstring=Qt.btoa(attachArray[image].url)
var helperstringposition=newsitemobject.statusnet_html.indexOf(attachhelperstring);
if (helperstringposition>-1){attachhelper.url=newsitemobject.statusnet_html.substring(newsitemobject.statusnet_html.lastIndexOf("http",helperstringposition),helperstringposition+attachhelperstring.length);
if (attachArray[image].mimetype=="image/jpeg"){attachhelper.url=attachhelper.url+".jpg"}
else if (attachArray[image].mimetype=="image/gif"){attachhelper.url=attachhelper.url+".gif"}
else if (attachArray[image].mimetype=="image/png"){attachhelper.url=attachhelper.url+".png"}
}
else {attachhelper.url=attachArray[image].url}
attachmentList.push(attachhelper)
//print("Attachhelper "+attachhelper.url)
newsitemobject.statusnet_html=newsitemobject.statusnet_html.replace(attachhelper.url,"")
newsitemobject.statusnet_html=newsitemobject.statusnet_html.replace(attachhelper.url.substring(0,attachhelper.url.length-4)+".jpeg","")
newsitemobject.statusnet_html=newsitemobject.statusnet_html.replace(attachhelper.url.substring(0,attachhelper.url.length-4),"")
}
}
}catch(e){print("attachment "+e)}
for (var format in videoformats){
if (newsitemobject.text.indexOf("."+videoformats[format])>-1){
var videohelper={mimetype:"video/"+videoformats[format]}
var videotext=newsitemobject.text;
while (videotext.indexOf("."+videoformats[format])>-1){
var videohelperstringposition=videotext.indexOf("."+videoformats[format]);
videohelper.url=videotext.substring(videotext.lastIndexOf("http",videohelperstringposition),videohelperstringposition+4);
videotext=videotext.substring(videohelperstringposition+4,videotext.length)
if ((attachmentList.length==0) || (attachmentList[attachmentList.length-1].url!=videohelper.url)){attachmentList.push(videohelper)}
}
}
}
if (newsitemobject.text.indexOf("/videos/watch/")>-1){
var ptvideohelper={mimetype:"video/mp4"}
var ptvideotext=newsitemobject.text;
while (ptvideotext.indexOf("/videos/watch/")>-1){
var ptvideohelperstringposition=ptvideotext.indexOf("/videos/watch/");
var ptposend=findend(ptvideotext,ptvideohelperstringposition);
if(ptposend==-1){ptposend=ptvideotext.length};
ptvideohelper.url=ptvideotext.substring(ptvideotext.lastIndexOf("http",ptvideohelperstringposition),ptposend)+"-480.mp4";
ptvideohelper.url=ptvideohelper.url.replace("/videos/watch","/static/webseed");
ptvideotext=ptvideotext.substring(ptposend,ptvideotext.length)
if ((attachmentList.length==0) || (attachmentList[attachmentList.length-1].url!=ptvideohelper.url)){attachmentList.push(ptvideohelper)}
}
}
if (newsitemobject.text.indexOf("youtube.com/watch?v")>-1){
//print("message "+msg.options.showWebsiteForLinks);
//if (msg.options.showYoutube!="false"){
var yttext=newsitemobject.text; //var data=({"newsitemobject": newsitemobject,"dateDiff":timestring,"friendica_activities":friendica_activities,"forumname":forumname})}
while (yttext.indexOf("youtube.com/watch?v")>-1){
var ythelperstringposition=yttext.indexOf("watch?v=");
var ytposend=findend(yttext,ythelperstringposition);
var ythelper={mimetype:"video/youtube"}
ythelper.url=yttext.substring(ythelperstringposition+8,ytposend);
yttext=yttext.substring(ytposend,yttext.length);
if ((attachmentList.length==0) || (attachmentList[attachmentList.length-1].url!=ythelper.url)){attachmentList.push(ythelper)}
}
//}
}
// if (newsitemobject.text.indexOf(".html")>-1){
// //print("message "+msg.options.showWebsiteForLinks);
// if (msg.options.showWebsiteForLinks!="false"){
// var linkhelper={mimetype:"text/html"}
// var linktext=newsitemobject.text;
// while (linktext.indexOf(".html")>-1){
// var linkhelperstringposition=linktext.indexOf(".html");
// var linkposend=findend(linktext,linkhelperstringposition);
// linkhelper.url=linktext.substring(linktext.lastIndexOf("http",linkhelperstringposition),linkposend);
// linktext=linktext.substring(linkhelperstringposition+5,linktext.length)
// if ((attachmentList.length==0) || (attachmentList[attachmentList.length-1].url!=linkhelper.url)){attachmentList.push(linkhelper)}
// }
// }
// }
newsitemobject.attachmentList=attachmentList;
if ((msg.options.hasOwnProperty("hide_nsfw"))&&(msg.options.hide_nsfw==1)&&(newsitemobject.text.indexOf("#nsfw")>-1)){
newsitemobject.nsfw=true
} else{newsitemobject.nsfw=false}
var seconds=(msg.currentTime-newsitemobject.created_at)/1000;
var timestring="";
if (seconds<60) {timestring=seconds+" "+qsTr("seconds") +" "+qsTr("ago");}
else if (seconds<90){timestring=Math.round(seconds/60)+" "+qsTr("minute") +" "+qsTr("ago");}
else if (seconds<3600){timestring=Math.round(seconds/60)+" "+qsTr("minutes") +" "+qsTr("ago");}
else if (seconds<5400){timestring=Math.round(seconds/3600)+" "+qsTr("hour") +" "+qsTr("ago");}
else if (seconds<86400){timestring=Math.round(seconds/3600)+" "+qsTr("hours") +" "+qsTr("ago");}
else if (seconds<129600){timestring=Math.round(seconds/86400)+" "+qsTr("day") +" "+qsTr("ago");}
else if (seconds<3888000){timestring=Math.round(seconds/86400)+" "+qsTr("days") +" "+qsTr("ago");}
else if (seconds<5832000){timestring=Math.round(seconds/3888000)+" "+qsTr("month") +" "+qsTr("ago");}
else if (seconds<69984000){timestring=Math.round(seconds/3888000)+" "+qsTr("months") +" "+qsTr("ago");}
else {timestring=Math.round(seconds/46656000)+" "+qsTr("years") +" "+qsTr("ago");}
var data=({"newsitemobject": newsitemobject,"dateDiff":timestring,"friendica_activities":friendica_activities,"forumname":forumname})}
//print("News:"+j+msg.news.length+JSON.stringify(data)); //print("News:"+j+msg.news.length+JSON.stringify(data));
newsitemobject=beautify(newsitemobject,msg);
if (newsitemobject.hasOwnProperty("currentconversation")&&(newsitemobject.currentconversation.length>1)){
newsitemobject.lastcomment=beautify(newsitemobject.currentconversation[newsitemobject.currentconversation.length-1],msg);
//print("Currentconversation" + newsitemobject.currentconversation.length+JSON.stringify(newsitemobject.lastcomment))
}
var data=({"newsitemobject": newsitemobject})
}
if(msg.method=="append") { if(msg.method=="append") {
msg.model.insert(j, data)} msg.model.insert(j, data)}
else{ else{

View file

@ -288,7 +288,7 @@ function readConfig(database,callback,filter,filtervalue) { // reads config
} }
function readActiveConfig(database){ function readActiveConfig(database){
var obj; var obj="";
readConfig(database,function(config){obj=config},"isActive", 0); readConfig(database,function(config){obj=config},"isActive", 0);
return obj; return obj;
} }
@ -341,12 +341,15 @@ function cleanNews(database,callback){
var maxnewsrs = tx.executeSql("SELECT v FROM globaloptions WHERE k='max_news'"); 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 maxnews=1000; if(maxnewsrs.rows.length>0){ maxnews=maxnewsrs.rows.item(0).v};
for (var i=0; i<6;i++){ for (var i=0; i<6;i++){
if (i!=0){maxnews=maxnews/5} if (i!=0){var maxnewsa=maxnews/5}else{maxnewsa=maxnews}
var newscountrs = tx.executeSql('SELECT COUNT(*) from news WHERE messagetype='+i); var newscountrs = tx.executeSql('SELECT COUNT(*) from news WHERE messagetype='+i);
var newscount = newscountrs.rows.item(0)["COUNT(*)"];//print("newscount "+newscount) var newscount = 0;
if (newscount>maxnews){ if (newscountrs.rows.length>0){newscount=newscountrs.rows.item(0)["COUNT(*)"]};//print(i+"newscount "+newscount)
var lastvalidtimers= tx.executeSql('SELECT DISTINCT created_at FROM news WHERE messagetype='+i+' ORDER BY created_at ASC LIMIT ' +(newscount-maxnews)); if (newscount>maxnewsa){
var lastvalidtime=lastvalidtimers.rows.item(newscount-maxnews-1).created_at; var lastvalidtimers= tx.executeSql('SELECT DISTINCT created_at FROM news WHERE messagetype='+i+' ORDER BY created_at ASC LIMIT ' +(newscount-maxnewsa));
// print('SELECT DISTINCT created_at FROM news WHERE messagetype='+i+' ORDER BY created_at ASC LIMIT ' +(newscount-maxnewsa))
// print(JSON.stringify(lastvalidtimers.rows.item(newscount-maxnewsa-1)))
var lastvalidtime=lastvalidtimers.rows.item(newscount-maxnewsa-1).created_at;
var deleters = tx.executeSql('DELETE from news WHERE messagetype='+i+' AND created_at<='+lastvalidtime)} var deleters = tx.executeSql('DELETE from news WHERE messagetype='+i+' AND created_at<='+lastvalidtime)}
} }
callback() callback()
@ -387,7 +390,8 @@ function updateContactInDB(login,database,isFriend,contact){// for newstab and f
} }
function processNews(api,data){ function processNews(api,data){
//print(api + data); //print("processNews "+api + data);
try{var newslist=JSON.parse(data)} catch(e){newsBusy.running=false;}; try{var newslist=JSON.parse(data)} catch(e){newsBusy.running=false;};
if (data==""){} if (data==""){}
else if (typeof(newslist)=='undefined'){ else if (typeof(newslist)=='undefined'){
@ -397,34 +401,6 @@ function processNews(api,data){
Helperjs.showMessage(qsTr("JSON status Error"),"API:\n" +login.server+api+"\n Return: \n"+data,root) Helperjs.showMessage(qsTr("JSON status Error"),"API:\n" +login.server+api+"\n Return: \n"+data,root)
} }
else if (!(Array.isArray(newslist))){ else if (!(Array.isArray(newslist))){
// print("processNews not array"+newslist+JSON.stringify(newslist));
// if(newslist.hasOwnProperty('id')){
// newslist.created_at=Date.parse(Newsjs.cleanDate(newslist.created_at));
// newslist.messagetype=5;
// newslist.friendica_author=cleanUser(newslist.friendica_author);
// newslist.user=cleanUser(newslist.user);
// if(newslist.in_reply_to_user_id){newslist.reply_user=Newsjs.objFromArray(allcontacts,"id",newslist.in_reply_to_user_id)}
// var dummynewslist=[newslist];
// Newsjs.storeNews(login,db,dummynewslist,root);
// 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)
// })}
// }
replytimer.restart() replytimer.restart()
} }
else { else {
@ -624,6 +600,10 @@ function updateView(viewtype){
if (viewtype==="Conversations"){Newsjs.allchatsfromdb(db,login.username,function(temp){ if (viewtype==="Conversations"){Newsjs.allchatsfromdb(db,login.username,function(temp){
newsStack.allchats=temp newsStack.allchats=temp
})} })}
if ((osSettings.osType=="Android") && root.globaloptions.hasOwnProperty("syncinterval") && root.globaloptions.syncinterval !=null && root.globaloptions.syncinterval !=0){
//alarm.setAlarm(root.globaloptions.syncinterval);
setBackgroundsync()
}
} }
function showGroups(){ function showGroups(){
@ -638,6 +618,17 @@ function showGroups(){
}) })
} }
function setBackgroundsync(){
Helperjs.readData(db,"globaloptions","",function(lastsync){
//print("Lastsync "+(parseFloat(lastsync[0]["v"])+120) + " Date "+Date.now()/1000 + " "+((parseFloat(lastsync[0]["v"])+120)<(Date.now()/1000)))
if((lastsync.length>0)&&((parseFloat(lastsync[0]["v"])+120)<(Date.now()/1000))){
alarm.setAlarm(root.globaloptions.syncinterval);
}
},"k","lastsync")
}
function getGroupnews(list){ function getGroupnews(list){
newstab.newstabstatus="Group news"; newstab.newstabstatus="Group news";
newsBusy.running=true; newsBusy.running=true;

View file

@ -335,6 +335,8 @@ Page{
//reset values //reset values
root.login=userconfig; root.login=userconfig;
root.news=[]; root.news=[];
rootstack.currentIndex=0;
root.newstypeSignal("refresh");
},"isActive",0); },"isActive",0);
//Service.requestProfile(userconfig,db,root,function(nc){root.newContacts=nc}); //Service.requestProfile(userconfig,db,root,function(nc){root.newContacts=nc});

View file

@ -43,12 +43,11 @@ Rectangle{
textFormat: Text.RichText textFormat: Text.RichText
width: root.width-mm width: root.width-mm
wrapMode: Text.WrapAtWordBoundaryOrAnywhere wrapMode: Text.WrapAtWordBoundaryOrAnywhere
text: "<b>Friendiqa v0.5 </b><br>Licensed under GPL 3 with the exception of OpenSSL <br> "+ text: "<b>Friendiqa v0.5.2 </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>"+ "Website <a href='https://friendiqa.ma-nic.de'>https://friendiqa.ma-nic.de</a><br>"+
"Sourcecode: <a href='https://git.friendi.ca/LubuWest/Friendiqa'>https://git.friendi.ca/LubuWest/Friendiqa</a><br>"+ "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>"+ "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>"+ "Code by <a href='https://freunde.ma-nic.de/profile/pankraz'>Marco</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>"+ "Qt Framework <a href='https://www.qt.io'>www.qt.io</a><br>"+
"Icons by <a href='http://fontawesome.io'>FontAwesome</a><br>"+ "Icons by <a href='http://fontawesome.io'>FontAwesome</a><br>"+
"Folder Icon by <a href='https://github.com/KDE/breeze-icons'>KDE Breeze Icons</a><br>"+ "Folder Icon by <a href='https://github.com/KDE/breeze-icons'>KDE Breeze Icons</a><br>"+

View file

@ -62,10 +62,9 @@ Rectangle{
selectByMouse: true selectByMouse: true
onTextChanged: { onTextChanged: {
Service.updateglobaloptions(root.db,"syncinterval",text); Service.updateglobaloptions(root.db,"syncinterval",text);
if(osSettings.osType=="Android" && text !=0){ if(osSettings.osType=="Android"){
alarm.setAlarm(text); alarm.setAlarm(text);
} else if(osSettings.osType=="Linux" && text !=0){ } else if(osSettings.osType=="Linux" && text !=0){
} }
} }
} }

View file

@ -105,10 +105,11 @@ StackView{
FontLoader{id: fontAwesome; source: "qrc:/images/fontawesome-webfont.ttf"} FontLoader{id: fontAwesome; source: "qrc:/images/fontawesome-webfont.ttf"}
Keys.onReleased: { Keys.onReleased: {print("Backkey"+newstab.conversation.length+" "+root.depth)
if (event.key === osSettings.backKey) { if (event.key === osSettings.backKey) {
if (currentIndex==0){ if (rootstack.currentIndex==0){
newstab.active=true; newstab.active=true;
print(newstab.newstabstatus)
if (newstab.newstabstatus!=login.newsViewType){ if (newstab.newstabstatus!=login.newsViewType){
newstab.newstabstatus=login.newsViewType; newstab.newstabstatus=login.newsViewType;
if(login.newsViewType=="Timeline"){Newsjs.newsfromdb(db,login.username,0,function(dbnews){ if(login.newsViewType=="Timeline"){Newsjs.newsfromdb(db,login.username,0,function(dbnews){
@ -118,7 +119,9 @@ StackView{
Newsjs.chatsfromdb(db,login.username,function(dbnews){ Newsjs.chatsfromdb(db,login.username,function(dbnews){
newsSignal(dbnews) newsSignal(dbnews)
})} })}
print(newstab.conversation.length);
} }
else if (newstab.conversation.length>0){newstab.conversation=[]} else if (newstab.conversation.length>0){newstab.conversation=[]}
else if (root.depth>1){root.pop()} else if (root.depth>1){root.pop()}
else{Service.cleanNews(root.db,function(){ else{Service.cleanNews(root.db,function(){
@ -126,8 +129,8 @@ StackView{
Qt.quit()}) Qt.quit()})
})} })}
} }
else if (currentIndex==2){fotoSignal("backButton")} else if (rootstack.currentIndex==2){fotoSignal("backButton")}
else {currentIndex=0} else {rootstack.currentIndex=0}
event.accepted = true event.accepted = true
}} }}
@ -160,10 +163,10 @@ StackView{
anchors.fill: parent anchors.fill: parent
onClicked:{ onClicked:{
leftDrawer.close(); leftDrawer.close();
newstypeSignal("refresh") // newstypeSignal("refresh")
// updatenews.setDatabase(); updatenews.setDatabase();
// updatenews.login(); updatenews.login();
// updatenews.startsync(); updatenews.startsync();
} }
} }
} }
@ -307,6 +310,8 @@ StackView{
Item{ Item{
id:rootStackItem id:rootStackItem
width:parent.width
height: parent.height
//anchors.fill:parent //anchors.fill:parent
states: State { states: State {
name: "fullscreen"; name: "fullscreen";
@ -389,6 +394,7 @@ StackView{
} }
Component.onCompleted: { Component.onCompleted: {
forceActiveFocus();
Service.readGlobaloptions(db,function(go){globaloptions=go}) Service.readGlobaloptions(db,function(go){globaloptions=go})
//print(xhr.networktype()); //print(xhr.networktype());
if(osSettings.osType=="Android"){ if(osSettings.osType=="Android"){

View file

@ -38,9 +38,9 @@ Item {
Component.onCompleted: { Component.onCompleted: {
SystemDispatcher.setInitialized(); SystemDispatcher.setInitialized();
if (root.globaloptions.hasOwnProperty("syncinterval") && root.globaloptions.syncinterval !=null && root.globaloptions.syncinterval !=0){ // if (root.globaloptions.hasOwnProperty("syncinterval") && root.globaloptions.syncinterval !=null && root.globaloptions.syncinterval !=0){
alarm.setAlarm(root.globaloptions.syncinterval); // alarm.setAlarm(root.globaloptions.syncinterval);
} // }
} }
} }

View file

@ -28,7 +28,7 @@
// //
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
import QtQuick 2.6
import QtQuick.Controls 2.4 import QtQuick.Controls 2.4
Button{ Button{
id: mButton id: mButton
@ -36,4 +36,5 @@ Button{
height: 6*mm height: 6*mm
//color: Material.grey //color: Material.grey
font.pixelSize: 3*mm font.pixelSize: 3*mm
background: Rectangle{color:"#F8F8F8"}
} }

View file

@ -40,7 +40,7 @@ Rectangle {
id:conversationList id:conversationList
// width:root.width-5*mm // width:root.width-5*mm
// height:root.height-12*mm // height:root.height-12*mm
//property var news property var news:[]
// y:1 // y:1
// z:2 // z:2
color: "white" color: "white"
@ -83,7 +83,7 @@ Rectangle {
} else { conversationBusy.running=false; } else { conversationBusy.running=false;
conversationModel.clear(); conversationModel.clear();
var currentTime= new Date(); var currentTime= new Date();
var msg = {'currentTime': currentTime, 'model': conversationModel,'news':newstab.conversation, 'options':globaloptions}; var msg = {'currentTime': currentTime, 'model': conversationModel,'news':newstab.conversation, 'method':'refresh', 'options':globaloptions};
conversationWorker.sendMessage(msg) conversationWorker.sendMessage(msg)
//conversationsymbol.color="grey" //conversationsymbol.color="grey"
} }
@ -176,15 +176,17 @@ Rectangle {
text: "\uf057" text: "\uf057"
onClicked: { onClicked: {
//newsView.positionViewAtIndex(newsStack.conversationIndex,ListView.Beginning); //newsView.positionViewAtIndex(newsStack.conversationIndex,ListView.Beginning);
newsStack.pop()
newstab.conversation=[];
//newsStack.pop()
//conversationList.destroy(); //conversationList.destroy();
//conversationsymbol.color="grey" //conversationsymbol.color="grey"
} }
} }
// Component.onCompleted: { Component.onCompleted: {
// if (news){var currentTime= new Date(); if (news.length>0){var currentTime= new Date();
// var msg = {'currentTime': currentTime, 'model': conversationModel,'news':news}; var msg = {'currentTime': currentTime, 'model': conversationModel,'news':news,'appendnews':true, 'options':globaloptions};
// conversationWorker.sendMessage(msg)} conversationWorker.sendMessage(msg)}
// } }
} }

View file

@ -148,7 +148,7 @@ Rectangle{
reply_to_user=newsitemobject.user.screen_name; reply_to_user=newsitemobject.user.screen_name;
parentId=newsitemobject.id parentId=newsitemobject.id
} else { } else {
messageSend.state="" messageSend.state="";
reply_to_user=""; reply_to_user="";
parentId=""; parentId="";
bodyField.text=""; bodyField.text="";
@ -482,7 +482,6 @@ Rectangle{
SmileyDialog{id:smileyDialog;x:mm;visible: false} SmileyDialog{id:smileyDialog;x:mm;visible: false}
} }
Component.onCompleted:{ Component.onCompleted:{
//
//parentId=conversationModel.get(conversationModel.count-1).newsitemobject.id //parentId=conversationModel.get(conversationModel.count-1).newsitemobject.id
//if(attachImageURLs.length>0){attachImage(attachImageURLs[0])} //if(attachImageURLs.length>0){attachImage(attachImageURLs[0])}
newsStack.replySignal.connect(setParent); newsStack.replySignal.connect(setParent);

View file

@ -0,0 +1,63 @@
// 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 2.0
Rectangle{
id: moreComments
width: parent.width
height: 5*mm
color:"white"
property int comments:0
// border.color:"grey"
// border.width:1
signal clicked
state:""
Text{
id:mainText
color: "grey"
anchors.right: parent.right
anchors.margins: mm
width: contentWidth
height: contentHeight
font.family:fontAwesome.name
//font.pixelSize: 3*mm
text: qsTr("Show all comments")+" (" +comments + ")" //"\uf0dc"
}
MouseArea{
id:buttonArea
anchors.fill:parent
onClicked: {
pushConversation();
}
}
}

View file

@ -31,7 +31,7 @@
import QtQuick 2.9 import QtQuick 2.9
AnimatedImage {id:gif; AnimatedImage {id:gif;
width:newscolumn.width; width:toprow.width;
property string mimetype:"" property string mimetype:""
fillMode: Image.PreserveAspectFit; fillMode: Image.PreserveAspectFit;
onStatusChanged: playing = (status == AnimatedImage.Ready); onStatusChanged: playing = (status == AnimatedImage.Ready);

View file

@ -121,9 +121,7 @@ StackView{
function showNews(newsToShow){ function showNews(newsToShow){
try{ try{if (newsStack.depth>1){newsStack.pop()}}catch(e){}
if (newsStack.depth>1){newsStack.pop()}
}catch(e){}
newsBusy.running=false; newsBusy.running=false;
var currentTime= new Date(); var currentTime= new Date();
// downloadNotice.text=downloadNotice.text + "\n shownews start "+ Date.now(); // downloadNotice.text=downloadNotice.text + "\n shownews start "+ Date.now();
@ -192,7 +190,8 @@ StackView{
} }
onSuccess:{ onSuccess:{
// downloadNotice.text=downloadNotice.text+ "\n xhr finished "+Date.now(); // downloadNotice.text=downloadNotice.text+ "\n xhr finished "+Date.now();
Service.processNews(api,data); Service.processNews(api,data)
replySignal("")
} }
} }
@ -224,179 +223,8 @@ StackView{
id:newslistRectangle id:newslistRectangle
y:1 y:1
color: "white" color: "white"
//anchors.fill:parent
// 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 Component { id:footerComponent
Rectangle{ Rectangle{
border.color: "#EEEEEE" border.color: "#EEEEEE"
@ -411,21 +239,26 @@ StackView{
MouseArea{ MouseArea{
anchors.fill:parent anchors.fill:parent
onClicked:{ onClicked:{
getOldNews(); if (newsModel.count==0){
if (newsSwipeview.stacktype=="Home"){
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")
}
}
else {getOldNews();}
} }
} }
} }
} }
// Label{
// text:qsTr(stacktype)
// font.pixelSize: 3* mm
// anchors.horizontalCenter: parent.horizontalCenter
// anchors.margins: mm
// }
ListView { ListView {
id: newsView id: newsView
property real oldContentY:0 property real oldContentY:0
@ -434,9 +267,6 @@ StackView{
property string viewtype: "news" property string viewtype: "news"
anchors.fill: parent anchors.fill: parent
anchors.margins: mm anchors.margins: mm
//anchors.topMargin: 6*mm
// anchors.leftMargin: mm; anchors.rightMargin: mm
// anchors.bottomMargin: mm
clip: true clip: true
spacing: 0 spacing: 0
header: MessageSend{id:messagesend;onHeightChanged: newsView.positionViewAtBeginning()} header: MessageSend{id:messagesend;onHeightChanged: newsView.positionViewAtBeginning()}
@ -565,13 +395,6 @@ StackView{
newsSwipeview.height=rootStackItem.height-12*mm; newsSwipeview.height=rootStackItem.height-12*mm;
newsSwipeview.y=5*mm; newsSwipeview.y=5*mm;
rootStackItem.state="" 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{
login.hasOwnProperty("newsViewType")?newstab.newstabstatus=login.newsViewType:"Conversations" login.hasOwnProperty("newsViewType")?newstab.newstabstatus=login.newsViewType:"Conversations"
var messagetype=0; var messagetype=0;
switch(newsSwipeview.stacktype){ switch(newsSwipeview.stacktype){

View file

@ -37,8 +37,8 @@ import QtQuick 2.9
Rectangle{ Rectangle{
color:"black" color:"black"
//border.color: "light grey" //border.color: "light grey"
width:newscolumn.width/2; width:toprow.width/2;
height:newscolumn.width/3//video.hasVideo?newscolumn.width/4*3:10*mm height:toprow.width/3//video.hasVideo?newscolumn.width/4*3:10*mm
property var attachment:({}) property var attachment:({})
Text{ Text{
id:noticeText id:noticeText
@ -54,11 +54,13 @@ Rectangle{
MouseArea {anchors.fill:parent; MouseArea {anchors.fill:parent;
onClicked:{ onClicked:{
if(attachment.mimetype=="video/youtube"){ if(attachment.mimetype=="video/youtube"){
var component = Qt.createComponent("qrc:/qml/newsqml/NewsYplayer.qml"); root.push("qrc:/qml/newsqml/NewsYplayer.qml",{"ytcode":attachment.url,"mimetype":attachment.mimetype});
var videoQml = component.createObject(root,{"ytcode":attachment.url,"mimetype":attachment.mimetype}); // var component = Qt.createComponent("qrc:/qml/newsqml/NewsYplayer.qml");
// var videoQml = component.createObject(root,{"ytcode":attachment.url,"mimetype":attachment.mimetype});
} else { } else {
var component = Qt.createComponent("qrc:/qml/newsqml/NewsVideoLarge.qml"); root.push("qrc:/qml/newsqml/NewsVideoLarge.qml",{"source": attachment.url,"mimetype": attachment.mimetype});
var videoQml = component.createObject(root,{"source": attachment.url,"mimetype": attachment.mimetype}); // var component = Qt.createComponent("qrc:/qml/newsqml/NewsVideoLarge.qml");
// var videoQml = component.createObject(root,{"source": attachment.url,"mimetype": attachment.mimetype});
} }
} }
} }

View file

@ -64,7 +64,8 @@ Rectangle{
MouseArea { MouseArea {
anchors.fill:parent; anchors.fill:parent;
onClicked:{ onClicked:{
newsvideofullscreen.destroy(); root.pop()
//newsvideofullscreen.destroy();
} }
} }
} }

View file

@ -69,7 +69,10 @@ Rectangle{
opacity = 0 opacity = 0
} }
onTitleChanged: { onTitleChanged: {
if (title==2){newsYplayer.destroy()} if (title==2){
root.pop();
//newsYplayer.destroy(
}
} }
} }
} }

View file

@ -31,7 +31,6 @@
import QtQuick 2.0 import QtQuick 2.0
import QtQuick.Controls 2.4 import QtQuick.Controls 2.4
//import QtQuick.Controls.Styles 1.4
import "qrc:/js/news.js" as Newsjs import "qrc:/js/news.js" as Newsjs
import "qrc:/js/helper.js" as Helperjs import "qrc:/js/helper.js" as Helperjs
import "qrc:/qml/genericqml" import "qrc:/qml/genericqml"
@ -39,9 +38,9 @@ import "qrc:/qml/genericqml"
Item { Item {
id: newsitem id: newsitem
width: parent.width width: parent.width
height:toprow.height+friendicaActivities.height+controlrow.height+1//Math.max((itemMessage.height+topFlow.height+friendicaActivities.height+4*mm),profileImage.height+user_name.height+mm) height:toprow.height+friendicaActivities.height+controlrow.height+conversationColumn.height+1//Math.max((itemMessage.height+topFlow.height+friendicaActivities.height+4*mm),profileImage.height+user_name.height+mm)
property int itemindex: index property int itemindex: index
property var newsitemobject:model.newsitemobject
property string attending: "" property string attending: ""
onAttendingChanged: {attendLabel.visible=true; onAttendingChanged: {attendLabel.visible=true;
attendLabel.text= qsTr("attending: ")+ qsTr(attending)} attendLabel.text= qsTr("attending: ")+ qsTr(attending)}
@ -57,6 +56,14 @@ Item {
return fulltext.match(/\s+[#]+[A-Za-z0-9-_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]+/g) return fulltext.match(/\s+[#]+[A-Za-z0-9-_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]+/g)
} }
function pushConversation(){
if (model.newsitemobject.hasOwnProperty("currentconversation")){
newsStack.push("qrc:/qml/newsqml/Conversation.qml",{"news": model.newsitemobject.currentconversation})}
else{newsStack.push("qrc:/qml/newsqml/Conversation.qml")};
showConversation(index,newsitemobject)
}
Rectangle{width:newsitem.width; height: 1; anchors.bottom: newsitem.bottom; color:"light grey"} Rectangle{width:newsitem.width; height: 1; anchors.bottom: newsitem.bottom; color:"light grey"}
Rectangle{ Rectangle{
@ -64,97 +71,106 @@ Item {
height:newsitem.height-1 height:newsitem.height-1
color: "white"//(newsitemobject.messagetype==1)?"#ffe6e6" : "white" color: "white"//(newsitemobject.messagetype==1)?"#ffe6e6" : "white"
Row{id:toprow // Row{id:toprow
Column { // Column {
id: authorcolumn // id: authorcolumn
width: 8*mm // width: 8*mm
Image {
id:profileImage // }
source: ((newsitemobject.user.profile_image!="") && (typeof(newsitemobject.user.profile_image)=="string"))? "file://"+newsitemobject.user.profile_image : newsitemobject.user.profile_image_url Column {
x:1 id:toprow //newscolumn
width: 7*mm width: newsitem.width//-8*mm
height: 7*mm
Item{
height: Math.max(profileImage.height+mm,topFlow.implicitHeight+mm)
width: parent.width
MouseArea{ MouseArea{
anchors.fill: parent anchors.fill: parent
onClicked:{ onClicked:{
showContact(newsitemobject.user)} showContact(newsitemobject.user)}
} }
onStatusChanged: if (profileImage.status == Image.Error) {source="qrc:/images/defaultcontact.jpg"} Image {
} id:profileImage
Label { source: ((newsitemobject.user.profile_image!="") && (typeof(newsitemobject.user.profile_image)=="string"))? "file://"+newsitemobject.user.profile_image : newsitemobject.user.profile_image_url
id:user_name x:1
color: "grey" y:1
width:parent.width width: 7*mm
font.pixelSize: 1.5*mm height: 7*mm
wrapMode: Text.WrapAtWordBoundaryOrAnywhere //radius:mm
text: newsitemobject.user.name+forumname
}
}
Column {
id:newscolumn
width: newsitem.width-8*mm
Flow{ onStatusChanged: if (profileImage.status == Image.Error) {source="qrc:/images/defaultcontact.jpg"}
id:topFlow
spacing: mm
width:parent.width
Label {
id:messageTypeLabel
color: "grey"
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 { Flow{
id:createdAtLabel id:topFlow
color: "grey" spacing: mm
font.pixelSize: 1.5*mm width:parent.width-8*mm
horizontalAlignment: Label.AlignRight anchors.left: profileImage.right
text: dateDiff anchors.margins: mm
} Label {
Label { id:user_name
id:replytoLabel //color: "grey"
color: "grey" width:parent.width
font.pixelSize: 1.5*mm font.bold: true
font.family: "Noto Sans" font.pixelSize: 2.5*mm
horizontalAlignment: Label.AlignRight wrapMode: Text.WrapAtWordBoundaryOrAnywhere
text: try {qsTr("In reply to ")+newsitemobject.reply_user.screen_name text: newsitemobject.user.name+" (@"+newsitemobject.user.screen_name+")"+newsitemobject.forumname
}catch(e){" "}
} }
Label { Label {
id:newscountLabel id:messageTypeLabel
visible:((newstabstatus=="Conversations")&&(newsitemobject.newscount>1))?true:false color: "grey"
color: "grey" text: if (newsitemobject.messagetype==1){ qsTr("Direct Message")} else if(newsitemobject.messagetype==2) {" Notification"} else {qsTr("Source: ")+newsitemobject.source}
height:3.5*mm font.pixelSize: 1.5*mm
font.pixelSize: 1.5*mm }
font.bold: true Label {
horizontalAlignment: Label.AlignRight id:createdAtLabel
text: try {(newsitemobject.newscount-1)+qsTr(" comments") }catch(e){" "} color: "grey"
MouseArea{ font.pixelSize: 1.5*mm
anchors.fill:parent horizontalAlignment: Label.AlignRight
onClicked: { text: newsitemobject.dateDiff
newsStack.push("qrc:/qml/newsqml/Conversation.qml"); }
showConversation(index,newsitemobject) Label {
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){" "}
} }
}
// Label {
// id:newscountLabel
// visible:((newstabstatus=="Conversations")&&(newsitemobject.newscount>1))?true:false
// color: "grey"
// height:3.5*mm
// font.pixelSize: 1.5*mm
// font.bold: true
// horizontalAlignment: Label.AlignRight
// text: try {(newsitemobject.newscount-1)+qsTr(" comments") }catch(e){" "}
// MouseArea{
// anchors.fill:parent
// onClicked: {
// pushConversation();
// }
// }
// }
} }
} }
// Column{ id: messageColumn
Column{ id: messageColumn // //anchors.top:topFlow.bottom
//anchors.top:topFlow.bottom // width:parent.width
width:parent.width // spacing:mm
spacing:mm // clip:true
clip:true // height: newsitemobject.nsfw?5*mm:Math.min(implicitHeight,3/4*root.height)
height: newsitemobject.nsfw?5*mm:Math.min(implicitHeight,3/4*root.height) MouseArea{
MouseArea{ width: newsitem.width-8*mm-2
width: newsitem.width-8*mm-2 height: itemMessage.height
height: itemMessage.height onPressAndHold: {
onPressAndHold: { pushConversation();
newsStack.push("qrc:/qml/newsqml/Conversation.qml"); }
showConversation(index,newsitemobject)
}
Text { Text {
color: "#404040" color: "#404040"
linkColor: "light green" linkColor: "light green"
@ -162,12 +178,12 @@ Item {
textFormat: Text.RichText textFormat: Text.RichText
font.family: "Noto Sans" font.family: "Noto Sans"
text: newsitemobject.statusnet_html//newsitemobject.attachmentList.length>0?newsitemobject.text : newsitemobject.statusnet_html text: newsitemobject.statusnet_html//newsitemobject.attachmentList.length>0?newsitemobject.text : newsitemobject.statusnet_html
width: newsitem.width-8*mm-2 width: newsitem.width-2
height: implicitHeight height:newsitemobject.nsfw?5*mm:Math.min(implicitHeight,3/4*root.height)
//height: implicitHeight
wrapMode: Text.Wrap wrapMode: Text.Wrap
clip:true clip:true
//MouseArea{anchors.fill:parent;onClicked: print("Test")} onLinkActivated:{
onLinkActivated:{
Qt.openUrlExternally(link)} Qt.openUrlExternally(link)}
Component.onCompleted:{ Component.onCompleted:{
if (newsitemobject.messagetype==0){ if (newsitemobject.messagetype==0){
@ -182,27 +198,35 @@ Item {
for(var attachments in newsitemobject.attachmentList){// (newsitemobject.attachmentList[attachments].url); for(var attachments in newsitemobject.attachmentList){// (newsitemobject.attachmentList[attachments].url);
if(newsitemobject.attachmentList[attachments].mimetype.substring(0,5)=="image"){ if(newsitemobject.attachmentList[attachments].mimetype.substring(0,5)=="image"){
var component = Qt.createComponent("qrc:/qml/newsqml/NewsImage.qml"); var component = Qt.createComponent("qrc:/qml/newsqml/NewsImage.qml");
var imageQml = component.createObject(messageColumn,{"source":newsitemobject.attachmentList[attachments].url,"mimetype":newsitemobject.attachmentList[attachments].mimetype}); var imageQml = component.createObject(toprow,{"source":newsitemobject.attachmentList[attachments].url,"mimetype":newsitemobject.attachmentList[attachments].mimetype});
} }
else if(newsitemobject.attachmentList[attachments].mimetype=="text/html"){ else if(newsitemobject.attachmentList[attachments].mimetype=="text/html"){
var component = Qt.createComponent("qrc:/qml/newsqml/NewsLink.qml"); var component = Qt.createComponent("qrc:/qml/newsqml/NewsLink.qml");
var linkQml = component.createObject(messageColumn,{"url":newsitemobject.attachmentList[attachments].url}); var linkQml = component.createObject(toprow,{"url":newsitemobject.attachmentList[attachments].url});
} }
else { else {
var component = Qt.createComponent("qrc:/qml/newsqml/NewsVideo.qml"); var component = Qt.createComponent("qrc:/qml/newsqml/NewsVideo.qml");
//var videoQml = component.createObject(messageColumn,{"source":newsitemobject.attachmentList[attachments].url,"mimetype":newsitemobject.attachmentList[attachments].mimetype}); //var videoQml = component.createObject(messageColumn,{"source":newsitemobject.attachmentList[attachments].url,"mimetype":newsitemobject.attachmentList[attachments].mimetype});
var videoQml = component.createObject(messageColumn,{"attachment":newsitemobject.attachmentList[attachments]}); var videoQml = component.createObject(toprow,{"attachment":newsitemobject.attachmentList[attachments]});
} }
} }
} }
if (newsitemobject.hasOwnProperty("lastcomment")){
var moreComponent = Qt.createComponent("qrc:/qml/newsqml/MoreComments.qml");
var conversationQml = moreComponent.createObject(conversationColumn,{"comments":newsitemobject.newscount-1});
var commentComponent = Qt.createComponent("qrc:/qml/newsqml/Newsitem.qml");
var conversationQml = commentComponent.createObject(conversationColumn,{"newsitemobject":newsitemobject.lastcomment});
}
} }
}} }}
} //}
BlueButton{ BlueButton{
width: newsitem.width-8*mm-2 width: newsitem.width-8*mm-2
height:5*mm height:5*mm
//anchors.bottom: messageColumn.bottom//itemMessage.bottom //anchors.bottom: messageColumn.bottom//itemMessage.bottom
visible: messageColumn.implicitHeight>3/4*root.height || newsitemobject.nsfw//itemMessage.implicitHeight>3/4*root.height visible: itemMessage.implicitHeight>3/4*root.height || newsitemobject.nsfw//messageColumn.implicitHeight>3/4*root.height || newsitemobject.nsfw//itemMessage.implicitHeight>3/4*root.height
text:"\uf078" text:"\uf078"
fontColor:"grey" fontColor:"grey"
border.color: "transparent" border.color: "transparent"
@ -214,15 +238,15 @@ Item {
radius:0 radius:0
onClicked: { onClicked: {
if (text=="\uf078"){ if (text=="\uf078"){
messageColumn.height=messageColumn.implicitHeight+10*mm;text="\uf077" itemMessage.height=itemMessage.implicitHeight+10*mm;text="\uf077"
} else { } else {
messageColumn.height=Math.min(messageColumn.implicitHeight,3/4*root.height); itemMessage.height=Math.min(itemMessage.implicitHeight,3/4*root.height);
text="\uf078"; text="\uf078";
newsView.positionViewAtIndex(index,ListView.Beginning); newsView.positionViewAtIndex(index,ListView.Beginning);
} }
} }
} }
} //}
} }
Flow{ Flow{
id:friendicaActivities id:friendicaActivities
@ -233,7 +257,7 @@ Item {
Label{color: "grey" Label{color: "grey"
height:3.5*mm height:3.5*mm
font.pixelSize: 1.5*mm font.pixelSize: 1.5*mm
text: friendica_activities.likeText text: newsitemobject.friendica_activities_view.likeText
MouseArea{ MouseArea{
anchors.fill: parent anchors.fill: parent
onClicked: { showActivityContacts(newsitemobject.friendica_activities.like)} onClicked: { showActivityContacts(newsitemobject.friendica_activities.like)}
@ -242,160 +266,156 @@ Item {
Label{color: "grey" Label{color: "grey"
height:3.5*mm height:3.5*mm
font.pixelSize: 1.5*mm font.pixelSize: 1.5*mm
text: friendica_activities.dislikeText text: newsitemobject.friendica_activities_view.dislikeText
MouseArea{ MouseArea{
anchors.fill: parent anchors.fill: parent
onClicked: { showActivityContacts(newsitemobject.friendica_activities.dislike)} onClicked: { showActivityContacts(newsitemobject.friendica_activities.dislike)}
} }
} }
Label{color: "grey" Label{color: "grey"
height:3.5*mm height:3.5*mm
font.pixelSize: 1.5*mm font.pixelSize: 1.5*mm
text: friendica_activities.attendyesText text: newsitemobject.friendica_activities_view.attendyesText
MouseArea{ MouseArea{
anchors.fill: parent anchors.fill: parent
onClicked: { showActivityContacts(newsitemobject.friendica_activities.attendyes)} onClicked: { showActivityContacts(newsitemobject.friendica_activities.attendyes)}
}} }}
Label{color: "grey" Label{color: "grey"
height:3.5*mm height:3.5*mm
font.pixelSize: 1.5*mm font.pixelSize: 1.5*mm
text: friendica_activities.attendnoText text: newsitemobject.friendica_activities_view.attendnoText
MouseArea{ MouseArea{
anchors.fill: parent anchors.fill: parent
onClicked: { showActivityContacts(newsitemobject.friendica_activities.attendno)} onClicked: { showActivityContacts(newsitemobject.friendica_activities.attendno)}
} }
} }
Label{color: "grey" Label{color: "grey"
height:3.5*mm height:3.5*mm
font.pixelSize: 1.5*mm font.pixelSize: 1.5*mm
text: friendica_activities.attendmaybeText text: newsitemobject.friendica_activities_view.attendmaybeText
MouseArea{ MouseArea{
anchors.fill: parent anchors.fill: parent
onClicked: { showActivityContacts(newsitemobject.friendica_activities.attendmaybe)} onClicked: { showActivityContacts(newsitemobject.friendica_activities.attendmaybe)}
} }
} }
Label{ Label{
id:attendLabel id:attendLabel
color: "grey" color: "grey"
height:3.5*mm height:3.5*mm
font.pixelSize: 1.5*mm font.pixelSize: 1.5*mm
horizontalAlignment: Label.AlignRight horizontalAlignment: Label.AlignRight
text: (friendica_activities.self.attending)?(qsTr("Attending: ")+ qsTr(friendica_activities.self.attending)):"" text: (newsitemobject.friendica_activities_view.self.attending)?(qsTr("Attending: ")+ qsTr(newsitemobject.friendica_activities_view.self.attending)):""
} }
} }
Row{id:controlrow Row{id:controlrow
anchors.top:friendicaActivities.bottom anchors.top:friendicaActivities.bottom
height: 4*mm
CheckBox{ CheckBox{
id:likeCheckbox id:likeCheckbox
width:10*mm width:newsitem.width/5 //10*mm
visible: ((newsitemobject.messagetype==0)||(newsitemobject.messagetype==3))? true:false height: parent.height
checked:(friendica_activities.self.liked==1)?true:false visible: ((newsitemobject.messagetype==0)||(newsitemobject.messagetype==3))? true:false
//style: CheckBoxStyle { checked:(newsitemobject.friendica_activities_view.self.liked==1)?true:false
indicator: Rectangle{
implicitWidth: 10*mm
implicitHeight:3*mm
Text{
anchors.centerIn: parent
font.pixelSize: 2.5*mm
font.family:fontAwesome.name
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}}
}
CheckBox{
id: dislikeCheckbox
width:10*mm
visible: ((newsitemobject.messagetype==0)||(newsitemobject.messagetype==3))? true:false
checked: (friendica_activities.self.disliked==1)?true:false
//style: CheckBoxStyle {
indicator: Rectangle{ indicator: Rectangle{
implicitWidth: 10*mm implicitWidth: newsitem.width/5 //10*mm
implicitHeight:3*mm implicitHeight:4*mm
Text{ Text{
anchors.centerIn: parent anchors.centerIn: parent
font.pixelSize: 2.5*mm font.pixelSize: 3*mm
font.family:fontAwesome.name
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.newsitemobject.friendica_activities_view.self.liked=0 }
else{Newsjs.like(root.login,root.db,0,"like",newsitemobject.id,root); model.newsitemobject.friendica_activities_view.self.liked=1}}
}
CheckBox{
id: dislikeCheckbox
width:newsitem.width/5 //10*mm
height: parent.height
visible: ((newsitemobject.messagetype==0)||(newsitemobject.messagetype==3))? true:false
checked: (newsitemobject.friendica_activities_view.self.disliked==1)?true:false
indicator: Rectangle{
implicitWidth: newsitem.width/5 //10*mm
implicitHeight:4*mm
Text{
anchors.centerIn: parent
font.pixelSize: 3*mm
font.family:fontAwesome.name font.family:fontAwesome.name
color:dislikeCheckbox.checked?"black": "grey" color:dislikeCheckbox.checked?"black": "grey"
text: dislikeCheckbox.checked?"\uf119"+"!":"\uf119" text: dislikeCheckbox.checked?"\uf119"+"!":"\uf119"
} }
} }
//} onClicked: {
onClicked: { if (dislikeCheckbox.checked==true){Newsjs.like(root.login,root.db,1,"dislike",newsitemobject.id,root);likeCheckbox.checked=false; model.newsitemobject.friendica_activities_view.self.disliked=0}
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.newsitemobject.friendica_activities_view.self.disliked=1}}
else {Newsjs.like(root.login,root.db,0,"dislike",newsitemobject.id,root); model.friendica_activities.self.disliked=1}} }
}
CheckBox { CheckBox {
id:favoritedCheckbox id:favoritedCheckbox
visible:((newsitemobject.messagetype==0)||(newsitemobject.messagetype==3)) visible:((newsitemobject.messagetype==0)||(newsitemobject.messagetype==3))
width: 10*mm width: newsitem.width/5 // 10*mm
//style: CheckBoxStyle { height: parent.height
indicator:Rectangle{ indicator:Rectangle{
x:4*mm implicitWidth: newsitem.width/5 //10*mm
width: 3*mm implicitHeight:4*mm
implicitHeight:4*mm Text{
Text{ anchors.centerIn: parent
color: favoritedCheckbox.checked?"black":"grey" font.pixelSize: 3*mm
font.pixelSize: 2.5*mm font.family:fontAwesome.name
text:"\uf005" color: favoritedCheckbox.checked?"black":"grey"
} text:"\uf005"
} }
//} }
checked:(newsitemobject.favorited>0) checked:(newsitemobject.favorited>0)
onClicked:{ onClicked:{
if(favoritedCheckbox.checkedState==Qt.Checked){ if(favoritedCheckbox.checkedState==Qt.Checked){
Newsjs.favorite(login,true,newsitemobject.id,root); model.newsitemobject.favorited=1} Newsjs.favorite(login,true,newsitemobject.id,root); model.newsitemobject.favorited=1}
else if(favoritedCheckbox.checkedState==Qt.Unchecked){ else if(favoritedCheckbox.checkedState==Qt.Unchecked){
Newsjs.favorite(login,false,newsitemobject.id,root);model.newsitemobject.favorited=0} Newsjs.favorite(login,false,newsitemobject.id,root);model.newsitemobject.favorited=0}
} }
} }
Rectangle{ Rectangle{
width: 10*mm width: newsitem.width/5 //10*mm
height: 4*mm height: parent.height
visible:(newsitemobject.messagetype!==2) visible:(newsitemobject.messagetype!==2)
color:"transparent" color:"transparent"
Text{ Text{
id:newsmenusymbol id:newsmenusymbol
color: "grey" color: "grey"
anchors.centerIn: parent anchors.centerIn: parent
font.pixelSize: 2.5*mm font.pixelSize: 3*mm
font.family:fontAwesome.name font.family:fontAwesome.name
text: "\uf142" text: "\uf142"
} }
MouseArea{ MouseArea{
anchors.fill:parent anchors.fill:parent
onClicked: {newsmenu.popup()}} onClicked: {newsmenu.popup()}}
}
Rectangle{
width: 10*mm
height: 4*mm
visible:(newsitemobject.messagetype!==2)&&(newstab.newstabstatus!="Conversation")
color:"transparent"
Text{
id:conversationsymbol
color: "grey"
anchors.centerIn: parent
font.pixelSize: 2.5*mm
font.family: fontAwesome.name
text: "\uf086"
}
MouseArea{
anchors.fill:parent
onClicked:{
//conversationsymbol.color="black";
// var component = Qt.createComponent("qrc:/qml/newsqml/Conversation.qml");
// var conversationItem = component.createObject(friendicaActivities);
newsStack.push("qrc:/qml/newsqml/Conversation.qml")
showConversation(index,newsitemobject)
}
}
} }
// Rectangle{
// width: 10*mm
// height: 4*mm
// visible:(newsitemobject.messagetype!==2)&&(newstab.newstabstatus!="Conversation")
// color:"transparent"
// Text{
// id:conversationsymbol
// color: "grey"
// anchors.centerIn: parent
// font.pixelSize: 2.5*mm
// font.family: fontAwesome.name
// text: "\uf086"
// }
// MouseArea{
// anchors.fill:parent
// onClicked:{
// if (newsitemobject.hasOwnProperty("currentconversation")){newsStack.push("qrc:/qml/newsqml/Conversation.qml",{"news": newsitemobject.currentconversation})}
// else{newsStack.push("qrc:/qml/newsqml/Conversation.qml")};
// showConversation(index,newsitemobject)
// }
// }
// }
} }
@ -437,10 +457,7 @@ Item {
Action { Action {
text: qsTr("Conversation") text: qsTr("Conversation")
onTriggered: { onTriggered: {
conversationsymbol.color="black"; pushConversation();
var component = Qt.createComponent("qrc:/qml/newsqml/Conversation.qml");
var conversationItem = component.createObject(friendicaActivities,{"news":newsitemobject.chatArray});
showConversation(index,newsitemobject)
} }
} }
@ -456,17 +473,17 @@ Item {
Action{ Action{
text:qsTr("yes") text:qsTr("yes")
onTriggered: {Newsjs.attend(root.login,db,"yes",newsitemobject.id,root,function(){ onTriggered: {Newsjs.attend(root.login,db,"yes",newsitemobject.id,root,function(){
model.friendica_activities.self.attending="yes";attending="yes"}) model.newsitemobject.friendica_activities_view.self.attending="yes";attending="yes"})
} }
} }
Action{text:qsTr("maybe") Action{text:qsTr("maybe")
onTriggered: {Newsjs.attend(root.login,db,"maybe",newsitemobject.id,root,function(){ onTriggered: {Newsjs.attend(root.login,db,"maybe",newsitemobject.id,root,function(){
model.friendica_activities.self.attending="maybe";attending="maybe"}) model.newsitemobject.friendica_activities_view.self.attending="maybe";attending="maybe"})
} }
} }
Action{text:qsTr("no") Action{text:qsTr("no")
onTriggered: {Newsjs.attend(root.login,db,"no",newsitemobject.id,root,function(){ onTriggered: {Newsjs.attend(root.login,db,"no",newsitemobject.id,root,function(){
model.friendica_activities.self.attending="no";attending="no"})} model.newsitemobject.friendica_activities_view.self.attending="no";attending="no"})}
} }
} }
@ -485,4 +502,11 @@ Item {
// onTriggered:Qt.openUrlExternally(login.server+"/display/"+newsitemobject // onTriggered:Qt.openUrlExternally(login.server+"/display/"+newsitemobject
//} //}
} }
}} Column{
id:conversationColumn
anchors.top:controlrow.bottom
anchors.right: parent.right
width: newsitem.width-5*mm
}
}
}

View file

@ -5,8 +5,8 @@
<name>AccountPage</name> <name>AccountPage</name>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="59"/> <location filename="../qml/configqml/AccountPage.qml" line="59"/>
<location filename="../qml/configqml/AccountPage.qml" line="370"/> <location filename="../qml/configqml/AccountPage.qml" line="373"/>
<location filename="../qml/configqml/AccountPage.qml" line="393"/> <location filename="../qml/configqml/AccountPage.qml" line="396"/>
<source>User</source> <source>User</source>
<translation>Name</translation> <translation>Name</translation>
</message> </message>
@ -37,8 +37,8 @@
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="184"/> <location filename="../qml/configqml/AccountPage.qml" line="184"/>
<location filename="../qml/configqml/AccountPage.qml" line="321"/> <location filename="../qml/configqml/AccountPage.qml" line="322"/>
<location filename="../qml/configqml/AccountPage.qml" line="345"/> <location filename="../qml/configqml/AccountPage.qml" line="348"/>
<source>Error</source> <source>Error</source>
<translation>Fehler</translation> <translation>Fehler</translation>
</message> </message>
@ -48,52 +48,52 @@
<translation>Kurznamen mit @ Zeichen werden derzeit nicht unterstützt.</translation> <translation>Kurznamen mit @ Zeichen werden derzeit nicht unterstützt.</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="304"/> <location filename="../qml/configqml/AccountPage.qml" line="305"/>
<source>Confirm</source> <source>Confirm</source>
<translation>Bestätigen</translation> <translation>Bestätigen</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="310"/> <location filename="../qml/configqml/AccountPage.qml" line="311"/>
<source>No server given! </source> <source>No server given! </source>
<translation>Kein Server angegeben!</translation> <translation>Kein Server angegeben!</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="311"/> <location filename="../qml/configqml/AccountPage.qml" line="312"/>
<source>No nickname given! </source> <source>No nickname given! </source>
<translation>Kein Kurzname angegeben!</translation> <translation>Kein Kurzname angegeben!</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="312"/> <location filename="../qml/configqml/AccountPage.qml" line="313"/>
<source>No password given! </source> <source>No password given! </source>
<translation>Kein Passwort angegeben!</translation> <translation>Kein Passwort angegeben!</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="313"/> <location filename="../qml/configqml/AccountPage.qml" line="314"/>
<source>No image directory given!</source> <source>No image directory given!</source>
<translation>Kein Verzeichnis für Bilder angegeben!</translation> <translation>Kein Verzeichnis für Bilder angegeben!</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="321"/> <location filename="../qml/configqml/AccountPage.qml" line="322"/>
<source>Wrong password!</source> <source>Wrong password!</source>
<translation>Falsches Passwort!</translation> <translation>Falsches Passwort!</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="340"/> <location filename="../qml/configqml/AccountPage.qml" line="343"/>
<source>Success</source> <source>Success</source>
<translation>Bestätigt</translation> <translation>Bestätigt</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="340"/> <location filename="../qml/configqml/AccountPage.qml" line="343"/>
<source>Name</source> <source>Name</source>
<translation>Name</translation> <translation>Name</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="420"/> <location filename="../qml/configqml/AccountPage.qml" line="424"/>
<source>Timeline</source> <source>Timeline</source>
<translation>Chronologisch</translation> <translation>Chronologisch</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="425"/> <location filename="../qml/configqml/AccountPage.qml" line="429"/>
<source>Conversations</source> <source>Conversations</source>
<translation>Unterhaltungen</translation> <translation>Unterhaltungen</translation>
</message> </message>
@ -119,7 +119,12 @@
<translation>Max. Nachr.</translation> <translation>Max. Nachr.</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/ConfigPage.qml" line="143"/> <location filename="../qml/configqml/ConfigPage.qml" line="127"/>
<source>Hide #nsfw?</source>
<translation>#nsfw minimieren?</translation>
</message>
<message>
<location filename="../qml/configqml/ConfigPage.qml" line="161"/>
<source>Sync</source> <source>Sync</source>
<translation>Autom. Aktualisierung</translation> <translation>Autom. Aktualisierung</translation>
</message> </message>
@ -234,7 +239,7 @@
<context> <context>
<name>ContactComponent</name> <name>ContactComponent</name>
<message> <message>
<location filename="../qml/contactqml/ContactComponent.qml" line="41"/> <location filename="../qml/genericqml/ContactComponent.qml" line="41"/>
<source>Connect</source> <source>Connect</source>
<translation>Kontaktanfrage</translation> <translation>Kontaktanfrage</translation>
</message> </message>
@ -308,22 +313,22 @@
<context> <context>
<name>FriendsTab</name> <name>FriendsTab</name>
<message> <message>
<location filename="../qml/contactqml/FriendsTab.qml" line="80"/> <location filename="../qml/contactqml/FriendsTab.qml" line="86"/>
<source>Me</source> <source>Me</source>
<translation>Ich</translation> <translation>Ich</translation>
</message> </message>
<message> <message>
<location filename="../qml/contactqml/FriendsTab.qml" line="84"/> <location filename="../qml/contactqml/FriendsTab.qml" line="90"/>
<source>Friends</source> <source>Friends</source>
<translation>Freunde</translation> <translation>Freunde</translation>
</message> </message>
<message> <message>
<location filename="../qml/contactqml/FriendsTab.qml" line="88"/> <location filename="../qml/contactqml/FriendsTab.qml" line="94"/>
<source>Contacts</source> <source>Contacts</source>
<translation>Kontakte</translation> <translation>Kontakte</translation>
</message> </message>
<message> <message>
<location filename="../qml/contactqml/FriendsTab.qml" line="92"/> <location filename="../qml/contactqml/FriendsTab.qml" line="98"/>
<source>Groups</source> <source>Groups</source>
<translation>Gruppen</translation> <translation>Gruppen</translation>
</message> </message>
@ -360,22 +365,22 @@
<translation>Beschreibung</translation> <translation>Beschreibung</translation>
</message> </message>
<message> <message>
<location filename="../qml/photoqml/ImageUploadDialog.qml" line="273"/> <location filename="../qml/photoqml/ImageUploadDialog.qml" line="287"/>
<source>Upload</source> <source>Upload</source>
<translation>Hochladen</translation> <translation>Hochladen</translation>
</message> </message>
<message> <message>
<location filename="../qml/photoqml/ImageUploadDialog.qml" line="273"/> <location filename="../qml/photoqml/ImageUploadDialog.qml" line="287"/>
<source>Change</source> <source>Change</source>
<translation>Ändern</translation> <translation>Ändern</translation>
</message> </message>
<message> <message>
<location filename="../qml/photoqml/ImageUploadDialog.qml" line="276"/> <location filename="../qml/photoqml/ImageUploadDialog.qml" line="290"/>
<source>Error</source> <source>Error</source>
<translation>Fehler</translation> <translation>Fehler</translation>
</message> </message>
<message> <message>
<location filename="../qml/photoqml/ImageUploadDialog.qml" line="276"/> <location filename="../qml/photoqml/ImageUploadDialog.qml" line="290"/>
<source> No album name given</source> <source> No album name given</source>
<translation>Kein Albumname angegeben</translation> <translation>Kein Albumname angegeben</translation>
</message> </message>
@ -383,51 +388,56 @@
<context> <context>
<name>MessageSend</name> <name>MessageSend</name>
<message> <message>
<location filename="../qml/newsqml/MessageSend.qml" line="72"/> <location filename="../qml/newsqml/MessageSend.qml" line="197"/>
<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> <source>to:</source>
<translation>an:</translation> <translation>an:</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/MessageSend.qml" line="200"/> <location filename="../qml/newsqml/MessageSend.qml" line="226"/>
<source>Title (optional)</source> <source>Title (optional)</source>
<translation>Überschrift (optional)</translation> <translation>Überschrift (optional)</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/MessageSend.qml" line="222"/> <location filename="../qml/newsqml/MessageSend.qml" line="248"/>
<source>What&apos;s on your mind?</source> <source>What&apos;s on your mind?</source>
<translation>Woran denkst du gerade?</translation> <translation>Woran denkst du gerade?</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/MessageSend.qml" line="319"/> <location filename="../qml/newsqml/MessageSend.qml" line="422"/>
<location filename="../qml/newsqml/MessageSend.qml" line="367"/> <location filename="../qml/newsqml/MessageSend.qml" line="473"/>
<source>Error</source> <source>Error</source>
<translation>Fehler</translation> <translation>Fehler</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/MessageSend.qml" line="319"/> <location filename="../qml/newsqml/MessageSend.qml" line="422"/>
<source>Only one attachment supported at the moment. <source>Only one attachment supported at the moment.
Remove other attachment first!</source> Remove other attachment first!</source>
<translation>Nur ein Anhang derzeit unterstützt. <translation>Nur ein Anhang derzeit unterstützt.
Lösche zuerst den anderen Anhang!</translation> Lösche zuerst den anderen Anhang!</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/MessageSend.qml" line="367"/> <location filename="../qml/newsqml/MessageSend.qml" line="473"/>
<source>No receiver supplied!</source> <source>No receiver supplied!</source>
<translation>Kein Empfänger angegeben!</translation> <translation>Kein Empfänger angegeben!</translation>
</message> </message>
</context> </context>
<context>
<name>MoreComments</name>
<message>
<location filename="../qml/newsqml/MoreComments.qml" line="53"/>
<source>Show all comments</source>
<translation>Alle Kommentare</translation>
</message>
</context>
<context> <context>
<name>NewsStack</name> <name>NewsStack</name>
<message> <message>
<location filename="../qml/newsqml/NewsStack.qml" line="158"/> <location filename="../qml/newsqml/NewsStack.qml" line="189"/>
<source>Network Error</source> <source>Network Error</source>
<translation>Netzwerk-Fehler</translation> <translation>Netzwerk-Fehler</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/NewsStack.qml" line="376"/> <location filename="../qml/newsqml/NewsStack.qml" line="237"/>
<source>More</source> <source>More</source>
<translation>Mehr</translation> <translation>Mehr</translation>
</message> </message>
@ -490,82 +500,81 @@
<context> <context>
<name>Newsitem</name> <name>Newsitem</name>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="47"/> <location filename="../qml/newsqml/Newsitem.qml" line="46"/>
<source>attending: </source> <source>attending: </source>
<translation>Teilnahme</translation> <translation>Teilnahme</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="105"/> <location filename="../qml/newsqml/Newsitem.qml" line="123"/>
<source>Source: </source> <source>Source: </source>
<translation>Quelle: </translation> <translation>Quelle: </translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="105"/> <location filename="../qml/newsqml/Newsitem.qml" line="123"/>
<source>Direct Message</source> <source>Direct Message</source>
<translation>Direktnachricht</translation> <translation>Direktnachricht</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="121"/> <location filename="../qml/newsqml/Newsitem.qml" line="139"/>
<source>In reply to </source> <source>In reply to </source>
<translation>Antwort an </translation> <translation>Antwort an </translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="133"/>
<source> comments</source> <source> comments</source>
<translation> Kommentare</translation> <translation type="vanished"> Kommentare</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="282"/> <location filename="../qml/newsqml/Newsitem.qml" line="307"/>
<source>Attending: </source> <source>Attending: </source>
<translation>Teilnahme: </translation> <translation>Teilnahme: </translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="411"/> <location filename="../qml/newsqml/Newsitem.qml" line="432"/>
<source>Reply</source> <source>Reply</source>
<translation>Antworten</translation> <translation>Antworten</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="420"/> <location filename="../qml/newsqml/Newsitem.qml" line="444"/>
<source>DM</source> <source>DM</source>
<translation>Direktnachricht</translation> <translation>Direktnachricht</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="426"/> <location filename="../qml/newsqml/Newsitem.qml" line="450"/>
<source>Repost</source> <source>Repost</source>
<translation>Teilen</translation> <translation>Teilen</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="429"/> <location filename="../qml/newsqml/Newsitem.qml" line="453"/>
<source>Success!</source> <source>Success!</source>
<translation>Erledigt!</translation> <translation>Erledigt!</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="434"/> <location filename="../qml/newsqml/Newsitem.qml" line="458"/>
<source>Conversation</source> <source>Conversation</source>
<translation>Unterhaltung</translation> <translation>Unterhaltung</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="444"/> <location filename="../qml/newsqml/Newsitem.qml" line="465"/>
<source>Attending</source> <source>Attending</source>
<translation>Teilnahme</translation> <translation>Teilnahme</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="453"/> <location filename="../qml/newsqml/Newsitem.qml" line="474"/>
<source>yes</source> <source>yes</source>
<translation>ja</translation> <translation>ja</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="458"/> <location filename="../qml/newsqml/Newsitem.qml" line="479"/>
<source>maybe</source> <source>maybe</source>
<translation>vielleicht</translation> <translation>vielleicht</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="463"/> <location filename="../qml/newsqml/Newsitem.qml" line="484"/>
<source>no</source> <source>no</source>
<translation>nein</translation> <translation>nein</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="470"/> <location filename="../qml/newsqml/Newsitem.qml" line="491"/>
<source>Delete</source> <source>Delete</source>
<translation>Löschen</translation> <translation>Löschen</translation>
</message> </message>
@ -879,7 +888,7 @@
<translation>Akt.-intervall (0=keine)</translation> <translation>Akt.-intervall (0=keine)</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/SyncConfig.qml" line="75"/> <location filename="../qml/configqml/SyncConfig.qml" line="74"/>
<source>Min.</source> <source>Min.</source>
<translation>Min.</translation> <translation>Min.</translation>
</message> </message>
@ -887,57 +896,57 @@
<context> <context>
<name>friendiqa</name> <name>friendiqa</name>
<message> <message>
<location filename="../qml/friendiqa.qml" line="161"/> <location filename="../qml/friendiqa.qml" line="159"/>
<source>Refresh</source> <source>Refresh</source>
<translation>Aktualisieren</translation> <translation>Aktualisieren</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="179"/> <location filename="../qml/friendiqa.qml" line="176"/>
<source>Timeline</source> <source>Timeline</source>
<translation>Chronologisch</translation> <translation>Chronologisch</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="192"/> <location filename="../qml/friendiqa.qml" line="189"/>
<source>Conversations</source> <source>Conversations</source>
<translation>Unterhaltungen</translation> <translation>Unterhaltungen</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="205"/> <location filename="../qml/friendiqa.qml" line="202"/>
<source>Favorites</source> <source>Favorites</source>
<translation>Markierte News</translation> <translation>Markierte News</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="217"/> <location filename="../qml/friendiqa.qml" line="214"/>
<source>Replies</source> <source>Replies</source>
<translation>Interaktionen</translation> <translation>Interaktionen</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="231"/> <location filename="../qml/friendiqa.qml" line="228"/>
<source>Public Timeline</source> <source>Public Timeline</source>
<translation>öff. Timeline</translation> <translation>öff. Timeline</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="244"/> <location filename="../qml/friendiqa.qml" line="241"/>
<source>Group news</source> <source>Group news</source>
<translation>News Gruppe</translation> <translation>News Gruppe</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="257"/> <location filename="../qml/friendiqa.qml" line="254"/>
<source>Search</source> <source>Search</source>
<translation>Suche</translation> <translation>Suche</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="270"/> <location filename="../qml/friendiqa.qml" line="267"/>
<source>Settings</source> <source>Settings</source>
<translation>Einstellungen</translation> <translation>Einstellungen</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="281"/> <location filename="../qml/friendiqa.qml" line="278"/>
<source>Accounts</source> <source>Accounts</source>
<translation>Konten</translation> <translation>Konten</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="294"/> <location filename="../qml/friendiqa.qml" line="291"/>
<source>Quit</source> <source>Quit</source>
<translation>Schliessen</translation> <translation>Schliessen</translation>
</message> </message>
@ -945,131 +954,131 @@
<context> <context>
<name>newsworker</name> <name>newsworker</name>
<message> <message>
<location filename="../js/newsworker.js" line="66"/> <location filename="../js/newsworker.js" line="48"/>
<source>likes this.</source> <source>likes this.</source>
<translation>mag das.</translation> <translation>mag das.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="67"/> <location filename="../js/newsworker.js" line="49"/>
<source>like this.</source> <source>like this.</source>
<translation>mögen das.</translation> <translation>mögen das.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="70"/> <location filename="../js/newsworker.js" line="52"/>
<source>doesn&apos;t like this.</source> <source>doesn&apos;t like this.</source>
<translation>mag das nicht.</translation> <translation>mag das nicht.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="71"/> <location filename="../js/newsworker.js" line="53"/>
<source>don&apos;t like this.</source> <source>don&apos;t like this.</source>
<translation>mögen das nicht.</translation> <translation>mögen das nicht.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="74"/> <location filename="../js/newsworker.js" line="56"/>
<source>will attend.</source> <source>will attend.</source>
<translation>nehmen teil.</translation> <translation>nehmen teil.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="75"/> <location filename="../js/newsworker.js" line="57"/>
<source>persons will attend.</source> <source>persons will attend.</source>
<translation>Personen nehmen teil.</translation> <translation>Personen nehmen teil.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="78"/> <location filename="../js/newsworker.js" line="60"/>
<source>will not attend.</source> <source>will not attend.</source>
<translation>nimmt nicht teil.</translation> <translation>nimmt nicht teil.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="79"/> <location filename="../js/newsworker.js" line="61"/>
<source>persons will not attend.</source> <source>persons will not attend.</source>
<translation>Personen nehmen nicht teil.</translation> <translation>Personen nehmen nicht teil.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="82"/> <location filename="../js/newsworker.js" line="64"/>
<source>may attend.</source> <source>may attend.</source>
<translation>nimmt vielleicht teil.</translation> <translation>nimmt vielleicht teil.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="83"/> <location filename="../js/newsworker.js" line="65"/>
<source>persons may attend.</source> <source>persons may attend.</source>
<translation>Personen nehmen vielleicht teil.</translation> <translation>Personen nehmen vielleicht teil.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="87"/> <location filename="../js/newsworker.js" line="69"/>
<source>yes</source> <source>yes</source>
<translation>ja</translation> <translation>ja</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="88"/> <location filename="../js/newsworker.js" line="70"/>
<source>no</source> <source>no</source>
<translation>nein</translation> <translation>nein</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="89"/> <location filename="../js/newsworker.js" line="71"/>
<source>maybe</source> <source>maybe</source>
<translation>vielleicht</translation> <translation>vielleicht</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="174"/> <location filename="../js/newsworker.js" line="162"/>
<source>seconds</source> <source>seconds</source>
<translation>Sekunden</translation> <translation>Sekunden</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="174"/> <location filename="../js/newsworker.js" line="162"/>
<location filename="../js/newsworker.js" line="175"/> <location filename="../js/newsworker.js" line="163"/>
<location filename="../js/newsworker.js" line="176"/> <location filename="../js/newsworker.js" line="164"/>
<location filename="../js/newsworker.js" line="177"/> <location filename="../js/newsworker.js" line="165"/>
<location filename="../js/newsworker.js" line="178"/> <location filename="../js/newsworker.js" line="166"/>
<location filename="../js/newsworker.js" line="179"/> <location filename="../js/newsworker.js" line="167"/>
<location filename="../js/newsworker.js" line="180"/> <location filename="../js/newsworker.js" line="168"/>
<location filename="../js/newsworker.js" line="181"/> <location filename="../js/newsworker.js" line="169"/>
<location filename="../js/newsworker.js" line="182"/> <location filename="../js/newsworker.js" line="170"/>
<location filename="../js/newsworker.js" line="183"/> <location filename="../js/newsworker.js" line="171"/>
<source>ago</source> <source>ago</source>
<translation>her</translation> <translation>her</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="175"/> <location filename="../js/newsworker.js" line="163"/>
<source>minute</source> <source>minute</source>
<translation>Minute</translation> <translation>Minute</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="176"/> <location filename="../js/newsworker.js" line="164"/>
<source>minutes</source> <source>minutes</source>
<translation>Minuten</translation> <translation>Minuten</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="177"/> <location filename="../js/newsworker.js" line="165"/>
<source>hour</source> <source>hour</source>
<translation>Stunde</translation> <translation>Stunde</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="178"/> <location filename="../js/newsworker.js" line="166"/>
<source>hours</source> <source>hours</source>
<translation>Stunden</translation> <translation>Stunden</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="179"/> <location filename="../js/newsworker.js" line="167"/>
<source>day</source> <source>day</source>
<translation>Tag</translation> <translation>Tag</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="180"/> <location filename="../js/newsworker.js" line="168"/>
<source>days</source> <source>days</source>
<translation>Tage</translation> <translation>Tage</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="181"/> <location filename="../js/newsworker.js" line="169"/>
<source>month</source> <source>month</source>
<translation>Monat</translation> <translation>Monat</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="182"/> <location filename="../js/newsworker.js" line="170"/>
<source>months</source> <source>months</source>
<translation>Monate</translation> <translation>Monate</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="183"/> <location filename="../js/newsworker.js" line="171"/>
<source>years</source> <source>years</source>
<translation></translation> <translation></translation>
</message> </message>
@ -1081,12 +1090,12 @@
<translation type="vanished">Fehler</translation> <translation type="vanished">Fehler</translation>
</message> </message>
<message> <message>
<location filename="../js/service.js" line="391"/> <location filename="../js/service.js" line="398"/>
<source>Undefined Array Error</source> <source>Undefined Array Error</source>
<translation>Antwort-Array ungültig</translation> <translation>Antwort-Array ungültig</translation>
</message> </message>
<message> <message>
<location filename="../js/service.js" line="394"/> <location filename="../js/service.js" line="401"/>
<source>JSON status Error</source> <source>JSON status Error</source>
<translation>Server-Antwort: Fehler</translation> <translation>Server-Antwort: Fehler</translation>
</message> </message>

View file

@ -5,8 +5,8 @@
<name>AccountPage</name> <name>AccountPage</name>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="59"/> <location filename="../qml/configqml/AccountPage.qml" line="59"/>
<location filename="../qml/configqml/AccountPage.qml" line="370"/> <location filename="../qml/configqml/AccountPage.qml" line="373"/>
<location filename="../qml/configqml/AccountPage.qml" line="393"/> <location filename="../qml/configqml/AccountPage.qml" line="396"/>
<source>User</source> <source>User</source>
<translation>Usuario</translation> <translation>Usuario</translation>
</message> </message>
@ -37,63 +37,63 @@
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="184"/> <location filename="../qml/configqml/AccountPage.qml" line="184"/>
<location filename="../qml/configqml/AccountPage.qml" line="321"/> <location filename="../qml/configqml/AccountPage.qml" line="322"/>
<location filename="../qml/configqml/AccountPage.qml" line="345"/> <location filename="../qml/configqml/AccountPage.qml" line="348"/>
<source>Error</source> <source>Error</source>
<translation>Error</translation> <translation>Error</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="184"/> <location filename="../qml/configqml/AccountPage.qml" line="184"/>
<source>Nicknames containing @ symbol currently not supported</source> <source>Nicknames containing @ symbol currently not supported</source>
<translation type="unfinished"></translation> <translation>No se admiten los apodos que contienen el símbolo @ actualmente</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="304"/> <location filename="../qml/configqml/AccountPage.qml" line="305"/>
<source>Confirm</source> <source>Confirm</source>
<translation>Confirmar</translation> <translation>Confirmar</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="310"/> <location filename="../qml/configqml/AccountPage.qml" line="311"/>
<source>No server given! </source> <source>No server given! </source>
<translation>¡Servidor no encontrado!</translation> <translation>¡Servidor no encontrado!</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="311"/> <location filename="../qml/configqml/AccountPage.qml" line="312"/>
<source>No nickname given! </source> <source>No nickname given! </source>
<translation>¡Usuario incorrecto!</translation> <translation>¡Usuario incorrecto!</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="312"/> <location filename="../qml/configqml/AccountPage.qml" line="313"/>
<source>No password given! </source> <source>No password given! </source>
<translation>¡Contraseña incorrecta!</translation> <translation>¡Contraseña incorrecta!</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="313"/> <location filename="../qml/configqml/AccountPage.qml" line="314"/>
<source>No image directory given!</source> <source>No image directory given!</source>
<translation>¡No se ha encontrado el directorio de imágenes!</translation> <translation>¡No se ha encontrado el directorio de imágenes!</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="321"/> <location filename="../qml/configqml/AccountPage.qml" line="322"/>
<source>Wrong password!</source> <source>Wrong password!</source>
<translation>¡Contraseña incorrecta!</translation> <translation>¡Contraseña incorrecta!</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="340"/> <location filename="../qml/configqml/AccountPage.qml" line="343"/>
<source>Success</source> <source>Success</source>
<translation>éxito!</translation> <translation>éxito!</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="340"/> <location filename="../qml/configqml/AccountPage.qml" line="343"/>
<source>Name</source> <source>Name</source>
<translation>Nombre</translation> <translation>Nombre</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="420"/> <location filename="../qml/configqml/AccountPage.qml" line="424"/>
<source>Timeline</source> <source>Timeline</source>
<translation>Cronología</translation> <translation>Cronología</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="425"/> <location filename="../qml/configqml/AccountPage.qml" line="429"/>
<source>Conversations</source> <source>Conversations</source>
<translation>Conversaciones</translation> <translation>Conversaciones</translation>
</message> </message>
@ -119,9 +119,14 @@
<translation> Max. de noticias.</translation> <translation> Max. de noticias.</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/ConfigPage.qml" line="143"/> <location filename="../qml/configqml/ConfigPage.qml" line="127"/>
<source>Hide #nsfw?</source>
<translation>Ocultar #nsfw?</translation>
</message>
<message>
<location filename="../qml/configqml/ConfigPage.qml" line="161"/>
<source>Sync</source> <source>Sync</source>
<translation type="unfinished"></translation> <translation>Sincronización</translation>
</message> </message>
</context> </context>
<context> <context>
@ -218,7 +223,7 @@
<context> <context>
<name>ContactComponent</name> <name>ContactComponent</name>
<message> <message>
<location filename="../qml/contactqml/ContactComponent.qml" line="41"/> <location filename="../qml/genericqml/ContactComponent.qml" line="41"/>
<source>Connect</source> <source>Connect</source>
<translation>Conectar</translation> <translation>Conectar</translation>
</message> </message>
@ -292,22 +297,22 @@
<context> <context>
<name>FriendsTab</name> <name>FriendsTab</name>
<message> <message>
<location filename="../qml/contactqml/FriendsTab.qml" line="80"/> <location filename="../qml/contactqml/FriendsTab.qml" line="86"/>
<source>Me</source> <source>Me</source>
<translation>Yo</translation> <translation>Yo</translation>
</message> </message>
<message> <message>
<location filename="../qml/contactqml/FriendsTab.qml" line="84"/> <location filename="../qml/contactqml/FriendsTab.qml" line="90"/>
<source>Friends</source> <source>Friends</source>
<translation>Amigos</translation> <translation>Amigos</translation>
</message> </message>
<message> <message>
<location filename="../qml/contactqml/FriendsTab.qml" line="88"/> <location filename="../qml/contactqml/FriendsTab.qml" line="94"/>
<source>Contacts</source> <source>Contacts</source>
<translation>Contactos</translation> <translation>Contactos</translation>
</message> </message>
<message> <message>
<location filename="../qml/contactqml/FriendsTab.qml" line="92"/> <location filename="../qml/contactqml/FriendsTab.qml" line="98"/>
<source>Groups</source> <source>Groups</source>
<translation>Grupos</translation> <translation>Grupos</translation>
</message> </message>
@ -333,22 +338,22 @@
<translation>Descripción</translation> <translation>Descripción</translation>
</message> </message>
<message> <message>
<location filename="../qml/photoqml/ImageUploadDialog.qml" line="273"/> <location filename="../qml/photoqml/ImageUploadDialog.qml" line="287"/>
<source>Upload</source> <source>Upload</source>
<translation>Subir</translation> <translation>Subir</translation>
</message> </message>
<message> <message>
<location filename="../qml/photoqml/ImageUploadDialog.qml" line="273"/> <location filename="../qml/photoqml/ImageUploadDialog.qml" line="287"/>
<source>Change</source> <source>Change</source>
<translation>Cambiar</translation> <translation>Cambiar</translation>
</message> </message>
<message> <message>
<location filename="../qml/photoqml/ImageUploadDialog.qml" line="276"/> <location filename="../qml/photoqml/ImageUploadDialog.qml" line="290"/>
<source>Error</source> <source>Error</source>
<translation>Error</translation> <translation>Error</translation>
</message> </message>
<message> <message>
<location filename="../qml/photoqml/ImageUploadDialog.qml" line="276"/> <location filename="../qml/photoqml/ImageUploadDialog.qml" line="290"/>
<source> No album name given</source> <source> No album name given</source>
<translation>¡Nombre del álbum no encontrado!</translation> <translation>¡Nombre del álbum no encontrado!</translation>
</message> </message>
@ -356,51 +361,56 @@
<context> <context>
<name>MessageSend</name> <name>MessageSend</name>
<message> <message>
<location filename="../qml/newsqml/MessageSend.qml" line="72"/> <location filename="../qml/newsqml/MessageSend.qml" line="197"/>
<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> <source>to:</source>
<translation type="unfinished"></translation> <translation>a:</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/MessageSend.qml" line="200"/> <location filename="../qml/newsqml/MessageSend.qml" line="226"/>
<source>Title (optional)</source> <source>Title (optional)</source>
<translation>Título (opcional)</translation> <translation>Título (opcional)</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/MessageSend.qml" line="222"/> <location filename="../qml/newsqml/MessageSend.qml" line="248"/>
<source>What&apos;s on your mind?</source> <source>What&apos;s on your mind?</source>
<translation type="unfinished"></translation> <translation>¿Qué tienes en mente?</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/MessageSend.qml" line="319"/> <location filename="../qml/newsqml/MessageSend.qml" line="422"/>
<location filename="../qml/newsqml/MessageSend.qml" line="367"/> <location filename="../qml/newsqml/MessageSend.qml" line="473"/>
<source>Error</source> <source>Error</source>
<translation>Error</translation> <translation>Error</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/MessageSend.qml" line="319"/> <location filename="../qml/newsqml/MessageSend.qml" line="422"/>
<source>Only one attachment supported at the moment. <source>Only one attachment supported at the moment.
Remove other attachment first!</source> Remove other attachment first!</source>
<translation>Solo se admite adjuntar un solo archivo en este momento. <translation>Solo se admite adjuntar un solo archivo en este momento.
¡Elimine y deje un archivo adjunto!</translation> ¡Elimine y deje un archivo adjunto!</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/MessageSend.qml" line="367"/> <location filename="../qml/newsqml/MessageSend.qml" line="473"/>
<source>No receiver supplied!</source> <source>No receiver supplied!</source>
<translation type="unfinished"></translation> <translation>No se ha suministrado ningún receptor!</translation>
</message>
</context>
<context>
<name>MoreComments</name>
<message>
<location filename="../qml/newsqml/MoreComments.qml" line="53"/>
<source>Show all comments</source>
<translation>todos comentarios</translation>
</message> </message>
</context> </context>
<context> <context>
<name>NewsStack</name> <name>NewsStack</name>
<message> <message>
<location filename="../qml/newsqml/NewsStack.qml" line="158"/> <location filename="../qml/newsqml/NewsStack.qml" line="189"/>
<source>Network Error</source> <source>Network Error</source>
<translation>Fallo de red</translation> <translation>Fallo de red</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/NewsStack.qml" line="376"/> <location filename="../qml/newsqml/NewsStack.qml" line="237"/>
<source>More</source> <source>More</source>
<translation>Mas</translation> <translation>Mas</translation>
</message> </message>
@ -459,82 +469,81 @@
<context> <context>
<name>Newsitem</name> <name>Newsitem</name>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="47"/> <location filename="../qml/newsqml/Newsitem.qml" line="46"/>
<source>attending: </source> <source>attending: </source>
<translation>Asistiendo: </translation> <translation>Asistiendo: </translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="105"/> <location filename="../qml/newsqml/Newsitem.qml" line="123"/>
<source>Source: </source> <source>Source: </source>
<translation>Fuente: </translation> <translation>Fuente: </translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="105"/> <location filename="../qml/newsqml/Newsitem.qml" line="123"/>
<source>Direct Message</source> <source>Direct Message</source>
<translation>Mensaje directo</translation> <translation>Mensaje directo</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="121"/> <location filename="../qml/newsqml/Newsitem.qml" line="139"/>
<source>In reply to </source> <source>In reply to </source>
<translation>En respuesta a </translation> <translation>En respuesta a </translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="133"/>
<source> comments</source> <source> comments</source>
<translation> comentarios</translation> <translation type="vanished"> comentarios</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="282"/> <location filename="../qml/newsqml/Newsitem.qml" line="307"/>
<source>Attending: </source> <source>Attending: </source>
<translation>Asistiendo: </translation> <translation>Asistiendo: </translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="411"/> <location filename="../qml/newsqml/Newsitem.qml" line="432"/>
<source>Reply</source> <source>Reply</source>
<translation>Respuesta</translation> <translation>Respuesta</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="420"/> <location filename="../qml/newsqml/Newsitem.qml" line="444"/>
<source>DM</source> <source>DM</source>
<translation>Mensaje directo</translation> <translation>Mensaje directo</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="426"/> <location filename="../qml/newsqml/Newsitem.qml" line="450"/>
<source>Repost</source> <source>Repost</source>
<translation>Volver a publicar</translation> <translation>Volver a publicar</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="429"/> <location filename="../qml/newsqml/Newsitem.qml" line="453"/>
<source>Success!</source> <source>Success!</source>
<translation>éxito!</translation> <translation>éxito!</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="434"/> <location filename="../qml/newsqml/Newsitem.qml" line="458"/>
<source>Conversation</source> <source>Conversation</source>
<translation>Conversación</translation> <translation>Conversación</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="444"/> <location filename="../qml/newsqml/Newsitem.qml" line="465"/>
<source>Attending</source> <source>Attending</source>
<translation>Asistiendo</translation> <translation>Asistiendo</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="453"/> <location filename="../qml/newsqml/Newsitem.qml" line="474"/>
<source>yes</source> <source>yes</source>
<translation>si</translation> <translation>si</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="458"/> <location filename="../qml/newsqml/Newsitem.qml" line="479"/>
<source>maybe</source> <source>maybe</source>
<translation>quizás</translation> <translation>quizás</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="463"/> <location filename="../qml/newsqml/Newsitem.qml" line="484"/>
<source>no</source> <source>no</source>
<translation>no</translation> <translation>no</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="470"/> <location filename="../qml/newsqml/Newsitem.qml" line="491"/>
<source>Delete</source> <source>Delete</source>
<translation>Borrar</translation> <translation>Borrar</translation>
</message> </message>
@ -848,7 +857,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/SyncConfig.qml" line="75"/> <location filename="../qml/configqml/SyncConfig.qml" line="74"/>
<source>Min.</source> <source>Min.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -856,57 +865,57 @@
<context> <context>
<name>friendiqa</name> <name>friendiqa</name>
<message> <message>
<location filename="../qml/friendiqa.qml" line="161"/> <location filename="../qml/friendiqa.qml" line="159"/>
<source>Refresh</source> <source>Refresh</source>
<translation type="unfinished"></translation> <translation>Actualizar</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="179"/> <location filename="../qml/friendiqa.qml" line="176"/>
<source>Timeline</source> <source>Timeline</source>
<translation>Cronología</translation> <translation>Cronología</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="192"/> <location filename="../qml/friendiqa.qml" line="189"/>
<source>Conversations</source> <source>Conversations</source>
<translation>Conversaciones</translation> <translation>Conversaciones</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="205"/> <location filename="../qml/friendiqa.qml" line="202"/>
<source>Favorites</source> <source>Favorites</source>
<translation>Favoritos</translation> <translation>Favoritos</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="217"/> <location filename="../qml/friendiqa.qml" line="214"/>
<source>Replies</source> <source>Replies</source>
<translation type="unfinished"></translation> <translation>Respuestas</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="231"/> <location filename="../qml/friendiqa.qml" line="228"/>
<source>Public Timeline</source> <source>Public Timeline</source>
<translation>Cronología pública</translation> <translation>Cronología pública</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="244"/> <location filename="../qml/friendiqa.qml" line="241"/>
<source>Group news</source> <source>Group news</source>
<translation>Grupos</translation> <translation>Grupos</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="257"/> <location filename="../qml/friendiqa.qml" line="254"/>
<source>Search</source> <source>Search</source>
<translation>Busca</translation> <translation>Busca</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="270"/> <location filename="../qml/friendiqa.qml" line="267"/>
<source>Settings</source> <source>Settings</source>
<translation>Ajustes</translation> <translation>Ajustes</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="281"/> <location filename="../qml/friendiqa.qml" line="278"/>
<source>Accounts</source> <source>Accounts</source>
<translation type="unfinished"></translation> <translation>Cuentas</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="294"/> <location filename="../qml/friendiqa.qml" line="291"/>
<source>Quit</source> <source>Quit</source>
<translation>Salida</translation> <translation>Salida</translation>
</message> </message>
@ -914,131 +923,131 @@
<context> <context>
<name>newsworker</name> <name>newsworker</name>
<message> <message>
<location filename="../js/newsworker.js" line="66"/> <location filename="../js/newsworker.js" line="48"/>
<source>likes this.</source> <source>likes this.</source>
<translation>le gusta esto.</translation> <translation>le gusta esto.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="67"/> <location filename="../js/newsworker.js" line="49"/>
<source>like this.</source> <source>like this.</source>
<translation>me gusta esto.</translation> <translation>me gusta esto.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="70"/> <location filename="../js/newsworker.js" line="52"/>
<source>doesn&apos;t like this.</source> <source>doesn&apos;t like this.</source>
<translation>no de ése.</translation> <translation>no de ése.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="71"/> <location filename="../js/newsworker.js" line="53"/>
<source>don&apos;t like this.</source> <source>don&apos;t like this.</source>
<translation>no me gusta.</translation> <translation>no me gusta.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="74"/> <location filename="../js/newsworker.js" line="56"/>
<source>will attend.</source> <source>will attend.</source>
<translation>asistirá.</translation> <translation>asistirá.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="75"/> <location filename="../js/newsworker.js" line="57"/>
<source>persons will attend.</source> <source>persons will attend.</source>
<translation>Personas que asistirán.</translation> <translation>Personas que asistirán.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="78"/> <location filename="../js/newsworker.js" line="60"/>
<source>will not attend.</source> <source>will not attend.</source>
<translation>no asistirá.</translation> <translation>no asistirá.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="79"/> <location filename="../js/newsworker.js" line="61"/>
<source>persons will not attend.</source> <source>persons will not attend.</source>
<translation>Personas que no asistirán..</translation> <translation>Personas que no asistirán..</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="82"/> <location filename="../js/newsworker.js" line="64"/>
<source>may attend.</source> <source>may attend.</source>
<translation>Puede asistir.</translation> <translation>Puede asistir.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="83"/> <location filename="../js/newsworker.js" line="65"/>
<source>persons may attend.</source> <source>persons may attend.</source>
<translation>Personas que pueden asistir.</translation> <translation>Personas que pueden asistir.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="87"/> <location filename="../js/newsworker.js" line="69"/>
<source>yes</source> <source>yes</source>
<translation>si</translation> <translation>si</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="88"/> <location filename="../js/newsworker.js" line="70"/>
<source>no</source> <source>no</source>
<translation>no</translation> <translation>no</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="89"/> <location filename="../js/newsworker.js" line="71"/>
<source>maybe</source> <source>maybe</source>
<translation>quizás</translation> <translation>quizás</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="174"/> <location filename="../js/newsworker.js" line="162"/>
<source>seconds</source> <source>seconds</source>
<translation>Segundos</translation> <translation>Segundos</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="174"/> <location filename="../js/newsworker.js" line="162"/>
<location filename="../js/newsworker.js" line="175"/> <location filename="../js/newsworker.js" line="163"/>
<location filename="../js/newsworker.js" line="176"/> <location filename="../js/newsworker.js" line="164"/>
<location filename="../js/newsworker.js" line="177"/> <location filename="../js/newsworker.js" line="165"/>
<location filename="../js/newsworker.js" line="178"/> <location filename="../js/newsworker.js" line="166"/>
<location filename="../js/newsworker.js" line="179"/> <location filename="../js/newsworker.js" line="167"/>
<location filename="../js/newsworker.js" line="180"/> <location filename="../js/newsworker.js" line="168"/>
<location filename="../js/newsworker.js" line="181"/> <location filename="../js/newsworker.js" line="169"/>
<location filename="../js/newsworker.js" line="182"/> <location filename="../js/newsworker.js" line="170"/>
<location filename="../js/newsworker.js" line="183"/> <location filename="../js/newsworker.js" line="171"/>
<source>ago</source> <source>ago</source>
<translation>hace</translation> <translation>hace</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="175"/> <location filename="../js/newsworker.js" line="163"/>
<source>minute</source> <source>minute</source>
<translation>Minuto</translation> <translation>Minuto</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="176"/> <location filename="../js/newsworker.js" line="164"/>
<source>minutes</source> <source>minutes</source>
<translation>Minutos</translation> <translation>Minutos</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="177"/> <location filename="../js/newsworker.js" line="165"/>
<source>hour</source> <source>hour</source>
<translation>Hora</translation> <translation>Hora</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="178"/> <location filename="../js/newsworker.js" line="166"/>
<source>hours</source> <source>hours</source>
<translation>Horas</translation> <translation>Horas</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="179"/> <location filename="../js/newsworker.js" line="167"/>
<source>day</source> <source>day</source>
<translation>Dia</translation> <translation>Dia</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="180"/> <location filename="../js/newsworker.js" line="168"/>
<source>days</source> <source>days</source>
<translation>Dias</translation> <translation>Dias</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="181"/> <location filename="../js/newsworker.js" line="169"/>
<source>month</source> <source>month</source>
<translation>Mes</translation> <translation>Mes</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="182"/> <location filename="../js/newsworker.js" line="170"/>
<source>months</source> <source>months</source>
<translation>Meses</translation> <translation>Meses</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="183"/> <location filename="../js/newsworker.js" line="171"/>
<source>years</source> <source>years</source>
<translation>Años</translation> <translation>Años</translation>
</message> </message>
@ -1050,12 +1059,12 @@
<translation type="obsolete">Error</translation> <translation type="obsolete">Error</translation>
</message> </message>
<message> <message>
<location filename="../js/service.js" line="391"/> <location filename="../js/service.js" line="398"/>
<source>Undefined Array Error</source> <source>Undefined Array Error</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../js/service.js" line="394"/> <location filename="../js/service.js" line="401"/>
<source>JSON status Error</source> <source>JSON status Error</source>
<translation></translation> <translation></translation>
</message> </message>

View file

@ -5,8 +5,8 @@
<name>AccountPage</name> <name>AccountPage</name>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="59"/> <location filename="../qml/configqml/AccountPage.qml" line="59"/>
<location filename="../qml/configqml/AccountPage.qml" line="370"/> <location filename="../qml/configqml/AccountPage.qml" line="373"/>
<location filename="../qml/configqml/AccountPage.qml" line="393"/> <location filename="../qml/configqml/AccountPage.qml" line="396"/>
<source>User</source> <source>User</source>
<translation>Utente</translation> <translation>Utente</translation>
</message> </message>
@ -37,63 +37,63 @@
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="184"/> <location filename="../qml/configqml/AccountPage.qml" line="184"/>
<location filename="../qml/configqml/AccountPage.qml" line="321"/> <location filename="../qml/configqml/AccountPage.qml" line="322"/>
<location filename="../qml/configqml/AccountPage.qml" line="345"/> <location filename="../qml/configqml/AccountPage.qml" line="348"/>
<source>Error</source> <source>Error</source>
<translation>Errore</translation> <translation>Errore</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="184"/> <location filename="../qml/configqml/AccountPage.qml" line="184"/>
<source>Nicknames containing @ symbol currently not supported</source> <source>Nicknames containing @ symbol currently not supported</source>
<translation type="unfinished"></translation> <translation>I soprannomi contenenti il simbolo @ attualmente non sono supportati</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="304"/> <location filename="../qml/configqml/AccountPage.qml" line="305"/>
<source>Confirm</source> <source>Confirm</source>
<translation>Conferma</translation> <translation>Conferma</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="310"/> <location filename="../qml/configqml/AccountPage.qml" line="311"/>
<source>No server given! </source> <source>No server given! </source>
<translation>Nessun server inserito!</translation> <translation>Nessun server inserito!</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="311"/> <location filename="../qml/configqml/AccountPage.qml" line="312"/>
<source>No nickname given! </source> <source>No nickname given! </source>
<translation>Nessun utente inserito!</translation> <translation>Nessun utente inserito!</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="312"/> <location filename="../qml/configqml/AccountPage.qml" line="313"/>
<source>No password given! </source> <source>No password given! </source>
<translation>Nessuna password inserita!</translation> <translation>Nessuna password inserita!</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="313"/> <location filename="../qml/configqml/AccountPage.qml" line="314"/>
<source>No image directory given!</source> <source>No image directory given!</source>
<translation>Nessuna directory immagini inserita!</translation> <translation>Nessuna directory immagini inserita!</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="321"/> <location filename="../qml/configqml/AccountPage.qml" line="322"/>
<source>Wrong password!</source> <source>Wrong password!</source>
<translation type="unfinished"></translation> <translation>Password sbagliata!</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="340"/> <location filename="../qml/configqml/AccountPage.qml" line="343"/>
<source>Success</source> <source>Success</source>
<translation>Ha funzionato!</translation> <translation>Ha funzionato!</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="340"/> <location filename="../qml/configqml/AccountPage.qml" line="343"/>
<source>Name</source> <source>Name</source>
<translation>Nome</translation> <translation>Nome</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="420"/> <location filename="../qml/configqml/AccountPage.qml" line="424"/>
<source>Timeline</source> <source>Timeline</source>
<translation>Cronologia</translation> <translation>Cronologia</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/AccountPage.qml" line="425"/> <location filename="../qml/configqml/AccountPage.qml" line="429"/>
<source>Conversations</source> <source>Conversations</source>
<translation>Conversazioni</translation> <translation>Conversazioni</translation>
</message> </message>
@ -119,9 +119,14 @@
<translation> Max. di notizie</translation> <translation> Max. di notizie</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/ConfigPage.qml" line="143"/> <location filename="../qml/configqml/ConfigPage.qml" line="127"/>
<source>Hide #nsfw?</source>
<translation>Nascondere #nsfw?</translation>
</message>
<message>
<location filename="../qml/configqml/ConfigPage.qml" line="161"/>
<source>Sync</source> <source>Sync</source>
<translation type="unfinished"></translation> <translation>Sync</translation>
</message> </message>
</context> </context>
<context> <context>
@ -206,7 +211,7 @@
<context> <context>
<name>ContactComponent</name> <name>ContactComponent</name>
<message> <message>
<location filename="../qml/contactqml/ContactComponent.qml" line="41"/> <location filename="../qml/genericqml/ContactComponent.qml" line="41"/>
<source>Connect</source> <source>Connect</source>
<translation>Connetti</translation> <translation>Connetti</translation>
</message> </message>
@ -280,22 +285,22 @@
<context> <context>
<name>FriendsTab</name> <name>FriendsTab</name>
<message> <message>
<location filename="../qml/contactqml/FriendsTab.qml" line="80"/> <location filename="../qml/contactqml/FriendsTab.qml" line="86"/>
<source>Me</source> <source>Me</source>
<translation type="unfinished"></translation> <translation>Me</translation>
</message> </message>
<message> <message>
<location filename="../qml/contactqml/FriendsTab.qml" line="84"/> <location filename="../qml/contactqml/FriendsTab.qml" line="90"/>
<source>Friends</source> <source>Friends</source>
<translation>Amici</translation> <translation>Amici</translation>
</message> </message>
<message> <message>
<location filename="../qml/contactqml/FriendsTab.qml" line="88"/> <location filename="../qml/contactqml/FriendsTab.qml" line="94"/>
<source>Contacts</source> <source>Contacts</source>
<translation>Contatti</translation> <translation>Contatti</translation>
</message> </message>
<message> <message>
<location filename="../qml/contactqml/FriendsTab.qml" line="92"/> <location filename="../qml/contactqml/FriendsTab.qml" line="98"/>
<source>Groups</source> <source>Groups</source>
<translation>Gruppi</translation> <translation>Gruppi</translation>
</message> </message>
@ -305,7 +310,7 @@
<message> <message>
<location filename="../qml/photoqml/ImageUploadDialog.qml" line="124"/> <location filename="../qml/photoqml/ImageUploadDialog.qml" line="124"/>
<source>Upload to album</source> <source>Upload to album</source>
<translation type="unfinished"></translation> <translation>Carica su album</translation>
</message> </message>
<message> <message>
<source>Album</source> <source>Album</source>
@ -321,22 +326,22 @@
<translation>Descrizione</translation> <translation>Descrizione</translation>
</message> </message>
<message> <message>
<location filename="../qml/photoqml/ImageUploadDialog.qml" line="273"/> <location filename="../qml/photoqml/ImageUploadDialog.qml" line="287"/>
<source>Upload</source> <source>Upload</source>
<translation>Carica</translation> <translation>Carica</translation>
</message> </message>
<message> <message>
<location filename="../qml/photoqml/ImageUploadDialog.qml" line="273"/> <location filename="../qml/photoqml/ImageUploadDialog.qml" line="287"/>
<source>Change</source> <source>Change</source>
<translation type="unfinished"></translation> <translation>Modifica</translation>
</message> </message>
<message> <message>
<location filename="../qml/photoqml/ImageUploadDialog.qml" line="276"/> <location filename="../qml/photoqml/ImageUploadDialog.qml" line="290"/>
<source>Error</source> <source>Error</source>
<translation>Errore</translation> <translation>Errore</translation>
</message> </message>
<message> <message>
<location filename="../qml/photoqml/ImageUploadDialog.qml" line="276"/> <location filename="../qml/photoqml/ImageUploadDialog.qml" line="290"/>
<source> No album name given</source> <source> No album name given</source>
<translation>Nessun nome album inserito!</translation> <translation>Nessun nome album inserito!</translation>
</message> </message>
@ -344,51 +349,56 @@
<context> <context>
<name>MessageSend</name> <name>MessageSend</name>
<message> <message>
<location filename="../qml/newsqml/MessageSend.qml" line="72"/> <location filename="../qml/newsqml/MessageSend.qml" line="197"/>
<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> <source>to:</source>
<translation type="unfinished"></translation> <translation>a:</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/MessageSend.qml" line="200"/> <location filename="../qml/newsqml/MessageSend.qml" line="226"/>
<source>Title (optional)</source> <source>Title (optional)</source>
<translation>Titolo (opzionale)</translation> <translation>Titolo (opzionale)</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/MessageSend.qml" line="222"/> <location filename="../qml/newsqml/MessageSend.qml" line="248"/>
<source>What&apos;s on your mind?</source> <source>What&apos;s on your mind?</source>
<translation type="unfinished"></translation> <translation>A cosa stai pensando?</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/MessageSend.qml" line="319"/> <location filename="../qml/newsqml/MessageSend.qml" line="422"/>
<location filename="../qml/newsqml/MessageSend.qml" line="367"/> <location filename="../qml/newsqml/MessageSend.qml" line="473"/>
<source>Error</source> <source>Error</source>
<translation>Errore</translation> <translation>Errore</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/MessageSend.qml" line="319"/> <location filename="../qml/newsqml/MessageSend.qml" line="422"/>
<source>Only one attachment supported at the moment. <source>Only one attachment supported at the moment.
Remove other attachment first!</source> Remove other attachment first!</source>
<translation>Solo un allegato è attualmente supportato. <translation>Solo un allegato è attualmente supportato.
Rimuovere prima gli altri allegati!</translation> Rimuovere prima gli altri allegati!</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/MessageSend.qml" line="367"/> <location filename="../qml/newsqml/MessageSend.qml" line="473"/>
<source>No receiver supplied!</source> <source>No receiver supplied!</source>
<translation type="unfinished"></translation> <translation>Nessun ricevitore in dotazione!</translation>
</message>
</context>
<context>
<name>MoreComments</name>
<message>
<location filename="../qml/newsqml/MoreComments.qml" line="53"/>
<source>Show all comments</source>
<translation>Tutti commenti</translation>
</message> </message>
</context> </context>
<context> <context>
<name>NewsStack</name> <name>NewsStack</name>
<message> <message>
<location filename="../qml/newsqml/NewsStack.qml" line="158"/> <location filename="../qml/newsqml/NewsStack.qml" line="189"/>
<source>Network Error</source> <source>Network Error</source>
<translation type="unfinished"></translation> <translation>Errore di rete</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/NewsStack.qml" line="376"/> <location filename="../qml/newsqml/NewsStack.qml" line="237"/>
<source>More</source> <source>More</source>
<translation>Ancora</translation> <translation>Ancora</translation>
</message> </message>
@ -435,82 +445,81 @@
<context> <context>
<name>Newsitem</name> <name>Newsitem</name>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="47"/> <location filename="../qml/newsqml/Newsitem.qml" line="46"/>
<source>attending: </source> <source>attending: </source>
<translation>attendere: </translation> <translation>attendere: </translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="105"/> <location filename="../qml/newsqml/Newsitem.qml" line="123"/>
<source>Source: </source> <source>Source: </source>
<translation>Codice: </translation> <translation>Codice: </translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="105"/> <location filename="../qml/newsqml/Newsitem.qml" line="123"/>
<source>Direct Message</source> <source>Direct Message</source>
<translation>Messaggio diretto</translation> <translation>Messaggio diretto</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="121"/> <location filename="../qml/newsqml/Newsitem.qml" line="139"/>
<source>In reply to </source> <source>In reply to </source>
<translation>In risposta a </translation> <translation>In risposta a </translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="133"/>
<source> comments</source> <source> comments</source>
<translation> commenti</translation> <translation type="vanished"> commenti</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="282"/> <location filename="../qml/newsqml/Newsitem.qml" line="307"/>
<source>Attending: </source> <source>Attending: </source>
<translation>Attendi: </translation> <translation>Attendi: </translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="411"/> <location filename="../qml/newsqml/Newsitem.qml" line="432"/>
<source>Reply</source> <source>Reply</source>
<translation>Risposta</translation> <translation>Risposta</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="420"/> <location filename="../qml/newsqml/Newsitem.qml" line="444"/>
<source>DM</source> <source>DM</source>
<translation>Messaggio diretto</translation> <translation>Messaggio diretto</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="426"/> <location filename="../qml/newsqml/Newsitem.qml" line="450"/>
<source>Repost</source> <source>Repost</source>
<translation>Condividi</translation> <translation>Condividi</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="429"/> <location filename="../qml/newsqml/Newsitem.qml" line="453"/>
<source>Success!</source> <source>Success!</source>
<translation>Ha funzionato!</translation> <translation>Ha funzionato!</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="434"/> <location filename="../qml/newsqml/Newsitem.qml" line="458"/>
<source>Conversation</source> <source>Conversation</source>
<translation>Conversazione</translation> <translation>Conversazione</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="444"/> <location filename="../qml/newsqml/Newsitem.qml" line="465"/>
<source>Attending</source> <source>Attending</source>
<translation>Attendi</translation> <translation>Attendi</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="453"/> <location filename="../qml/newsqml/Newsitem.qml" line="474"/>
<source>yes</source> <source>yes</source>
<translation>si</translation> <translation>si</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="458"/> <location filename="../qml/newsqml/Newsitem.qml" line="479"/>
<source>maybe</source> <source>maybe</source>
<translation>potrebbe</translation> <translation>potrebbe</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="463"/> <location filename="../qml/newsqml/Newsitem.qml" line="484"/>
<source>no</source> <source>no</source>
<translation>no</translation> <translation>no</translation>
</message> </message>
<message> <message>
<location filename="../qml/newsqml/Newsitem.qml" line="470"/> <location filename="../qml/newsqml/Newsitem.qml" line="491"/>
<source>Delete</source> <source>Delete</source>
<translation>Cancella</translation> <translation>Cancella</translation>
</message> </message>
@ -538,12 +547,12 @@
<message> <message>
<location filename="../qml/photoqml/PhotoTab.qml" line="195"/> <location filename="../qml/photoqml/PhotoTab.qml" line="195"/>
<source>All Images</source> <source>All Images</source>
<translation type="unfinished"></translation> <translation>Tutte immagini</translation>
</message> </message>
<message> <message>
<location filename="../qml/photoqml/PhotoTab.qml" line="201"/> <location filename="../qml/photoqml/PhotoTab.qml" line="201"/>
<source>Only new</source> <source>Only new</source>
<translation type="unfinished"></translation> <translation>Solo nuovo</translation>
</message> </message>
<message> <message>
<location filename="../qml/photoqml/PhotoTab.qml" line="218"/> <location filename="../qml/photoqml/PhotoTab.qml" line="218"/>
@ -808,12 +817,12 @@
<message> <message>
<location filename="../qml/configqml/SyncComponent.qml" line="56"/> <location filename="../qml/configqml/SyncComponent.qml" line="56"/>
<source>sync</source> <source>sync</source>
<translation type="unfinished"></translation> <translation>sync</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/SyncComponent.qml" line="75"/> <location filename="../qml/configqml/SyncComponent.qml" line="75"/>
<source>notify</source> <source>notify</source>
<translation type="unfinished"></translation> <translation>notificare</translation>
</message> </message>
</context> </context>
<context> <context>
@ -824,7 +833,7 @@
<translation>Intervallo (0=nessuno)</translation> <translation>Intervallo (0=nessuno)</translation>
</message> </message>
<message> <message>
<location filename="../qml/configqml/SyncConfig.qml" line="75"/> <location filename="../qml/configqml/SyncConfig.qml" line="74"/>
<source>Min.</source> <source>Min.</source>
<translation>Min.</translation> <translation>Min.</translation>
</message> </message>
@ -832,189 +841,189 @@
<context> <context>
<name>friendiqa</name> <name>friendiqa</name>
<message> <message>
<location filename="../qml/friendiqa.qml" line="161"/> <location filename="../qml/friendiqa.qml" line="159"/>
<source>Refresh</source> <source>Refresh</source>
<translation type="unfinished"></translation> <translation>Aggiorna</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="179"/> <location filename="../qml/friendiqa.qml" line="176"/>
<source>Timeline</source> <source>Timeline</source>
<translation>Cronologia</translation> <translation>Cronologia</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="192"/> <location filename="../qml/friendiqa.qml" line="189"/>
<source>Conversations</source> <source>Conversations</source>
<translation>Conversazioni</translation> <translation>Conversazioni</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="205"/> <location filename="../qml/friendiqa.qml" line="202"/>
<source>Favorites</source> <source>Favorites</source>
<translation>Favoriti</translation> <translation>Favoriti</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="217"/> <location filename="../qml/friendiqa.qml" line="214"/>
<source>Replies</source> <source>Replies</source>
<translation type="unfinished"></translation> <translation>Risposte</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="231"/> <location filename="../qml/friendiqa.qml" line="228"/>
<source>Public Timeline</source> <source>Public Timeline</source>
<translation type="unfinished"></translation> <translation>Cronologia pubblica</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="244"/> <location filename="../qml/friendiqa.qml" line="241"/>
<source>Group news</source> <source>Group news</source>
<translation type="unfinished">Gruppi</translation> <translation>Notizie del gruppo</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="257"/> <location filename="../qml/friendiqa.qml" line="254"/>
<source>Search</source> <source>Search</source>
<translation>Cerca</translation> <translation>Cerca</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="270"/> <location filename="../qml/friendiqa.qml" line="267"/>
<source>Settings</source> <source>Settings</source>
<translation>Configurazione</translation> <translation>Configurazione</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="281"/> <location filename="../qml/friendiqa.qml" line="278"/>
<source>Accounts</source> <source>Accounts</source>
<translation type="unfinished"></translation> <translation>Conti</translation>
</message> </message>
<message> <message>
<location filename="../qml/friendiqa.qml" line="294"/> <location filename="../qml/friendiqa.qml" line="291"/>
<source>Quit</source> <source>Quit</source>
<translation type="unfinished"></translation> <translation>Chiudi</translation>
</message> </message>
</context> </context>
<context> <context>
<name>newsworker</name> <name>newsworker</name>
<message> <message>
<location filename="../js/newsworker.js" line="66"/> <location filename="../js/newsworker.js" line="48"/>
<source>likes this.</source> <source>likes this.</source>
<translation>mi piace.</translation> <translation>mi piace.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="67"/> <location filename="../js/newsworker.js" line="49"/>
<source>like this.</source> <source>like this.</source>
<translation>mi piace.</translation> <translation>mi piace.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="70"/> <location filename="../js/newsworker.js" line="52"/>
<source>doesn&apos;t like this.</source> <source>doesn&apos;t like this.</source>
<translation>non mi piace.</translation> <translation>non mi piace.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="71"/> <location filename="../js/newsworker.js" line="53"/>
<source>don&apos;t like this.</source> <source>don&apos;t like this.</source>
<translation>non mi piace.</translation> <translation>non mi piace.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="74"/> <location filename="../js/newsworker.js" line="56"/>
<source>will attend.</source> <source>will attend.</source>
<translation>attendere.</translation> <translation>attendere.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="75"/> <location filename="../js/newsworker.js" line="57"/>
<source>persons will attend.</source> <source>persons will attend.</source>
<translation>Persone che attendono.</translation> <translation>Persone che attendono.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="78"/> <location filename="../js/newsworker.js" line="60"/>
<source>will not attend.</source> <source>will not attend.</source>
<translation>non aspettare.</translation> <translation>non aspettare.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="79"/> <location filename="../js/newsworker.js" line="61"/>
<source>persons will not attend.</source> <source>persons will not attend.</source>
<translation>Persone che non aspettano.</translation> <translation>Persone che non aspettano.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="82"/> <location filename="../js/newsworker.js" line="64"/>
<source>may attend.</source> <source>may attend.</source>
<translation>puoi attendere.</translation> <translation>puoi attendere.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="83"/> <location filename="../js/newsworker.js" line="65"/>
<source>persons may attend.</source> <source>persons may attend.</source>
<translation>Persone che possono attendere.</translation> <translation>Persone che possono attendere.</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="87"/> <location filename="../js/newsworker.js" line="69"/>
<source>yes</source> <source>yes</source>
<translation>si</translation> <translation>si</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="88"/> <location filename="../js/newsworker.js" line="70"/>
<source>no</source> <source>no</source>
<translation>no</translation> <translation>no</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="89"/> <location filename="../js/newsworker.js" line="71"/>
<source>maybe</source> <source>maybe</source>
<translation>potrebbe</translation> <translation>potrebbe</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="174"/> <location filename="../js/newsworker.js" line="162"/>
<source>seconds</source> <source>seconds</source>
<translation>secondi</translation> <translation>secondi</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="174"/> <location filename="../js/newsworker.js" line="162"/>
<location filename="../js/newsworker.js" line="175"/> <location filename="../js/newsworker.js" line="163"/>
<location filename="../js/newsworker.js" line="176"/> <location filename="../js/newsworker.js" line="164"/>
<location filename="../js/newsworker.js" line="177"/> <location filename="../js/newsworker.js" line="165"/>
<location filename="../js/newsworker.js" line="178"/> <location filename="../js/newsworker.js" line="166"/>
<location filename="../js/newsworker.js" line="179"/> <location filename="../js/newsworker.js" line="167"/>
<location filename="../js/newsworker.js" line="180"/> <location filename="../js/newsworker.js" line="168"/>
<location filename="../js/newsworker.js" line="181"/> <location filename="../js/newsworker.js" line="169"/>
<location filename="../js/newsworker.js" line="182"/> <location filename="../js/newsworker.js" line="170"/>
<location filename="../js/newsworker.js" line="183"/> <location filename="../js/newsworker.js" line="171"/>
<source>ago</source> <source>ago</source>
<translation>fa</translation> <translation>fa</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="175"/> <location filename="../js/newsworker.js" line="163"/>
<source>minute</source> <source>minute</source>
<translation>minuti</translation> <translation>minuti</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="176"/> <location filename="../js/newsworker.js" line="164"/>
<source>minutes</source> <source>minutes</source>
<translation>minuti</translation> <translation>minuti</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="177"/> <location filename="../js/newsworker.js" line="165"/>
<source>hour</source> <source>hour</source>
<translation>ora</translation> <translation>ora</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="178"/> <location filename="../js/newsworker.js" line="166"/>
<source>hours</source> <source>hours</source>
<translation>ore</translation> <translation>ore</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="179"/> <location filename="../js/newsworker.js" line="167"/>
<source>day</source> <source>day</source>
<translation>giorno</translation> <translation>giorno</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="180"/> <location filename="../js/newsworker.js" line="168"/>
<source>days</source> <source>days</source>
<translation>giorni</translation> <translation>giorni</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="181"/> <location filename="../js/newsworker.js" line="169"/>
<source>month</source> <source>month</source>
<translation>mese</translation> <translation>mese</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="182"/> <location filename="../js/newsworker.js" line="170"/>
<source>months</source> <source>months</source>
<translation>mesi</translation> <translation>mesi</translation>
</message> </message>
<message> <message>
<location filename="../js/newsworker.js" line="183"/> <location filename="../js/newsworker.js" line="171"/>
<source>years</source> <source>years</source>
<translation>anni</translation> <translation>anni</translation>
</message> </message>
@ -1026,12 +1035,12 @@
<translation type="obsolete">Errore</translation> <translation type="obsolete">Errore</translation>
</message> </message>
<message> <message>
<location filename="../js/service.js" line="391"/> <location filename="../js/service.js" line="398"/>
<source>Undefined Array Error</source> <source>Undefined Array Error</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../js/service.js" line="394"/> <location filename="../js/service.js" line="401"/>
<source>JSON status Error</source> <source>JSON status Error</source>
<translation></translation> <translation></translation>
</message> </message>