Version 0.003

This commit is contained in:
LubuWest 2017-03-25 23:36:14 +01:00
commit 10dccdcdbb
572 changed files with 3711 additions and 13631 deletions

View file

@ -2,6 +2,7 @@
QML based client for the Friendica Social Network. QML based client for the Friendica Social Network.
Tabs for news (incl. Direct Messages), friends and photos. Tabs for news (incl. Direct Messages), friends and photos.
Delete old version first when upgrading (due to database changes)
OS: currently Linux and Android(4.3). OS: currently Linux and Android(4.3).
Source code is a QtCreator project. Source code is a QtCreator project.
@ -18,22 +19,22 @@ Source code is a QtCreator project.
# News # # News #
Currently supported: Currently supported:
* Shows Posts from friends, favorited messages, Direct Messages and Notifications * Shows Posts from friends, favorited messages, Direct Messages and Notifications
* Show news as timeline or tree (conversation opens in separate window) * Show news as timeline or tree (conversation opens in same window)
* Open links in external browser * Open links in external browser
* Click on contact phot for additional information
* Deletion, Reposting, Answering of Posts * Deletion, Reposting, Answering of Posts
* Liking, disliking, favoriting * Liking, disliking, favoriting
* Click on like text for additional contact info
* Attending events * Attending events
* Update fetches new posts since last in local DB * Update fetches new posts since last in local DB
* More shows older posts from local DB * More shows older posts from local DB
* Create new Message with images or direct messages, Contact/Group access rights * Create new Message with images or direct messages, Contact/Group access rights(can be stored), smileys
* New image dialog
ToDo: ToDo:
* Nice symbols for liking, disliking
* Videos and other binary data as attachment (sending and receiving) * Videos and other binary data as attachment (sending and receiving)
* Rich text editing in Send Dialog * Rich text editing in Send Dialog
* Attachments for Direct messages (currently not supported in API) * Attachments for Direct messages (currently not supported in API)
* Better image selection (currently ugly file dialog)
# Friends # # Friends #
@ -44,7 +45,7 @@ Currently supported:
* Show news of contact from local database * Show news of contact from local database
* Send direct message, if contact is following * Send direct message, if contact is following
* Show public pictures of contact (screenscraping of contact's website, works only with certain theme) * Show public pictures of contact (screenscraping of contact's website, works only with certain theme)
* Open website of contact * Open website of contact or connect page (for other contacts)
ToDo: ToDo:
* More information for contact from description page, possibly private information for friends * More information for contact from description page, possibly private information for friends
@ -56,12 +57,12 @@ Currently supported:
* Download all own images to local directory * Download all own images to local directory
* Show albums in grid, show images in album in grid and fullscreen * Show albums in grid, show images in album in grid and fullscreen
* Show albums and images of contacts * Show albums and images of contacts
* Pinch to zoom, swipe to scroll
ToDo: ToDo:
* Private images of friends * Private images of friends
* Support for all themes of friends * Support for all themes of friends
* Delete downloaded own images * Delete downloaded own images
* Pinch to zoom, swipe to scroll
# Config # # Config #
@ -82,6 +83,15 @@ ToDo
* Blingbling * Blingbling
# New in version 0.003
* improved BackButton behaviour
* click on contact everywhere to get to contact details
* Image dialog automatically opens in Android camera directory
* Smiley Dialog in Message Dialog
* Extensive use of FontAwesome for icons
* Bugfixes
## License ## ## License ##
* v0.001 for Friendica < 3.5 * v0.001 for Friendica < 3.5
* v0.002 for Friendica >= 3.5 * v0.002 for Friendica >= 3.5

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.2" android:versionCode="2" android:installLocation="auto"> <manifest package="org.qtproject.friendiqa" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.3" android:versionCode="3" android:installLocation="auto">
<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="Friendiqa" android:icon="@drawable/icon" android:logo="@drawable/icon"> <application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="Friendiqa" android:icon="@drawable/icon" android:logo="@drawable/icon">
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="Friendiqa" android:screenOrientation="unspecified" android:launchMode="singleTop"> <activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="Friendiqa" android:screenOrientation="unspecified" android:launchMode="singleTop">
<intent-filter> <intent-filter>

View file

@ -0,0 +1,4 @@
androidBuildToolsVersion=23.0.2
androidCompileSdkVersion=23
buildDir=.build
qt5AndroidDir=/home/pankraz/Qt/5.8/android_armv7/src/android/java

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=http\://services.gradle.org/distributions/gradle-1.12-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip

View file

@ -0,0 +1 @@
sdk.dir=/opt/android-sdk

View file

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before After
Before After

View file

@ -1,7 +1,7 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<resources> <resources>
<array name="qt_sources"> <array name="qt_sources">
<item>https://download.qt-project.org/ministro/android/qt5/qt-5.4</item> <item>https://download.qt.io/ministro/android/qt5/qt-5.8</item>
</array> </array>
<!-- The following is handled automatically by the deployment tool. It should <!-- The following is handled automatically by the deployment tool. It should

View file

@ -0,0 +1,200 @@
<RCC>
<qresource prefix="/">
<file>qml/friendiqa.qml</file>
<file>qml/newsqml/NewsTab.qml</file>
<file>qml/newsqml/Newsitem.qml</file>
<file>qml/newsqml/MessageSend.qml</file>
<file>qml/newsqml/PermissionDialog.qml</file>
<file>qml/newsqml/Conversation.qml</file>
<file>qml/newsqml/ImageDialog.qml</file>
<file>qml/newsqml/FriendicaActivities.qml</file>
<file>qml/contactqml/FriendsTab.qml</file>
<file>qml/contactqml/GroupComponent.qml</file>
<file>qml/contactqml/ContactComponent.qml</file>
<file>qml/contactqml/ContactDetailsComponent.qml</file>
<file>qml/genericqml/BlueButton.qml</file>
<file>qml/photoqml/PhotoComponent.qml</file>
<file>qml/photoqml/PhotogroupComponent.qml</file>
<file>qml/photoqml/PhotoTab.qml</file>
<file>qml/configqml/InfoBox.qml</file>
<file>qml/configqml/ConfigTab.qml</file>
<file>js/layout.js</file>
<file>js/photoworker.js</file>
<file>js/service.js</file>
<file>js/news.js</file>
<file>js/newsworker.js</file>
<file>js/helper.js</file>
<file>images/defaultcontact.jpg</file>
<file>images/fontawesome-webfont.ttf</file>
<file>images/folder-blue.png</file>
<file>qml/configqml/OSSettingsAndroid.qml</file>
<file>qml/configqml/OSSettingsLinux.qml</file>
<file>qml/newsqml/SmileyDialog.qml</file>
<file>js/smiley.js</file>
<file>images/smileys/animals/bee.gif</file>
<file>images/smileys/animals/bigspider.gif</file>
<file>images/smileys/animals/bunny.gif</file>
<file>images/smileys/animals/bunnyflowers.gif</file>
<file>images/smileys/animals/cat.gif</file>
<file>images/smileys/animals/chick.gif</file>
<file>images/smileys/animals/cow.gif</file>
<file>images/smileys/animals/crab.gif</file>
<file>images/smileys/animals/dog.gif</file>
<file>images/smileys/animals/dolphin.gif</file>
<file>images/smileys/animals/dragonfly.gif</file>
<file>images/smileys/animals/elephant.gif</file>
<file>images/smileys/animals/fish.gif</file>
<file>images/smileys/animals/frog.gif</file>
<file>images/smileys/animals/giraffe.gif</file>
<file>images/smileys/animals/hamster.gif</file>
<file>images/smileys/animals/horse.gif</file>
<file>images/smileys/animals/ladybird.gif</file>
<file>images/smileys/animals/monkey.gif</file>
<file>images/smileys/animals/parrot.gif</file>
<file>images/smileys/animals/pig.gif</file>
<file>images/smileys/animals/sheep.gif</file>
<file>images/smileys/animals/snail.gif</file>
<file>images/smileys/animals/tux.gif</file>
<file>images/smileys/babies/baby.gif</file>
<file>images/smileys/babies/babycot.gif</file>
<file>images/smileys/babies/pregnant.gif</file>
<file>images/smileys/babies/stork.gif</file>
<file>images/smileys/confused/confused.gif</file>
<file>images/smileys/confused/dazed.gif</file>
<file>images/smileys/confused/shrug.gif</file>
<file>images/smileys/confused/stupid.gif</file>
<file>images/smileys/cool/affro.gif</file>
<file>images/smileys/cool/cool.gif</file>
<file>images/smileys/devilangel/angel.gif</file>
<file>images/smileys/devilangel/blondedevil.gif</file>
<file>images/smileys/devilangel/catdevil.gif</file>
<file>images/smileys/devilangel/cherub.gif</file>
<file>images/smileys/devilangel/daseesaw.gif</file>
<file>images/smileys/devilangel/devil.gif</file>
<file>images/smileys/devilangel/graveside.gif</file>
<file>images/smileys/devilangel/saint.gif</file>
<file>images/smileys/devilangel/turnevil.gif</file>
<file>images/smileys/disgust/fartblush.gif</file>
<file>images/smileys/disgust/fartinbed.gif</file>
<file>images/smileys/disgust/toilet.gif</file>
<file>images/smileys/disgust/vomit.gif</file>
<file>images/smileys/drink/tea.gif</file>
<file>images/smileys/drool/drool.gif</file>
<file>images/smileys/fantasy/alienmonster.gif</file>
<file>images/smileys/fantasy/barbarian.gif</file>
<file>images/smileys/fantasy/dinosaur.gif</file>
<file>images/smileys/fantasy/dragon.gif</file>
<file>images/smileys/fantasy/dragonwhelp.gif</file>
<file>images/smileys/fantasy/ghost.gif</file>
<file>images/smileys/fantasy/mummy.gif</file>
<file>images/smileys/fight/2guns.gif</file>
<file>images/smileys/fight/acid.gif</file>
<file>images/smileys/fight/alienfight.gif</file>
<file>images/smileys/fight/alpha.png</file>
<file>images/smileys/fight/army.gif</file>
<file>images/smileys/fight/arrowhead.gif</file>
<file>images/smileys/fight/bfg.gif</file>
<file>images/smileys/fight/bowman.gif</file>
<file>images/smileys/fight/chainsaw.gif</file>
<file>images/smileys/fight/crossbow.gif</file>
<file>images/smileys/fight/crusader.gif</file>
<file>images/smileys/fight/dead.gif</file>
<file>images/smileys/fight/gangs.gif</file>
<file>images/smileys/fight/hammersplat.gif</file>
<file>images/smileys/fight/lasergun.gif</file>
<file>images/smileys/fight/machinegun.gif</file>
<file>images/smileys/fight/marine.gif</file>
<file>images/smileys/fight/sabre.gif</file>
<file>images/smileys/fight/samurai.gif</file>
<file>images/smileys/fight/tank.gif</file>
<file>images/smileys/fight/viking.gif</file>
<file>images/smileys/food/apple.gif</file>
<file>images/smileys/food/banana.gif</file>
<file>images/smileys/food/birthdaycake.gif</file>
<file>images/smileys/food/broccoli.gif</file>
<file>images/smileys/food/cake.gif</file>
<file>images/smileys/food/carrot.gif</file>
<file>images/smileys/food/cooking.gif</file>
<file>images/smileys/food/fryegg.gif</file>
<file>images/smileys/food/popcorn.gif</file>
<file>images/smileys/food/tomato.gif</file>
<file>images/smileys/happy/cloud9.gif</file>
<file>images/smileys/happy/tearsofjoy.gif</file>
<file>images/smileys/laugh/hahaha.gif</file>
<file>images/smileys/laugh/loltv.gif</file>
<file>images/smileys/laugh/rofl.gif</file>
<file>images/smileys/love/iloveyou.gif</file>
<file>images/smileys/love/inlove.gif</file>
<file>images/smileys/love/love.gif</file>
<file>images/smileys/love/lovebear.gif</file>
<file>images/smileys/love/lovebed.gif</file>
<file>images/smileys/love/loveheart.gif</file>
<file>images/smileys/music/dj.gif</file>
<file>images/smileys/music/drums.gif</file>
<file>images/smileys/music/elvis.gif</file>
<file>images/smileys/music/guitar.gif</file>
<file>images/smileys/music/trumpet.gif</file>
<file>images/smileys/music/violin.gif</file>
<file>images/smileys/oldcore/beard.png</file>
<file>images/smileys/oldcore/headbang.gif</file>
<file>images/smileys/oldcore/laughing.gif</file>
<file>images/smileys/oldcore/shaka.gif</file>
<file>images/smileys/oldcore/surprised.gif</file>
<file>images/smileys/oldcore/whitebeard.png</file>
<file>images/smileys/respect/bow.gif</file>
<file>images/smileys/respect/bravo.gif</file>
<file>images/smileys/respect/hailking.gif</file>
<file>images/smileys/respect/number1.gif</file>
<file>images/smileys/sad/crying.png</file>
<file>images/smileys/sad/prisoner.gif</file>
<file>images/smileys/sad/sigh.gif</file>
<file>images/smileys/smoking/smoking.gif</file>
<file>images/smileys/sport/archery.gif</file>
<file>images/smileys/sport/basketball.gif</file>
<file>images/smileys/sport/bowling.gif</file>
<file>images/smileys/sport/cycling.gif</file>
<file>images/smileys/sport/darts.gif</file>
<file>images/smileys/sport/fencing.gif</file>
<file>images/smileys/sport/football.gif</file>
<file>images/smileys/sport/golf.gif</file>
<file>images/smileys/sport/horseriding.gif</file>
<file>images/smileys/sport/juggling.gif</file>
<file>images/smileys/sport/skipping.gif</file>
<file>images/smileys/sport/snooker.gif</file>
<file>images/smileys/sport/surfing.gif</file>
<file>images/smileys/sport/tennis.gif</file>
<file>images/smileys/tired/countsheep.gif</file>
<file>images/smileys/tired/hammock.gif</file>
<file>images/smileys/tired/pillow.gif</file>
<file>images/smileys/tired/yawn.gif</file>
<file>images/smileys/core/beer_mug.gif</file>
<file>images/smileys/core/coffee.gif</file>
<file>images/smileys/core/dislike.gif</file>
<file>images/smileys/core/friendica-16.png</file>
<file>images/smileys/core/like.gif</file>
<file>images/smileys/core/rm-16.png</file>
<file>images/smileys/core/smiley-bangheaddesk.gif</file>
<file>images/smileys/core/smiley-brokenheart.gif</file>
<file>images/smileys/core/smiley-cool.gif</file>
<file>images/smileys/core/smiley-cry.gif</file>
<file>images/smileys/core/smiley-embarassed.gif</file>
<file>images/smileys/core/smiley-facepalm.gif</file>
<file>images/smileys/core/smiley-foot-in-mouth.gif</file>
<file>images/smileys/core/smiley-heart.gif</file>
<file>images/smileys/core/smiley-kiss.gif</file>
<file>images/smileys/core/smiley-laughing.gif</file>
<file>images/smileys/core/smiley-Oo.gif</file>
<file>images/smileys/core/smiley-smile.gif</file>
<file>images/smileys/core/smiley-surprised.gif</file>
<file>images/smileys/core/smiley-thumbsup.gif</file>
<file>images/smileys/core/smiley-tongue-out.gif</file>
<file>images/smileys/core/smiley-undecided.gif</file>
<file>images/smileys/core/smiley-wink.gif</file>
<file>images/smileys/core/smiley-frown.gif</file>
<file>images/smileys/adult/bong.gif</file>
<file>images/smileys/adult/drunk.gif</file>
<file>images/smileys/adult/finger.gif</file>
<file>images/smileys/adult/sperm.gif</file>
<file>images/smileys/adult/tits.gif</file>
</qresource>
</RCC>

View file

@ -0,0 +1,81 @@
#include "filesystem.h"
FILESYSTEM *FILESYSTEM::instance()
{
static FILESYSTEM filesystem;
return &filesystem;
}
FILESYSTEM::FILESYSTEM(QObject *parent) : QObject(parent){}
void FILESYSTEM::setDirectory(QString Directory)
{
if (Directory!=m_Directory) {
m_Directory = Directory;
emit directoryChanged();
}
}
QString FILESYSTEM::Directory() const
{
return m_Directory;
}
QString FILESYSTEM::homePath() const
{
QDir dir(m_Directory);
QString homeDir=dir.homePath();
//qDebug(homeDir);
return homeDir;
}
QString FILESYSTEM::cameraPath() const
{
QAndroidJniObject object = QAndroidJniObject::getStaticObjectField<jstring>("android.os.Environment", "DIRECTORY_DCIM");
QAndroidJniObject dcim =QAndroidJniObject::callStaticObjectMethod("android.os.Environment","getExternalStoragePublicDirectory", "(Ljava/lang/String;)Ljava/io/File;", object.object<jobject>());
return dcim.toString();
}
//bool FILESYSTEM::direxist(QString Directory) const
//{QDir dir(Directory);
// return dir.exists();
//}
void FILESYSTEM::makeDir(QString name)
{
QDir dir(m_Directory);
if (dir.mkdir(name)){
emit success(name);
}
else {emit error(name,1);}
}
void FILESYSTEM::rmDir()
{
QDir dir(m_Directory);
if (dir.removeRecursively()){
emit success(m_Directory);
}
else {emit error(m_Directory,1);}
}
void FILESYSTEM::rmFile(QString name)
{
QDir dir(m_Directory);
if(dir.remove(name)){
emit success(name);
}
else {emit error(name,1);}
}
QFileInfoList FILESYSTEM::fileList()
{
QDir dir(m_Directory);
QStringList filters;
filters << "*.png" <<"*.PNG" << "*.jpg" << "*.JPG" << "*.JPEG";
dir.setNameFilters(filters);
dir.setSorting(QDir::Time | QDir::Reversed);
//QStringList m_Filelist=dir.entryInfoList();
//qDebug() << "filelist " << m_Filelist;
return dir.entryInfoList();
}

View file

@ -3,20 +3,30 @@
#include <QDir> #include <QDir>
#include <QObject> #include <QObject>
#include <QtAndroidExtras>
class FILESYSTEM : public QObject class FILESYSTEM : public QObject
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(QString Directory READ Directory WRITE setDirectory NOTIFY directoryChanged) Q_PROPERTY(QString Directory READ Directory WRITE setDirectory NOTIFY directoryChanged)
//Q_PROPERTY(bool direxist READ direxist)
Q_PROPERTY(QString homePath READ homePath)
Q_PROPERTY(QString cameraPath READ cameraPath)
public: public:
static FILESYSTEM *instance(); static FILESYSTEM *instance();
explicit FILESYSTEM(QObject *parent = 0); explicit FILESYSTEM(QObject *parent = 0);
void setDirectory(QString Directory); void setDirectory(QString Directory);
QString Directory() const; QString Directory() const;
QFileInfoList fileList();
//bool direxist(QString Directory);
QString homePath() const;
QString cameraPath() const;
signals: signals:
void directoryChanged(); void directoryChanged();
//void fileListContent(QList data);
void success(QString data); void success(QString data);
void error(QString data, int code); void error(QString data, int code);
@ -24,9 +34,12 @@ public slots:
void makeDir(QString name); void makeDir(QString name);
void rmDir(); void rmDir();
void rmFile(QString name); void rmFile(QString name);
//void fileList();
private: private:
QString m_Directory; QString m_Directory;
QString homeDir;
//QList m_Filelist;
}; };
#endif // FILSYSTEM_H #endif // FILSYSTEM_H

View file

@ -175,6 +175,7 @@ void XHR::onReplyError(QNetworkReply::NetworkError code)
{ {
qDebug() << code; qDebug() << code;
emit this->error( bufferToString(), (int) code); emit this->error( bufferToString(), (int) code);
buffer.clear();
reply->deleteLater(); reply->deleteLater();
} }
@ -182,6 +183,7 @@ void XHR::onReplySuccess()
{ {
qDebug() << "!"; qDebug() << "!";
emit this->success( bufferToString() ); emit this->success( bufferToString() );
buffer.clear();
reply->deleteLater(); reply->deleteLater();
} }

View file

@ -12,7 +12,7 @@
# The name of your application # The name of your application
TARGET = friendiqa TARGET = friendiqa
CONFIG += debug CONFIG += debug
QT += qml quick gui widgets QT += qml quick gui widgets androidextras
SOURCES += common/friendiqa.cpp \ SOURCES += common/friendiqa.cpp \
common/uploadableimage.cpp \ common/uploadableimage.cpp \

View file

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 696 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 864 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 780 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 951 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 990 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 925 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 645 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 594 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,021 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 756 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,003 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 885 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 598 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 315 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 577 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 810 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 664 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 891 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 664 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 668 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 583 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,005 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 652 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 461 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 885 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 365 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 748 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 859 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -6,15 +6,15 @@ function friendicaRequest(login,api,rootwindow,callback) {
xhrequest.onreadystatechange = function() { xhrequest.onreadystatechange = function() {
//print(api+JSON.stringify(login)); //print(api+JSON.stringify(login));
if(xhrequest.readyState === XMLHttpRequest.DONE) { if(xhrequest.readyState === XMLHttpRequest.DONE) {
try{ if (xhrequest.responseText!=""){ try{ if (xhrequest.status=200){ //if (xhrequest.responseText!=""){
callback(xhrequest.responseText) callback(xhrequest.responseText)
}else{ }else{
showMessage("Error","API:" +api+"\n NO RESPONSE",rootwindow); showMessage("Error","API:" +api+"\n NO RESPONSE"+xhrequest.statusText,rootwindow);
callback(xhrequest.responseText) callback(xhrequest.responseText)
} }
} }
catch (e){ catch (e){
showMessage("Error", api+" "+e,rootwindow) showMessage("Error", api+" "+e+" "+xhrequest.statusText,rootwindow)
} }
} }
} }
@ -25,7 +25,7 @@ function friendicaRequest(login,api,rootwindow,callback) {
function friendicaPostRequest(login,api,rootwindow,callback) { function friendicaPostRequest(login,api,rootwindow,callback) {
var xhrequest= new XMLHttpRequest(); var xhrequest= new XMLHttpRequest();
xhrequest.onreadystatechange = function() { xhrequest.onreadystatechange = function() {
//print(api+JSON.stringify(login)); //print(api+JSON.stringify(login)+Qt.atob(login.password));
if (xhrequest.readyState === XMLHttpRequest.HEADERS_RECEIVED) { if (xhrequest.readyState === XMLHttpRequest.HEADERS_RECEIVED) {
} else if(xhrequest.readyState === XMLHttpRequest.DONE) { } else if(xhrequest.readyState === XMLHttpRequest.DONE) {
try{ if (xhrequest.responseText!=""){ try{ if (xhrequest.responseText!=""){
@ -43,8 +43,15 @@ function friendicaPostRequest(login,api,rootwindow,callback) {
xhrequest.open("POST", login.server+api,true,login.username,Qt.atob(login.password)); xhrequest.open("POST", login.server+api,true,login.username,Qt.atob(login.password));
xhrequest.send(); xhrequest.send();
} }
function getCount(database,login,table,field,countvalue){
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
var count=0;
db.transaction( function(tx) {
var countrs = tx.executeSql('SELECT COUNT(*) from '+table+' WHERE username= "'+ login.username +'" AND '+field+' = "'+countvalue+'"');
count = parseInt(countrs.rows.item(0)["COUNT(*)"])
})
return count
}
function friendicaWebRequest(url,rootwindow,callback) { function friendicaWebRequest(url,rootwindow,callback) {
var xhrequest = new XMLHttpRequest(); var xhrequest = new XMLHttpRequest();
@ -62,19 +69,23 @@ function friendicaWebRequest(url,rootwindow,callback) {
xhrequest.send(); xhrequest.send();
} }
function readData(database,table,username,callback,filter,filtervalue) { // reads and applies data from DB function readData(database,table,username,callback,filter,filtervalue, sort) { // reads and applies data from DB
if (filter){ if (filter){
var where = " AND "+ filter +" = '" + filtervalue+"'"; var where = " AND "+ filter +" = '" + filtervalue+"'";
} else { var where="";} } else { var where="";}
if (username){ if (username){
var user = ' where username= "'+ username +'"'; var user = ' where username= "'+ username +'"';
} else { var user='';} } else { var user='';}
if (sort){
var sortparam = " ORDER BY "+ sort;
} else { var sortparam="";}
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]);
if(!db) { return; } if(!db) { return; }
db.transaction( function(tx) { db.transaction( function(tx) {
//print('select * from '+table+user+where); //print('select * from '+table+user+where+sortparam);
var rsArray=[]; var rsArray=[];
var rs = tx.executeSql('select * from '+table+user+where); var rs = tx.executeSql('select * from '+table+user+where+sortparam);
for(var i = 0; i < rs.rows.length; i++) { for(var i = 0; i < rs.rows.length; i++) {
rsArray.push(rs.rows.item(i)) rsArray.push(rs.rows.item(i))
} }
@ -100,7 +111,7 @@ var where = " AND "+ filter +" = '" + filtervalue+"'";
}); });
} }
function showMessage(header,message,rootwindow){ function showMessage(header,message,rootwindow){print("message: "+message);
var cleanmessage=message.replace(/"/g,"-"); var cleanmessage=message.replace(/"/g,"-");
var messageString='import QtQuick 2.0; import QtQuick.Dialogs 1.2; MessageDialog{ visible: true; title:"'+header+'";standardButtons: StandardButton.Ok; text:" '+cleanmessage+'"}'; var messageString='import QtQuick 2.0; import QtQuick.Dialogs 1.2; MessageDialog{ visible: true; title:"'+header+'";standardButtons: StandardButton.Ok; text:" '+cleanmessage+'"}';
var messageObject=Qt.createQmlObject(messageString,rootwindow,"messageOutput"); var messageObject=Qt.createQmlObject(messageString,rootwindow,"messageOutput");
@ -108,7 +119,7 @@ function showMessage(header,message,rootwindow){
function inArray(list, prop, val) { function inArray(list, prop, val) {
if (list.length > 0 ) { if (list.length > 0 ) {
for (var i in list) { if (list[i][prop] === val) { for (var i in list) { if (list[i][prop] == val) {
return i; return i;
} }
} }

View file

@ -48,46 +48,52 @@ function getCurrentContacts(login,database,callback){
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]);
var contactlist=[]; var contactlist=[];
db.transaction( function(tx) { db.transaction( function(tx) {
var result = tx.executeSql('SELECT id from contacts WHERE username="'+login.username+'" AND isFriend=1'); // check for friends var result = tx.executeSql('SELECT url from contacts WHERE username="'+login.username+'" AND isFriend=1'); // check for friends
for (var i=0;i<result.rows.length;i++){ for (var i=0;i<result.rows.length;i++){
contactlist.push(result.rows.item(i).id ) contactlist.push(result.rows.item(i).url )
//print(result.rows.item(i).url)
} }
var lastDate=Date.now()-172800000;// 2 days old var lastDate=Date.now()-172800000;// 2 days old
print('SELECT id from contacts WHERE username="'+login.username+'" AND isFriend=0 AND imageAge>'+lastDate); //print('SELECT url from contacts WHERE username="'+login.username+'" AND isFriend=0 AND imageAge>'+lastDate);
var result2 = tx.executeSql('SELECT id from contacts WHERE username="'+login.username+'" AND isFriend=0 AND imageAge > '+lastDate); var result2 = tx.executeSql('SELECT url from contacts WHERE username="'+login.username+'" AND isFriend=0 AND imageAge > '+lastDate);
for (var j=0;j<result2.rows.length;j++){ for (var j=0;j<result2.rows.length;j++){
contactlist.push(result2.rows.item(j).id ) contactlist.push(result2.rows.item(j).url )
} }
}) })
callback(contactlist) callback(contactlist)
} }
function findNewContacts(news,contacts){ function findNewContacts(news,contacts){//print("contacts: "+JSON.stringify(contacts))
var newContacts=[]; var newContacts=[];
for (var i=0;i<news.length;i++){ for (var i=0;i<news.length;i++){
var id=parseInt(news[i].user.id); var url=news[i].user.url;
if(contacts.indexOf(id)==-1 && !(inArray(newContacts,"id",id))){ if(contacts.indexOf(url)==-1 && !(inArray(newContacts,"url",url))){print("new contact "+JSON.stringify(news[i].user));
news[i].user.isFriend=0; news[i].user.isFriend=0;
newContacts.push(news[i].user); newContacts.push(news[i].user);
} }
if (news[i].friendica_activities.like.length>0){ if (news[i].friendica_activities.like.length>0){
for (var j=0;j<news[i].friendica_activities.like.length;j++){ for (var j=0;j<news[i].friendica_activities.like.length;j++){
var like_id=parseInt(news[i].friendica_activities.like[j].id); var like_url=news[i].friendica_activities.like[j].url;
if(contacts.indexOf(like_id)==-1 && !(inArray(newContacts,"id",like_id))){ if(contacts.indexOf(like_url)==-1 && !(inArray(newContacts,"url",like_url))){print("new like contact "+JSON.stringify(news[i].friendica_activities.like[j]));
news[i].friendica_activities.like[j].isFriend=0; news[i].friendica_activities.like[j].isFriend=0;
newContacts.push(news[i].friendica_activities.like[j]); newContacts.push(news[i].friendica_activities.like[j]);
}
} }
} }
if (news[i].friendica_activities.dislike.length>0){ }
for (var k=0;j<news[k].friendica_activities.dislike.length;k++){ if (news[i].friendica_activities.dislike.length>0){
var dislike_id=parseInt(news[i].friendica_activities.dislike[k].id); for (var k=0;j<news[k].friendica_activities.dislike.length;k++){
if(contacts.indexOf(dislike_id)==-1 && !(inArray(newContacts,"id",dislike_id))){ var dislike_url=news[i].friendica_activities.dislike[k].url;
news[i].friendica_activities.dislike[k].isFriend=0; if(contacts.indexOf(dislike_url)==-1 && !(inArray(newContacts,"url",dislike_url))){print("new dislike contact "+JSON.stringify(news[i].friendica_activities.dislike[k]));
news[i].friendica_activities.dislike[k].isFriend=0;
newContacts.push(news[i].friendica_activities.dislike[k]); newContacts.push(news[i].friendica_activities.dislike[k]);
}
} }
} }
}
// var owner_id=parseInt(news[i].friendica_owner.id);
// if(contacts.indexOf(owner_id)==-1 && !(inArray(newContacts,"id",owner_id))){
// news[i].friendica_owner.isFriend=0;
// newContacts.push(news[i].friendica_owner);
// }
} }
return newContacts return newContacts
} }
@ -97,20 +103,21 @@ function storeNews(login,database,news,rootwindow,callback){
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 ' + news[i].id+JSON.stringify(news[i].friendica_activities)); //print('store news data for ' + news[i].id+JSON.stringify(news[i].friendica_activities));
var ausdruck=news[i]; //var ausdruck=news[i];
var likearray=[]; for (var user in news[i].friendica_activities.like){likearray.push(parseInt(news[i].friendica_activities.like[user].id))} var likearray=[]; for (var user in news[i].friendica_activities.like){likearray.push(news[i].friendica_activities.like[user].url)}
var dislikearray=[]; for (var user in news[i].friendica_activities.dislike){parseInt(news[i].friendica_activities.dislike[user].id)} var dislikearray=[]; for (var user in news[i].friendica_activities.dislike){dislikearray.push(news[i].friendica_activities.dislike[user].url)}
var attendyesarray=[]; for (var user in news[i].friendica_activities.attendyes){attendyesarray.push(parseInt(news[i].friendica_activities.attendyes[user].id))} var attendyesarray=[]; for (var user in news[i].friendica_activities.attendyes){attendyesarray.push(news[i].friendica_activities.attendyes[user].url)}
var attendnoarray=[]; for (var user in news[i].friendica_activities.attendno){attendnoarray.push(parseInt(news[i].friendica_activities.attendno[user].id))} var attendnoarray=[]; for (var user in news[i].friendica_activities.attendno){attendnoarray.push(news[i].friendica_activities.attendno[user].url)}
var attendmaybearray=[]; for (var user in news[i].friendica_activities.attendmaybe){attendmaybearray.push(parseInt(news[i].friendica_activities.attendmaybe[user].id))} var attendmaybearray=[]; for (var user in news[i].friendica_activities.attendmaybe){attendmaybearray.push(news[i].friendica_activities.attendmaybe[user].url)}
var friendica_activities=[likearray,dislikearray,attendyesarray,attendnoarray,attendmaybearray] var friendica_activities=[likearray,dislikearray,attendyesarray,attendnoarray,attendmaybearray]
var attachments="";if (news[i].attachments){attachments=Qt.btoa(JSON.stringify(news[i].attachments))}print(attachments)
db.transaction( function(tx) { db.transaction( function(tx) {
var result = tx.executeSql('SELECT * from news where username="'+login.username+'" AND status_id = "'+news[i].id+'" AND messagetype=0'); // check for news id var result = tx.executeSql('SELECT * from news where username="'+login.username+'" AND status_id = "'+news[i].id+'" AND messagetype=0'); // check for news id
if(result.rows.length === 1) {// use update if(result.rows.length === 1) {// use update
print(news[i].id +' news exists, update it') //print(news[i].id +' news exists, update it'+'UPDATE news SET username="'+login.username+'", messagetype=0, text="'+Qt.btoa(news[i].text)+'", created_at="'+Date.parse(cleanDate(news[i].created_at))+'", in_reply_to_status_id="'+news[i].in_reply_to_status_id+'", source="'+news[i].source+'", status_id="'+news[i].id+'", in_reply_to_user_id="'+news[i].in_reply_to_user_id+'", geo="'+news[i].geo+'", favorited="'+news[i].favorited+'", uid="'+news[i].user.id+'", statusnet_html="'+Qt.btoa(news[i].status_html)+'", statusnet_conversation_id="'+news[i].statusnet_conversation_id+'",friendica_activities="'+Qt.btoa(JSON.stringify(friendica_activities))+'",attachments="'+attachments+'",friendica_owner="'+news[i].friendica_owner.url+'" where username="'+login.username+'" AND status_id="'+news[i].status_id+'" AND messagetype=0')
result = tx.executeSql('UPDATE news SET username="'+login.username+'", messagetype=0, text="'+Qt.btoa(news[i].text)+'", created_at="'+Date.parse(cleanDate(news[i].created_at))+'", in_reply_to_status_id="'+news[i].in_reply_to_status_id+'", source="'+news[i].source+'", status_id="'+news[i].id+'", in_reply_to_user_id="'+news[i].in_reply_to_user_id+'", geo="'+news[i].geo+'", favorited="'+news[i].favorited+'", uid="'+news[i].user.id+'", statusnet_html="'+Qt.btoa(news[i].status_html)+'", statusnet_conversation_id="'+news[i].statusnet_conversation_id+'",friendica_activities="'+JSON.stringify(friendica_activities)+'" where username="'+login.username+'" AND status_id="'+news[i].status_id+'" AND messagetype=0'); result = tx.executeSql('UPDATE news SET username="'+login.username+'", messagetype=0, text="'+Qt.btoa(news[i].text)+'", created_at="'+Date.parse(cleanDate(news[i].created_at))+'", in_reply_to_status_id="'+news[i].in_reply_to_status_id+'", source="'+news[i].source+'", status_id="'+news[i].id+'", in_reply_to_user_id="'+news[i].in_reply_to_user_id+'", geo="'+news[i].geo+'", favorited="'+news[i].favorited+'", uid="'+news[i].user.id+'", statusnet_html="'+Qt.btoa(news[i].status_html)+'", statusnet_conversation_id="'+news[i].statusnet_conversation_id+'",friendica_activities="'+Qt.btoa(JSON.stringify(friendica_activities))+'",attachments="'+attachments+'",friendica_owner="'+news[i].friendica_owner.url+'" where username="'+login.username+'" AND status_id="'+news[i].status_id+'" AND messagetype=0');
} else {// use insert } else {// use insert
result = tx.executeSql('INSERT INTO news (username,messagetype,text,created_at,in_reply_to_status_id,source,status_id,in_reply_to_user_id,geo,favorited,uid,statusnet_html,statusnet_conversation_id,friendica_activities,friendica_activities_self) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [login.username,0,Qt.btoa(news[i].text),Date.parse(cleanDate(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, JSON.stringify(friendica_activities),"[]"])}}) result = tx.executeSql('INSERT INTO news (username,messagetype,text,created_at,in_reply_to_status_id,source,status_id,in_reply_to_user_id,geo,favorited,uid,statusnet_html,statusnet_conversation_id,friendica_activities,friendica_activities_self,attachments,friendica_owner) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [login.username,0,Qt.btoa(news[i].text),Date.parse(cleanDate(news[i].created_at)), news[i].in_reply_to_status_id, news[i].source, news[i].id,news[i].in_reply_to_user_id,news[i].geo,news[i].favorited, news[i].user.id,Qt.btoa(news[i].statusnet_html),news[i].statusnet_conversation_id, Qt.btoa(JSON.stringify(friendica_activities)),"[]",attachments,news[i].friendica_owner.url])}})
} }
getDirectMessage(login,database,rootwindow,callback) getDirectMessage(login,database,rootwindow,callback)
} }
@ -164,12 +171,12 @@ function getNotifications(login,database,rootwindow,callback){
}) })
})} })}
function getActivitiesUserData(database,username,useridArray){ function getActivitiesUserData(database,username,userUrlArray){//print(JSON.stringify(userUrlArray));
var helpArray=[]; var helpArray=[];
for (var i=0;i<useridArray.length;i++){ for (var i=0;i<userUrlArray.length;i++){
Helperjs.readData(database,"contacts",username,function(userdata){ Helperjs.readData(database,"contacts",username,function(userdata){
helpArray.push(userdata[0]); helpArray.push(userdata[0]);
},"id",useridArray[i]); },"url",userUrlArray[i]);
} }
return helpArray return helpArray
} }
@ -183,29 +190,17 @@ function newsfromdb(database,username,callback,contact,stop_time){
stop="<="+rs.rows.item(0).created_at}catch(e){stop="<99999999999999"}} stop="<="+rs.rows.item(0).created_at}catch(e){stop="<99999999999999"}}
else{var stop="<"+stop_time} else{var stop="<"+stop_time}
var contactfilter="";if(contact){contactfilter=" AND uid='"+contact+"'"} var contactfilter="";if(contact){contactfilter=" AND uid='"+contact+"'"}
print('select * from news WHERE username="'+username+'" AND created_at'+stop+contactfilter+' ORDER BY created_at DESC LIMIT 20'); //print('select * from news WHERE username="'+username+'" AND created_at'+stop+contactfilter+' ORDER BY created_at DESC LIMIT 20');
var newsrs=tx.executeSql('select * from news WHERE username="'+username+'" AND created_at'+stop+contactfilter+' ORDER BY created_at DESC LIMIT 20'); var newsrs=tx.executeSql('select * from news WHERE username="'+username+'" AND created_at'+stop+contactfilter+' ORDER BY created_at DESC LIMIT 20');
var newsArray=[]; var newsArray=[];
for(var i = 0; i < newsrs.rows.length; i++) { for(var i = 0; i < newsrs.rows.length; i++) {
newsArray.push(newsrs.rows.item(i)); newsArray.push(newsrs.rows.item(i));
Helperjs.readData(database,"contacts",username,function(userdata){ newsArray[i]=fetchUsersForNews(database,username,newsArray[i])
newsArray[i].user=userdata[0];
},"id",newsArray[i].uid);
if(newsArray[i].in_reply_to_user_id){
Helperjs.readData(database,"contacts",username,function(replytodata){
newsArray[i].reply_user=replytodata[0];
},"id",newsArray[i].in_reply_to_user_id);
}
if (newsArray[i].messagetype==0){
for(var j=0;j<newsArray[i].friendica_activities.length;j++){
newsArray[i]=fetchUsersForNews(database,username,newsArray[i])
}
}
} }
callback(newsArray)}); callback(newsArray)});
} }
function fetchUsersForNews(database,username,news){ function fetchUsersForNews(database,username,news){//print(JSON.stringify(news))
Helperjs.readData(database,"contacts",username,function(userdata){ Helperjs.readData(database,"contacts",username,function(userdata){
news.user=userdata[0]; news.user=userdata[0];
//print("Fetch user"+JSON.stringify(news.user)); //print("Fetch user"+JSON.stringify(news.user));
@ -218,7 +213,7 @@ function fetchUsersForNews(database,username,news){
} }
if (news.messagetype==0){ if (news.messagetype==0){
for(var j=0;j<news.friendica_activities.length;j++) for(var j=0;j<news.friendica_activities.length;j++)
{var friendicaArray=JSON.parse(news.friendica_activities); {var friendicaArray=JSON.parse(Qt.atob(news.friendica_activities));
// print("Array: "+friendicaArray[1]); // print("Array: "+friendicaArray[1]);
news.like=getActivitiesUserData(database,username,friendicaArray[0]); news.like=getActivitiesUserData(database,username,friendicaArray[0]);
news.dislike=getActivitiesUserData(database,username,friendicaArray[1]); news.dislike=getActivitiesUserData(database,username,friendicaArray[1]);
@ -226,6 +221,10 @@ function fetchUsersForNews(database,username,news){
news.attendno=getActivitiesUserData(database,username,friendicaArray[3]); news.attendno=getActivitiesUserData(database,username,friendicaArray[3]);
news.attendmaybe=getActivitiesUserData(database,username,friendicaArray[4]); news.attendmaybe=getActivitiesUserData(database,username,friendicaArray[4]);
} }
Helperjs.readData(database,"contacts",username,function(friendica_owner_data){
news.friendica_owner_object=friendica_owner_data[0];
//print("Fetch friendica_owner"+JSON.stringify(news.friendica_owner));
},"url",news.friendica_owner);
} }
return news return news
} }
@ -275,7 +274,7 @@ function likerequest(login,database,verb,newsid,rootwindow){
} }
if (verb=="unlike"){ if (currentActivities.indexOf(1)!=-1){currentActivities.splice(currentActivities.indexOf(1),1)}} if (verb=="unlike"){ if (currentActivities.indexOf(1)!=-1){currentActivities.splice(currentActivities.indexOf(1),1)}}
if (verb=="undislike"){ if (currentActivities.indexOf(2)!=-1){currentActivities.splice(currentActivities.indexOf(2),1)}} if (verb=="undislike"){ if (currentActivities.indexOf(2)!=-1){currentActivities.splice(currentActivities.indexOf(2),1)}}
print(JSON.stringify(currentActivities)); //print(JSON.stringify(currentActivities));
var result = tx.executeSql('UPDATE news SET friendica_activities_self ="'+JSON.stringify(currentActivities)+'" where username="'+login.username+'" AND status_id ='+newsid); var result = tx.executeSql('UPDATE news SET friendica_activities_self ="'+JSON.stringify(currentActivities)+'" where username="'+login.username+'" AND status_id ='+newsid);
})} })}
else{print("likerequest"+obj)}}) else{print("likerequest"+obj)}})
@ -302,7 +301,7 @@ function attend(login,database,attend,newsid,rootwindow,callback){
currentActivities.push(3); currentActivities.push(3);
if (currentActivities.indexOf(4)!=-1){currentActivities.splice(currentActivities.indexOf(4),1)} if (currentActivities.indexOf(4)!=-1){currentActivities.splice(currentActivities.indexOf(4),1)}
if (currentActivities.indexOf(5)!=-1){currentActivities.splice(currentActivities.indexOf(5),1)} if (currentActivities.indexOf(5)!=-1){currentActivities.splice(currentActivities.indexOf(5),1)}
print(JSON.stringify(currentActivities)); //print(JSON.stringify(currentActivities));
} }
if ((attend=="no")&&(currentActivities.indexOf(4)==-1)){ if ((attend=="no")&&(currentActivities.indexOf(4)==-1)){
currentActivities.push(4); currentActivities.push(4);

View file

@ -4,13 +4,14 @@ WorkerScript.onMessage = function(msg) {
for (var j=0;j<msg.news.length;j++){ for (var j=0;j<msg.news.length;j++){
if (msg.news[j]) { if (msg.news[j]) {
var newsitemobject=msg.news[j]; var newsitemobject=msg.news[j];
//print("Newsitem"+JSON.stringify(newsitemobject.friendica_activities_self)); //print("Newsitem"+JSON.stringify(newsitemobject.friendica_owner+" userid: "+newsitemobject.user.id));
if (newsitemobject.messagetype==2){ if (newsitemobject.messagetype==2){
newsitemobject.user={}; newsitemobject.user={};
newsitemobject.user.profile_image=""; newsitemobject.user.profile_image="";
newsitemobject.user.profile_image_url=""; newsitemobject.user.profile_image_url="";
newsitemobject.user.name=""; newsitemobject.user.name="";
} }
//var forumname="";if (newsitemobject.messagetype==0&&(parseInt(newsitemobject.friendica_owner)!=parseInt(newsitemobject.user.id))){forumname=" via "+newsitemobject.friendica_owner_object.name}
var likeText="";var dislikeText="";var attendyesText="";var attendnoText="";var attendmaybeText=""; var self={}; var likeText="";var dislikeText="";var attendyesText="";var attendnoText="";var attendmaybeText=""; var self={};
if (newsitemobject.messagetype==0){ if (newsitemobject.messagetype==0){
if (newsitemobject.like.length>0){ if (newsitemobject.like.length>0){

View file

@ -117,8 +117,8 @@ function initDatabase(database) { // initialize the database object
print('initDatabase()'+database[0]+database[1]+database[2]+database[3]) print('initDatabase()'+database[0]+database[1]+database[2]+database[3])
db.transaction( function(tx) { db.transaction( function(tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS imageData(username TEXT,id INT, created TEXT,edited TEXT, title TEXT, desc TEXT, album TEXT,filename TEXT, type TEXT, height INT, width INT, profile INT, link TEXT,location TEXT)'); tx.executeSql('CREATE TABLE IF NOT EXISTS imageData(username TEXT,id INT, created TEXT,edited TEXT, title TEXT, desc TEXT, album TEXT,filename TEXT, type TEXT, height INT, width INT, profile INT, link TEXT,location TEXT)');
tx.executeSql('CREATE TABLE IF NOT EXISTS config(server TEXT, username TEXT, password TEXT, imagestore TEXT, maxnews INT, timerInterval INT, newsViewType TEXT,isActive INT, permissions TEXT,maxContactAge INT,APIVersion TEXT)'); tx.executeSql('CREATE TABLE IF NOT EXISTS config(server TEXT, username TEXT, password TEXT, imagestore TEXT, maxnews INT, timerInterval INT, newsViewType TEXT,isActive INT, permissions TEXT,maxContactAge INT,APIVersion TEXT,layout TEXT, addons TEXT)');
tx.executeSql('CREATE TABLE IF NOT EXISTS news(username TEXT, messagetype INT, text TEXT, created_at INT, in_reply_to_status_id INT, source TEXT, status_id INT, in_reply_to_user_id INT, geo TEXT,favorited TEXT, uid INT, statusnet_html TEXT, statusnet_conversation_id TEXT,friendica_activities TEXT, friendica_activities_self TEXT)'); tx.executeSql('CREATE TABLE IF NOT EXISTS news(username TEXT, messagetype INT, text TEXT, created_at INT, in_reply_to_status_id INT, source TEXT, status_id INT, in_reply_to_user_id INT, geo TEXT,favorited TEXT, uid INT, statusnet_html TEXT, statusnet_conversation_id TEXT,friendica_activities TEXT, friendica_activities_self TEXT, attachments TEXT, friendica_owner INT)');
tx.executeSql('CREATE TABLE IF NOT EXISTS contacts(username TEXT, id INT, name TEXT, screen_name TEXT, location TEXT,imageAge INT, profile_image_url TEXT, description TEXT, profile_image BLOB, url TEXT, protected TEXT, followers_count INT, friends_count INT, created_at INT, favourites_count TEXT, utc_offset TEXT, time_zone TEXT, statuses_count INT, following TEXT, verified TEXT, statusnet_blocking TEXT, notifications TEXT, statusnet_profile_url TEXT, cid INT, network TEXT, isFriend INT)'); tx.executeSql('CREATE TABLE IF NOT EXISTS contacts(username TEXT, id INT, name TEXT, screen_name TEXT, location TEXT,imageAge INT, profile_image_url TEXT, description TEXT, profile_image BLOB, url TEXT, protected TEXT, followers_count INT, friends_count INT, created_at INT, favourites_count TEXT, utc_offset TEXT, time_zone TEXT, statuses_count INT, following TEXT, verified TEXT, statusnet_blocking TEXT, notifications TEXT, statusnet_profile_url TEXT, cid INT, network TEXT, isFriend INT)');
tx.executeSql('CREATE TABLE IF NOT EXISTS groups(username TEXT, groupname TEXT, gid INT, members TEXT)'); tx.executeSql('CREATE TABLE IF NOT EXISTS groups(username TEXT, groupname TEXT, gid INT, members TEXT)');
})} })}
@ -134,13 +134,14 @@ function savePermissions(database,obj) { // stores config to DB
function storeConfig(database,obj) { // stores config to DB function storeConfig(database,obj) { // stores config to DB
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]);
db.transaction( function(tx) { db.transaction( function(tx) {
//print(JSON.stringify(obj));
var result = tx.executeSql('SELECT * from config WHERE username="'+obj.username+'"'); var result = tx.executeSql('SELECT * from config WHERE username="'+obj.username+'"');
if(result.rows.length === 1) {// use update if(result.rows.length === 1) {// use update
var result2 = tx.executeSql('UPDATE config SET server="'+obj.server+'",password="'+obj.password+'", imagestore="'+obj.imagestore+'", maxnews="+obj.maxnews+",newsViewType="'+obj.newsViewType+'", isActive=0 WHERE username="'+obj.username +'"'); var result2 = tx.executeSql('UPDATE config SET server="'+obj.server+'",password="'+obj.password+'", imagestore="'+obj.imagestore+'", maxnews='+obj.maxnews+', timerInterval='+obj.interval+', newsViewType="'+obj.newsViewType+'", isActive=0 WHERE username="'+obj.username +'"');
var result3 = tx.executeSql('UPDATE config SET isActive=1 WHERE username !="'+obj.username +'"'); var result3 = tx.executeSql('UPDATE config SET isActive=1 WHERE username !="'+obj.username +'"');
var result4 = tx.executeSql('UPDATE config SET maxnews='+obj.maxnews); var result4 = tx.executeSql('UPDATE config SET maxnews='+obj.maxnews);
} else {// use insert print('... does not exists, create it') } else {// use insert print('... does not exists, create it')
var result2 = tx.executeSql('INSERT INTO config VALUES (?,?,?,?,?,?,?,?,?,?,?)', [obj.server, obj.username, obj.password, obj.imagestore, obj.maxnews, 0,obj.newsViewType,0,"[[],[],[],[]]",0,""]); var result2 = tx.executeSql('INSERT INTO config VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)', [obj.server, obj.username, obj.password, obj.imagestore, obj.maxnews, obj.interval,obj.newsViewType,0,"[[],[],[],[]]",0,"","",""]);
var result3 = tx.executeSql('UPDATE config SET isActive=1 WHERE username !="'+obj.username +'"'); var result3 = tx.executeSql('UPDATE config SET isActive=1 WHERE username !="'+obj.username +'"');
var result4 = tx.executeSql('UPDATE config SET maxnews='+obj.maxnews); var result4 = tx.executeSql('UPDATE config SET maxnews='+obj.maxnews);
} }
@ -156,12 +157,17 @@ try {Helperjs.friendicaRequest(login,"/api/statusnet/config",rootwindow, functio
"\nFriendica version: "+serverconfig.site.friendica.FRIENDICA_VERSION+"\nDFRN version: "+serverconfig.site.friendica.DFRN_PROTOCOL_VERSION + "\nFriendica version: "+serverconfig.site.friendica.FRIENDICA_VERSION+"\nDFRN version: "+serverconfig.site.friendica.DFRN_PROTOCOL_VERSION +
"\nDB Update version: "+serverconfig.site.friendica.DB_UPDATE_VERSION+"'}"; "\nDB Update version: "+serverconfig.site.friendica.DB_UPDATE_VERSION+"'}";
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]);
db.transaction( function(tx) { db.transaction( function(tx) {
var result = tx.executeSql('UPDATE config SET APIVersion="'+ serverconfig.site.friendica.FRIENDICA_VERSION+'" WHERE username="'+login.username +'"')}) var result = tx.executeSql('UPDATE config SET APIVersion="'+ serverconfig.site.friendica.FRIENDICA_VERSION+'" WHERE username="'+login.username +'"')})
callback(serverconfigString); Helperjs.friendicaRequest(login,"/friendica/json",rootwindow, function (obj){
})} var serverData = JSON.parse(obj);var serverAddons=JSON.stringify(serverData.plugins).replace(/"/g,"");
db.transaction( function(tx) {
var result = tx.executeSql('UPDATE config SET addons="'+ serverAddons+'" WHERE username="'+login.username +'"')})
callback(serverconfigString);
})})}
catch (e){callback (e); catch (e){callback (e);
}} }}
@ -177,7 +183,7 @@ function readConfig(database,callback,filter,filtervalue) { // reads config
for(var i = 0; i < rs.rows.length; i++) { for(var i = 0; i < rs.rows.length; i++) {
rsArray.push(rs.rows.item(i)) rsArray.push(rs.rows.item(i))
} }
var rsObject={server:rsArray[0].server,username:rsArray[0].username, password:rsArray[0].password,imagestore:rsArray[0].imagestore,maxnews:rsArray[0].maxnews,isActive:rsArray[0].isActive,timerInterval:rsArray[0].timerInterval, newsViewType:rsArray[0].newsViewType,permissions:JSON.parse(rsArray[0].permissions),maxContactAge:rsArray[0].maxContactAge,APIVersion:rsArray[0].APIVersion}; var rsObject={server:rsArray[0].server,username:rsArray[0].username, password:rsArray[0].password,imagestore:rsArray[0].imagestore,maxnews:rsArray[0].maxnews,isActive:rsArray[0].isActive,timerInterval:rsArray[0].timerInterval, newsViewType:rsArray[0].newsViewType,permissions:JSON.parse(rsArray[0].permissions),maxContactAge:rsArray[0].maxContactAge,APIVersion:rsArray[0].APIVersion,addons:rsArray[0].addons};
} else {var rsObject=""} } else {var rsObject=""}
callback(rsObject)}} callback(rsObject)}}
) )
@ -252,8 +258,9 @@ function processNews(callback){
} }
function updateContactInDB(login,database,isFriend,contact){// for newstab and friendstab function updateContactInDB(login,database,isFriend,contact){// for newstab and friendstab
var suffix=contact.profile_image_url.substring(contact.profile_image_url.lastIndexOf("."), contact.profile_image_url.length); // var suffix=contact.profile_image_url.substring(contact.profile_image_url.lastIndexOf("."), contact.profile_image_url.length);
var imagename=login.imagestore+"contacts/"+contact.screen_name.trim()+suffix; // var imagename=login.imagestore+"contacts/"+contact.screen_name.trim()+suffix;
var imagename=login.imagestore+"contacts/"+contact.screen_name+"-"+contact.profile_image_url.substring(contact.profile_image_url.lastIndexOf("/")+1, contact.profile_image_url.length);
contacttimer.restart(); contacttimer.restart();
var currentTime=Date.now(); var currentTime=Date.now();
xhr.setUrl(Qt.resolvedUrl(contact.profile_image_url)); xhr.setUrl(Qt.resolvedUrl(contact.profile_image_url));
@ -263,9 +270,9 @@ function updateContactInDB(login,database,isFriend,contact){// for newstab and f
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]);
var result; var result;
db.transaction( function(tx) { db.transaction( function(tx) {
result = tx.executeSql('SELECT * from contacts where username="'+root.login.username+'" AND id = '+contact.id); // check for news id result = tx.executeSql('SELECT * from contacts where username="'+login.username+'" AND url = "'+contact.url+'"'); // check for news url
if(result.rows.length === 1) {// use update if(result.rows.length === 1) {// use update
result = tx.executeSql('UPDATE contacts SET username="'+login.username+'", id='+contact.id+', name="'+Qt.btoa(contact.name)+'", screen_name="'+contact.screen_name+'", location="'+contact.location+'",imageAge='+currentTime+', profile_image_url="'+contact.profile_image_url+'", description="'+Qt.btoa(contact.description)+'", profile_image="'+imagename+'", url="'+contact.url+'" , protected="'+contact.protected+'", followers_count='+contact.followers_count+', friends_count='+contact.friends_count+', created_at="'+ Date.parse(Newsjs.cleanDate(contact.created_at))+'", favourites_count="'+contact.favorites_count+'", utc_offset="'+contact.utc_offset+'", time_zone="'+contact.time_zone+'", statuses_count='+contact.statuses_count+', following="'+contact.following+'", verified ="'+contact.verified+'", statusnet_blocking="'+contact.statusnet_blocking+'", notifications="'+contact.notifictions+'", statusnet_profile_url="'+contact.statusnet_profile_url+'", cid='+contact.cid+', network="'+contact.network+'", isFriend='+isFriend+' where username="'+root.login.username+'" AND id='+contact.id); result = tx.executeSql('UPDATE contacts SET id='+contact.id+', name="'+Qt.btoa(contact.name)+'", screen_name="'+contact.screen_name+'", location="'+contact.location+'",imageAge='+currentTime+', profile_image_url="'+contact.profile_image_url+'", description="'+Qt.btoa(contact.description)+'", profile_image="'+imagename+'", protected="'+contact.protected+'", followers_count='+contact.followers_count+', friends_count='+contact.friends_count+', created_at="'+ Date.parse(Newsjs.cleanDate(contact.created_at))+'", favourites_count="'+contact.favorites_count+'", utc_offset="'+contact.utc_offset+'", time_zone="'+contact.time_zone+'", statuses_count='+contact.statuses_count+', following="'+contact.following+'", verified ="'+contact.verified+'", statusnet_blocking="'+contact.statusnet_blocking+'", notifications="'+contact.notifictions+'", statusnet_profile_url="'+contact.statusnet_profile_url+'", cid='+contact.cid+', network="'+contact.network+'", isFriend='+isFriend+' where username="'+login.username+'" AND url="'+contact.url+'"');
} else {// use insert } else {// use insert
result = tx.executeSql('INSERT INTO contacts VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [login.username,contact.id,Qt.btoa(contact.name),contact.screen_name,contact.location,currentTime,contact.profile_image_url, Qt.btoa(contact.description),imagename,contact.url,contact.protected,contact.followers_count, contact.friends_count,Date.parse(Newsjs.cleanDate(contact.created_at)),contact.favorites_count,contact.utc_offset,contact.time_zone,contact.statuses_count,contact.following,contact.verfied,contact.statusnet_blocking,contact.notifications,contact.statusnet_profile_url,contact.cid,contact.network,isFriend]);} result = tx.executeSql('INSERT INTO contacts VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [login.username,contact.id,Qt.btoa(contact.name),contact.screen_name,contact.location,currentTime,contact.profile_image_url, Qt.btoa(contact.description),imagename,contact.url,contact.protected,contact.followers_count, contact.friends_count,Date.parse(Newsjs.cleanDate(contact.created_at)),contact.favorites_count,contact.utc_offset,contact.time_zone,contact.statuses_count,contact.following,contact.verfied,contact.statusnet_blocking,contact.notifications,contact.statusnet_profile_url,contact.cid,contact.network,isFriend]);}
}); });

553
source-android/js/smiley.js Normal file
View file

@ -0,0 +1,553 @@
var core=[
{name:'&lt;3',url:
'qrc:///images/smileys/core/smiley-heart.gif'},
{name:'&lt;/3',url:
'qrc:///images/smileys/core/smiley-brokenheart.gif'},
{name:':-)',url:
'qrc:///images/smileys/core/smiley-smile.gif'},
{name:';-)',url:
'qrc:///images/smileys/core/smiley-wink.gif'},
{name:':-(',url:
'qrc:///images/smileys/core/smiley-frown.gif'},
{name:':-P',url:
'qrc:///images/smileys/core/smiley-tongue-out.gif'},
{name:':-X',url:
'qrc:///images/smileys/core/smiley-kiss.gif'},
{name:':-D',url:
'qrc:///images/smileys/core/smiley-laughing.gif'},
{name:':-O',url:
'qrc:///images/smileys/core/smiley-surprised.gif'},
{name:'\\o/',url:
'qrc:///images/smileys/core/smiley-thumbsup.gif'},
{name:'o.O',url:
'qrc:///images/smileys/core/smiley-Oo.gif'},
{name:":'(",url:
'qrc:///images/smileys/core/smiley-cry.gif'},
{name:":-!",url:
'qrc:///images/smileys/core/smiley-foot-in-mouth.gif'},
{name:":-/",url:
'qrc:///images/smileys/core/smiley-undecided.gif'},
{name:":-[",url:
'qrc:///images/smileys/core/smiley-embarassed.gif'},
{name:"8-)",url:
'qrc:///images/smileys/core/smiley-cool.gif'},
{name:':beer',url:
'qrc:///images/smileys/core/beer_mug.gif'},
{name:':coffee',url:
'qrc:///images/smileys/core/coffee.gif'},
{name:':facepalm',url:
'qrc:///images/smileys/core/smiley-facepalm.gif'},
{name:':like',url:
'qrc:///images/smileys/core/like.gif'},
{name:':dislike',url:
'qrc:///images/smileys/core/dislike.gif'},
{name:'~friendica',url:
'qrc:///images/smileys/core/friendica-16.png'},
{name:'red#',url:
'qrc:///images/smileys/core/rm-16.png'}
]
var addon=[
{name:':bunnyflowers',url:
'qrc:///images/smileys/animals/bunnyflowers.gif'},
{name:':chick',url:
'qrc:///images/smileys/animals/chick.gif'},
{name:':bumblebee',url:
'qrc:///images/smileys/animals/bee.gif'},
{name:':ladybird',url:
'qrc:///images/smileys/animals/ladybird.gif'},
{name:':bigspider',url:
'qrc:///images/smileys/animals/bigspider.gif' },
{name:':cat',url:
'qrc:///images/smileys/animals/cat.gif'},
{name:':bunny',url:
'qrc:///images/smileys/animals/bunny.gif' },
{name:':cow',url:
'qrc:///images/smileys/animals/cow.gif' },
{name:':crab',url:
'qrc:///images/smileys/animals/crab.gif' },
{name:':dolphin',url:
'qrc:///images/smileys/animals/dolphin.gif' },
{name:':dragonfly',url:
'qrc:///images/smileys/animals/dragonfly.gif' },
{name:':frog',url:
'qrc:///images/smileys/animals/frog.gif'},
{name:':hamster',url:
'qrc:///images/smileys/animals/hamster.gif' },
{name:':monkey',url:
'qrc:///images/smileys/animals/monkey.gif' },
{name:':horse',url:
'qrc:///images/smileys/animals/horse.gif' },
{name:':parrot',url:
'qrc:///images/smileys/animals/parrot.gif' },
{name:':tux',url:
'qrc:///images/smileys/animals/tux.gif' },
{name:':snail',url:
'qrc:///images/smileys/animals/snail.gif' },
{name:':sheep',url:
'qrc:///images/smileys/animals/sheep.gif' },
{name:':dog',url:
'qrc:///images/smileys/animals/dog.gif'},
{name:':elephant',url:
'qrc:///images/smileys/animals/elephant.gif' },
{name:':fish',url:
'qrc:///images/smileys/animals/fish.gif' },
{name:':giraffe',url:
'qrc:///images/smileys/animals/giraffe.gif' },
{name:':pig',url:
'qrc:///images/smileys/animals/pig.gif'},
//Baby
{name:':baby',url:
'qrc:///images/smileys/babies/baby.gif' },
{name:':babycot',url:
'qrc:///images/smileys/babies/babycot.gif' },
{name:':pregnant',url:
'qrc:///images/smileys/babies/pregnant.gif' },
{name:':stork',url:
'qrc:///images/smileys/babies/stork.gif' },
//Confused
{name:':confused',url:
'qrc:///images/smileys/confused/confused.gif' },
{name:':shrug',url:
'qrc:///images/smileys/confused/shrug.gif' },
{name:':stupid',url:
'qrc:///images/smileys/confused/stupid.gif' },
{name:':dazed',url:
'qrc:///images/smileys/confused/dazed.gif' },
//Cool 'qrc:///images/smileys
{name:':affro',url:
'qrc:///images/smileys/cool/affro.gif'},
//Devil/Angel
{name:':angel',url:
'qrc:///images/smileys/devilangel/angel.gif'},
{name:':cherub',url:
'qrc:///images/smileys/devilangel/cherub.gif'},
{name:':devilangel',url:
'qrc:///images/smileys/devilangel/blondedevil.gif' },
{name:':catdevil',url:
'qrc:///images/smileys/devilangel/catdevil.gif'},
{name:':devillish',url:
'qrc:///images/smileys/devilangel/devil.gif'},
{name:':daseesaw',url:
'qrc:///images/smileys/devilangel/daseesaw.gif'},
{name:':turnevil',url:
'qrc:///images/smileys/devilangel/turnevil.gif' },
{name:':saint',url:
'qrc:///images/smileys/devilangel/saint.gif'},
{name:':graveside',url:
'qrc:///images/smileys/devilangel/graveside.gif'},
//Unpleasent
{name:':toilet',url:
'qrc:///images/smileys/disgust/toilet.gif'},
{name:':fartinbed',url:
'qrc:///images/smileys/disgust/fartinbed.gif' },
{name:':fartblush',url:
'qrc:///images/smileys/disgust/fartblush.gif' },
//Drinks
{name:':tea',url:
'qrc:///images/smileys/drink/tea.gif' },
{name:':drool',url:
'qrc:///images/smileys/drool/drool.gif'},
//Sad
{name:':crying',url:
'qrc:///images/smileys/sad/crying.png'},
{name:':prisoner',url:
'qrc:///images/smileys/sad/prisoner.gif' },
{name:':sigh',url:
'qrc:///images/smileys/sad/sigh.gif'},
//Smoking - only one smiley in here, maybe it needs moving elsewhere?
{name:':smoking',url:
'qrc:///images/smileys/smoking/smoking.gif'},
//Sport
{name:':basketball',url:
'qrc:///images/smileys/sport/basketball.gif'},
{name:':bowling',url:
'qrc:///images/smileys/sport/bowling.gif'},
{name:':cycling',url:
'qrc:///images/smileys/sport/cycling.gif'},
{name:':darts',url:
'qrc:///images/smileys/sport/darts.gif'},
{name:':fencing',url:
'qrc:///images/smileys/sport/fencing.gif' },
{name:':juggling',url:
'qrc:///images/smileys/sport/juggling.gif'},
{name:':skipping',url:
'qrc:///images/smileys/sport/skipping.gif'},
{name:':archery',url:
'qrc:///images/smileys/sport/archery.gif'},
{name:':surfing',url:
'qrc:///images/smileys/sport/surfing.gif' },
{name:':snooker',url:
'qrc:///images/smileys/sport/snooker.gif' },
{name:':horseriding',url:
'qrc:///images/smileys/sport/horseriding.gif'},
//Love
{name:':iloveyou',url:
'qrc:///images/smileys/love/iloveyou.gif'},
{name:':inlove',url:
'qrc:///images/smileys/love/inlove.gif'},
{name:':~love',url:
'qrc:///images/smileys/love/love.gif' },
{name:':lovebear',url:
'qrc:///images/smileys/love/lovebear.gif'},
{name:':lovebed',url:
'qrc:///images/smileys/love/lovebed.gif' },
{name:':loveheart',url:
'qrc:///images/smileys/love/loveheart.gif' },
//Tired/Sleep
{name:':countsheep',url:
'qrc:///images/smileys/tired/countsheep.gif' },
{name:':hammock',url:
'qrc:///images/smileys/tired/hammock.gif'},
{name:':pillow',url:
'qrc:///images/smileys/tired/pillow.gif' },
{name:':yawn',url:
'qrc:///images/smileys/tired/yawn.gif'},
//Fight/Flame/Violent
{name:':2guns',url:
'qrc:///images/smileys/fight/2guns.gif' },
{name:':alienfight',url:
'qrc:///images/smileys/fight/alienfight.gif' },
{name:':army',url:
'qrc:///images/smileys/fight/army.gif'},
{name:':arrowhead',url:
'qrc:///images/smileys/fight/arrowhead.gif'},
{name:':bfg',url:
'qrc:///images/smileys/fight/bfg.gif' },
{name:':bowman',url:
'qrc:///images/smileys/fight/bowman.gif' },
{name:':chainsaw',url:
'qrc:///images/smileys/fight/chainsaw.gif'},
{name:':crossbow',url:
'qrc:///images/smileys/fight/crossbow.gif'},
{name:':crusader',url:
'qrc:///images/smileys/fight/crusader.gif' },
{name:':dead',url:
'qrc:///images/smileys/fight/dead.gif' },
{name:':hammersplat',url:
'qrc:///images/smileys/fight/hammersplat.gif' },
{name:':lasergun',url:
'qrc:///images/smileys/fight/lasergun.gif' },
{name:':machinegun',url:
'qrc:///images/smileys/fight/machinegun.gif' },
{name:':acid',url:
'qrc:///images/smileys/fight/acid.gif' },
//Fantasy - monsters and dragons fantasy. The other type of fantasy belongs in adult
{name:':alienmonster',url:
'qrc:///images/smileys/fantasy/alienmonster.gif' },
{name:':barbarian',url:
'qrc:///images/smileys/fantasy/barbarian.gif' },
{name:':dinosaur',url:
'qrc:///images/smileys/fantasy/dinosaur.gif'},
{name:':dragon',url:
'qrc:///images/smileys/fantasy/dragon.gif'},
{name:':draco',url:
'qrc:///images/smileys/fantasy/dragonwhelp.gif'},
{name:':ghost',url:
'qrc:///images/smileys/fantasy/ghost.gif'},
{name:':mummy',url:
'qrc:///images/smileys/fantasy/mummy.gif'},
//Food
{name:':apple',url:
'qrc:///images/smileys/food/apple.gif' },
{name:':broccoli',url:
'qrc:///images/smileys/food/broccoli.gif' },
{name:':cake',url:
'qrc:///images/smileys/food/cake.gif'},
{name:':carrot',url:
'qrc:///images/smileys/food/carrot.gif' },
{name:':popcorn',url:
'qrc:///images/smileys/food/popcorn.gif'},
{name:':tomato',url:
'qrc:///images/smileys/food/tomato.gif'},
{name:':banana',url:
'qrc:///images/smileys/food/banana.gif'},
{name:':cooking',url:
'qrc:///images/smileys/food/cooking.gif'},
{name:':fryegg',url:
'qrc:///images/smileys/food/fryegg.gif'},
{name:':birthdaycake',url:
'qrc:///images/smileys/food/birthdaycake.gif'},
//Happy
{name:':cloud9',url:
'qrc:///images/smileys/happy/cloud9.gif'},
{name:':tearsofjoy',url:
'qrc:///images/smileys/happy/tearsofjoy.gif' },
//Repsect
{name:':bow',url:
'qrc:///images/smileys/respect/bow.gif'},
{name:':bravo',url:
'qrc:///images/smileys/respect/bravo.gif'},
{name:':hailking',url:
'qrc:///images/smileys/respect/hailking.gif'},
{name:':number1',url:
'qrc:///images/smileys/respect/number1.gif' },
//Laugh
{name:':hahaha',url:
'qrc:///images/smileys/laugh/hahaha.gif'},
{name:':loltv',url:
'qrc:///images/smileys/laugh/loltv.gif' },
{name:':rofl',url:
'qrc:///images/smileys/laugh/rofl.gif'},
//Music
{name:':drums',url:
'qrc:///images/smileys/music/drums.gif'},
{name:':guitar',url:
'qrc:///images/smileys/music/guitar.gif'},
{name:':trumpet',url:
'qrc:///images/smileys/music/trumpet.gif' },
//smileys that used to be in core
{name:':headbang',url:
'qrc:///images/smileys/oldcore/headbang.gif'},
{name:':beard',url:
'qrc:///images/smileys/oldcore/beard.png'},
{name:':whitebeard',url:
'qrc:///images/smileys/oldcore/whitebeard.png'},
{name:':shaka',url:
'qrc:///images/smileys/oldcore/shaka.gif'},
{name:':\\.../',url:
'qrc:///images/smileys/oldcore/shaka.gif'},
{name:':\\ooo/',url:
'qrc:///images/smileys/oldcore/shaka.gif' },
{name:':headdesk',url:
'qrc:///images/smileys/oldcore/headbang.gif' },
//These two are still in core, so oldcore isn't strictly right, but we don't want too many directories
{name:':-d',url:
'qrc:///images/smileys/oldcore/laughing.gif'},
{name:':-o',url:
'qrc:///images/smileys/oldcore/surprised.gif' },
// Regex killers - stick these at the bottom so they appear at the end of the English and
// at the start of $OtherLanguage.
{name:':cool',url:
'qrc:///images/smileys/cool/cool.gif' },
{name:':vomit',url:
'qrc:///images/smileys/disgust/vomit.gif' },
{name:':golf',url:
'qrc:///images/smileys/sport/golf.gif' },
{name:':football',url:
'qrc:///images/smileys/sport/football.gif'},
{name:':tennis',url:
'qrc:///images/smileys/sport/tennis.gif' },
{name:':alpha',url:
'qrc:///images/smileys/fight/alpha.png' },
{name:':marine',url:
'qrc:///images/smileys/fight/marine.gif' },
{name:':sabre',url:
'qrc:///images/smileys/fight/sabre.gif' },
{name:':tank',url:
'qrc:///images/smileys/fight/tank.gif' },
{name:':viking',url:
'qrc:///images/smileys/fight/viking.gif' },
{name:':gangs',url:
'qrc:///images/smileys/fight/gangs.gif' },
{name:':dj',url:
'qrc:///images/smileys/music/dj.gif'},
{name:':elvis',url:
'qrc:///images/smileys/music/elvis.gif'},
{name:':violin',url:
'qrc:///images/smileys/music/violin.gif'},
]
var adult=[
{
name:'(o)(o) ',url:
'qrc:///images/smileys/adult/tits.gif'},
{name:'(.)(.) ',url:
'qrc:///images/smileys/adult/tits.gif'},
{name:':bong',url:
'qrc:///images/smileys/adult/bong.gif'},
{name:':sperm',url:
'qrc:///images/smileys/adult/sperm.gif'},
{name:':drunk',url:
'qrc:///images/smileys/adult/drunk.gif'},
{name:':finger',url:
'qrc:///images/smileys/adult/finger.gif'}
]

Some files were not shown because too many files have changed in this diff Show more