v0.6.3 Dark Mode

This commit is contained in:
LubuWest 2021-10-28 21:56:00 +02:00
parent 06499466be
commit 66e5c33b00
56 changed files with 1869 additions and 1283 deletions

View File

@ -1,14 +1,24 @@
## v0.6.3
* Dark theme
* Account Page: list of largest servers for server field
* Settings page: Tabs for different settings
* Conversation opens on short click on news item
* Linux: Option to Autostart on System start
## v0.6.2
* Follow and Unfollow contacts (Friendica 2021.07 required)
* Linux: App stays in systemtray after close, syncs in background
* bugfix for bulk image upload and download of public images
* bugfix for conversations in timeline
## v0.6.1
* Add requestLegacyExternalStorage in AndroidManifest for attachment permissions
* Refresh timeline on start for Linux
* DropArea bugfix for Flatpak
* DropArea bugfix for Flatpak
## v0.6

262
README.md
View File

@ -1,128 +1,134 @@
## Friendiqa ##
QML based client for the Friendica Social Network.
Tabs for news (incl. Direct Messages), friends, photos and events.
OS: currently Linux and Android (4.3 Jelly Bean, 5.1 for background sync).
Source code is a QtCreator project.
## Screenshots ##
![Newstab](Screenshots/NewsTab.jpg)
![Friendstab](Screenshots/FriendsTab.jpg)
![Photostab](Screenshots/PhotoTab.jpg)
![Eventstab](Screenshots/EventsTab.jpg)
![Configtab](Screenshots/ConfigTab.jpg)
## Features ##
# News #
Currently supported:
* Shows Posts from friends, replies, Direct Messages and notifications (in swipe view), selected group, replies, favorited messages, public timeline
* Background sync with configurable interval of 15 min to 2h for active user for friends timeline, replies and DMs (Android 5.1 required)
* Android notifications or Dbus notification (Linux) for new items in friends timeline, replies and DMs
* Search for news
* Click on hashtag in newsitem starts search for news with that word
* Only first photo attachment in post is shown, click for more images and fullscreen image
* Click on video or youtube video shows video fullscreen
* For news containing urls ending with mp3, mp4, avi, webm, ogg or to a Peertube instance: media can be played in the app
* Open links in external browser
* Click on contact photo for contact details and last news
* Click on like text for additional contact info
* Deletion, Reposting, Answering of Posts
* Expand truncated news items
* Liking, disliking, favoriting
* Attending for event posts
* Update fetches new posts (up to last 50) since last in local DB
* More shows older posts from local DB
* Create new Message with images or direct messages, Contact/Group access rights (can be stored), smileys
* Send image from Android gallery
* Send text or urls from other apps to Friendiqa
* Native Android image dialog
ToDo:
* Videos and other binary data as attachment (sending, not supported in API)
* More than one attachment
* Attachments for Direct messages (currently not supported in API)
# Friends #
Currently supported:
* Tabs for own profiles, friends, other contacts and groups
* Show profile(s) of user and change profile picture
* List of all known contacts with locally downloaded pictures
* Follow or unfoolow contacts
* Show follow requests; approve, deny, ignore requests
* Additional information, last messages and other functionality shown in news tab
* Show public and private pictures of contact (screenscraping of contact's website, works only with certain theme)
* Show public and private events of contact
* Show members of groups
* Open website of contact or connect page (for other contacts)
* Clean other contacts with no news
ToDo:
* More information for contact from description page, possibly private information for friends
(needs API change)
* Groups: create, change, delete
(needs API change)
# Images #
Currently supported:
* Download public own images to local directory
* Upload public picture to album with descriptions, send from gallery
* Delete own pictures and albums on client and server
* Change name or album of existing picture
* Show albums in grid, show images in album in grid and fullscreen
* Show public albums and images of contacts
* Pinch to zoom, swipe to scroll
ToDo:
* Upload private images
# Events #
Currently supported:
* Show own events
* Show public events of Friendica contacts
* List view of events of selected date
* Click on event to show details
ToDo
* Create events (needs API)
# Config/Accounts #
Currently supported:
* Multiple accounts
* View mode for news (tree or timeline)
* Maximum news (deleted after use of Quit button)
* Sync home timeline, replies, DM, Events, friend requests; Notify yes/no
* Hide #nsfw
ToDo
* OAuth?
# Other #
* on Linux: App stays in systemtray and syncs in background
ToDo
* Video tab
* Translation
* Blingbling
# Translations #
* German, Spanish, Italian, Hungarian
* To contribute translations: Have a look at linux-sources/translations/friendiqa-de.ts and open it with an editor. It's an xml file. Change values and send me the file to thomasschmidt45 at gmx.net / do pull request.
# Install #
* F-Droid binary repository: [https://www.ma-nic.de/fdroid/repo](https://www.ma-nic.de/fdroid/repo) or for those who get the "error getting index file" from F-Droid client due to outdated crypto libraries the url without encryption: [http://www.ma-nic.de/fdroid/repo](http://www.ma-nic.de/fdroid/repo) To include repo in Fdroid: Open config --> package sources --> plus symbol --> paste url
* [Google Playstore](https://play.google.com/store/apps/details?id=org.qtproject.friendiqa)
* Arch User Repository: [https://aur.archlinux.org/packages/friendiqa/](https://aur.archlinux.org/packages/friendiqa/)
* Flatpak: [https://friendiqa.ma-nic.de/friendiqa.flatpakref](https://friendiqa.ma-nic.de/friendiqa.flatpakref)
## License ##
Pubished under the [GPL v3](http://gplv3.fsf.org) with the exception of the Openssl library, which is published under OpenSSL License.
## Friendiqa
QML based client for the Friendica Social Network. Tabs for news (incl. Direct Messages), friends, photos and events. OS: currently Linux and Android (4.3 Jelly Bean, 5.1 for background sync). Source code is a QtCreator project.
## Screenshots
![Newstab](Screenshots/NewsTab.jpg) ![Friendstab](Screenshots/FriendsTab.jpg) ![Photostab](Screenshots/PhotoTab.jpg) ![Eventstab](Screenshots/EventsTab.jpg) ![Configtab](Screenshots/ConfigTab.jpg)
## Features
# News
Currently supported:
* Shows Posts from friends, replies, Direct Messages and notifications (in swipe view), selected group, replies, favorited messages, public timeline
* Background sync with configurable interval of 15 min to 2h for active user for friends timeline, replies and DMs (Android 5.1 required)
* Android notifications or Dbus notification (Linux) for new items in friends timeline, replies and DMs
* Search for news
* Click on hashtag in newsitem starts search for news with that word
* Only first photo attachment in post is shown, click for more images and fullscreen image
* Click on video or youtube video shows video fullscreen
* For news containing urls ending with mp3, mp4, avi, webm, ogg or to a Peertube instance: media can be played in the app
* Open links in external browser
* Click on contact photo for contact details and last news
* Click on like text for additional contact info
* Click on post text opens conversation
* Deletion, Reposting, Answering of Posts
* Expand truncated news items
* Liking, disliking, favoriting
* Attending for event posts
* Update fetches new posts (up to last 50) since last in local DB
* More shows older posts from local DB
* Create new Message with images or direct messages, Contact/Group access rights (can be stored), smileys
* Send image from Android gallery
* Send text or urls from other apps to Friendiqa
* Native Android image dialog
ToDo:
* Videos and other binary data as attachment (sending, not supported in API)
* More than one attachment
* Attachments for Direct messages (currently not supported in API)
# Friends
Currently supported:
* Tabs for own profiles, friends, other contacts and groups
* Show profile(s) of user and change profile picture
* List of all known contacts with locally downloaded pictures
* Follow or unfoolow contacts
* Show follow requests; approve, deny, ignore requests
* Additional information, last messages and other functionality shown in news tab
* Show public and private pictures of contact (screenscraping of contact's website, works only with certain theme)
* Show public and private events of contact
* Show members of groups
* Open website of contact or connect page (for other contacts)
* Clean other contacts with no news
ToDo:
* More information for contact from description page, possibly private information for friends (needs API change)
* Groups: create, change, delete (needs API change)
# Images
Currently supported:
* Download public own images to local directory
* Upload public picture to album with descriptions, send from gallery
* Delete own pictures and albums on client and server
* Change name or album of existing picture
* Show albums in grid, show images in album in grid and fullscreen
* Show public albums and images of contacts
* Pinch to zoom, swipe to scroll
ToDo:
* Upload private images
# Events
Currently supported:
* Show own events
* Show public events of Friendica contacts
* List view of events of selected date
* Click on event to show details
ToDo
* Create events (needs API)
# Config/Accounts
Currently supported:
* Multiple accounts
* Dark Mode
* View mode for news (conversation tree or timeline)
* Maximum news (deleted after use of Quit button)
* Sync home timeline, replies, DM, Events, friend requests; Notify yes/no
* Hide #nsfw
ToDo
* OAuth?
# Other
* on Linux: App stays in systemtray and syncs in background
* Autostart minimized in systray possible
ToDo
* Video tab
* Translation
* Blingbling
# Translations
* German, Spanish, Italian, Hungarian
* To contribute translations: Have a look at linux-sources/translations/friendiqa-de.ts and open it with an editor. It's an xml file. Change values and send me the file to thomasschmidt45 at gmx.net / do pull request.
# Install
* F-Droid binary repository: <https://www.ma-nic.de/fdroid/repo> or for those who get the "error getting index file" from F-Droid client due to outdated crypto libraries the url without encryption: <http://www.ma-nic.de/fdroid/repo> To include repo in Fdroid: Open config --> package sources --> plus symbol --> paste url
* [Google Playstore](https://play.google.com/store/apps/details?id=org.qtproject.friendiqa)
* Arch User Repository: <https://aur.archlinux.org/packages/friendiqa/>
* Flatpak: <https://friendiqa.ma-nic.de/friendiqa.flatpakref>
## License
Pubished under the [GPL v3](http://gplv3.fsf.org) with the exception of the Openssl library, which is published under OpenSSL License.

View File

@ -1,5 +1,5 @@
<?xml version="1.0"?>
<manifest package="org.qtproject.friendiqa" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.6.2" android:versionCode="28" android:installLocation="auto">
<manifest package="org.qtproject.friendiqa" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.6.3" android:versionCode="29" android:installLocation="auto">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29"/>
<!-- The following comment will be replaced upon deployment with default permissions based on the dependencies of the application.

View File

@ -33,6 +33,7 @@ import QtQuick 2.5
import QtQuick.LocalStorage 2.0
import QtQuick.Window 2.0
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.12
import QtQuick.Layouts 1.11
import "qrc:/js/news.js" as Newsjs
import "qrc:/js/service.js" as Service
@ -70,6 +71,8 @@ ApplicationWindow{
//property string contactLoadType: ""
property bool imagePicking: false
Material.theme: Material.System
function onLoginChanged(login){
if(login==""){rootstackView.push("qrc:/qml/configqml/AccountPage.qml")}
else{//rootstackView.push(rootstack)
@ -138,13 +141,13 @@ ApplicationWindow{
onClosing: {
if (rootstack.currentIndex==0){
newstab.active=true;
if (newstab.newstabstatus!=globaloptions.newsViewType){
if ((newstab.newstabstatus!="") && (newstab.newstabstatus!=globaloptions.newsViewType)&&(globaloptions.newsViewType!=null)){
newstab.newstabstatus=globaloptions.newsViewType;
if(globaloptions.newsViewType=="Timeline"){Newsjs.newsfromdb(db,login.username,0,function(dbnews){
newsSignal(dbnews)
})}
else{
Newsjs.chatsfromdb(db,login.username,function(dbnews){
Newsjs.chatsfromdb(db,login.username,0,function(dbnews){
newsSignal(dbnews)
})}
close.accepted=false;
@ -154,8 +157,9 @@ ApplicationWindow{
newstab.conversation=[];
close.accepted=false
}
else if (root.depth>1){
root.pop();
else if (rootstackView.depth>1){
rootstackView.pop();
roottoolbar.visible=true;
close.accepted=false
}
else{
@ -168,17 +172,17 @@ ApplicationWindow{
close.accepted=true
}
}
else if (rootstack.currentIndex==2){fotoSignal(login.username,"backButton");print("close rootstack currentindex==2");close.accepted=false}
else {rootstack.currentIndex=0;close.accepted=false}
else if (rootstack.currentIndex==2){fotoSignal(login.username,"backButton");bar.currentIndex=0;close.accepted=false}
else {rootstack.currentIndex=0;bar.currentIndex=0;close.accepted=false}
}
footer:ToolBar{
footer:ToolBar{id:roottoolbar
background: Rectangle{
anchors.fill: parent
color: "#EEEEEE"//"#F8F8F8"
color: Material.backgroundDimColor//"#EEEEEE"//"#F8F8F8"
}
TabBar {
@ -190,7 +194,7 @@ ApplicationWindow{
font.pointSize: osSettings.bigFontSize
background:Rectangle{
anchors.fill: parent
color: "#EEEEEE"
color: Material.backgroundDimColor
}
}
TabButton {
@ -198,7 +202,7 @@ ApplicationWindow{
font.pointSize: osSettings.bigFontSize
background:Rectangle{
anchors.fill: parent
color: "#EEEEEE"
color: Material.backgroundDimColor
}
}
TabButton {
@ -206,7 +210,7 @@ ApplicationWindow{
font.pointSize: osSettings.bigFontSize
background:Rectangle{
anchors.fill: parent
color: "#EEEEEE"
color: Material.backgroundDimColor
}
}
TabButton {
@ -214,7 +218,7 @@ ApplicationWindow{
font.pointSize: osSettings.bigFontSize
background:Rectangle{
anchors.fill: parent
color: "#EEEEEE"
color: Material.backgroundDimColor
}
}
}
@ -267,6 +271,9 @@ ApplicationWindow{
Component.onCompleted: {
onLoginChanged(login);
globaloptions=Service.readGO(db);
if(globaloptions.view_darkmode==1){Material.theme=Material.Dark}
else if (globaloptions.view_darkmode==2){Material.theme=Material.Light}
else {Material.theme=Material.System}
//forceActiveFocus();
if(osSettings.osType=="Android"){
var component = Qt.createComponent("qrc:/qml/genericqml/IntentReceiver.qml");

View File

@ -250,5 +250,7 @@
<file>translations/friendiqa-hu.ts</file>
<file>images/Friendiqa.png</file>
<file>images/Friendica_monochrome.png</file>
<file>qml/configqml/ConfigAppearancePage.qml</file>
<file>qml/configqml/ConfigStartPage.qml</file>
</qresource>
</RCC>

View File

@ -53,6 +53,19 @@ QString FILESYSTEM::Directory() const
return m_Directory;
}
void FILESYSTEM::setVisibility(bool Visibility)
{
if (Visibility!=m_Visibility) {
m_Visibility = Visibility;
emit visibilityChanged();
}
}
bool FILESYSTEM::Visibility()
{
return m_Visibility;
}
QString FILESYSTEM::homePath() const
{
//QDir dir(m_Directory);
@ -135,3 +148,42 @@ QFileInfoList FILESYSTEM::fileList()
//qDebug() << "filelist " << m_Filelist;
return dir.entryInfoList();
}
bool FILESYSTEM::isAutostart() {
QFileInfo check_file(QDir::homePath() + "/.config/autostart/friendiqa.desktop");
if (check_file.exists() && check_file.isFile()) {
qDebug()<<"autostart "<<true;
return true;
}
qDebug()<<"autostart "<<false;
return false;
}
void FILESYSTEM::setAutostart(bool autostart) {
QString path = QDir::homePath() + "/.config/autostart/";
QString name ="friendiqa.desktop";
QFile file(path+name);
file.remove();
if(autostart) {
QDir dir(path);
if(!dir.exists()) {
dir.mkpath(path);
}
if (file.open(QIODevice::ReadWrite)) {
QTextStream stream(&file);
stream << "[Desktop Entry]" << Qt::endl;
stream << "Name=Friendiqa" << Qt::endl;
stream << "Exec=friendiqa -background %u" << Qt::endl;
stream << "Terminal=false" << Qt::endl;
stream << "Icon=Friendiqa.svg" << Qt::endl;
stream << "Type=Application" << Qt::endl;
stream << "StartupNotify=false" << Qt::endl;
stream << "X-GNOME-Autostart-enabled=true" << Qt::endl;
}
}
}

View File

@ -43,8 +43,10 @@ class FILESYSTEM : public QObject//, public QAndroidActivityResultReceiver
{
Q_OBJECT
Q_PROPERTY(QString Directory READ Directory WRITE setDirectory NOTIFY directoryChanged)
Q_PROPERTY(bool Visibility READ Visibility WRITE setVisibility NOTIFY visibilityChanged)
//Q_PROPERTY(bool direxist READ direxist)
Q_PROPERTY(QString homePath READ homePath)
Q_PROPERTY(bool isAutostart READ isAutostart)
//Q_PROPERTY(QString cameraPath READ cameraPath)
@ -52,16 +54,21 @@ public:
static FILESYSTEM *instance();
explicit FILESYSTEM(QObject *parent = 0);
void setDirectory(QString Directory);
void setVisibility(bool Visibility);
QString Directory() const;
QFileInfoList fileList();
//bool direxist(QString Directory);
QString homePath() const;
bool Visibility();
bool isAutostart();
//QString cameraPath() const;
// virtual void handleActivityResult(int receiverRequestCode, int resultCode, const QAndroidJniObject &data);
signals:
//void imageselected(QString);
void directoryChanged();
void visibilityChanged();
//void fileListContent(QList data);
void success(QString data);
void error(QString data, int code);
@ -72,12 +79,14 @@ public slots:
void makePath(QString name);
void rmDir();
void rmFile(QString name);
void setAutostart(bool autostart);
//void searchImage();
//void fileList();
private:
QString m_Directory;
QString homeDir;
bool m_Visibility;
//QList m_Filelist;
};

View File

@ -53,6 +53,18 @@ QString FILESYSTEM::Directory() const
{
return m_Directory;
}
void FILESYSTEM::setVisibility(bool Visibility)
{
if (Visibility!=m_Visibility) {
m_Visibility = Visibility;
emit visibilityChanged();
}
}
bool FILESYSTEM::Visibility()
{
return m_Visibility;
}
QString FILESYSTEM::homePath() const
{
@ -113,3 +125,36 @@ QFileInfoList FILESYSTEM::fileList()
dir.setSorting(QDir::Time | QDir::Reversed);
return dir.entryInfoList();
}
bool FILESYSTEM::isAutostart() {
QFileInfo check_file(QDir::homePath() + "/.config/autostart/friendiqa.desktop");
if (check_file.exists() && check_file.isFile()) {
qDebug()<<"autostart "<<true;
return true;
}
qDebug()<<"autostart "<<false;
return false;
}
void FILESYSTEM::setAutostart(bool autostart) {
QString path = QDir::homePath() + "/.config/autostart/";
QString name ="friendiqa.desktop";
QFile file(path+name);
file.remove();
if(autostart) {
QDir dir(path);
if(!dir.exists()) {
dir.mkpath(path);
}
if (file.open(QIODevice::ReadWrite)) {
QTextStream stream(&file);
stream << "[Desktop Entry]" << Qt::endl;
stream << "Exec=friendiqa -background %u" << Qt::endl;
stream << "Type=Application" << Qt::endl;
}
}
}

View File

@ -75,6 +75,7 @@ int main(int argc, char *argv[]) {
updatenews->setDatabase();
updatenews->login();
updatenews->startsync();
//app.connect (updatenews,SIGNAL(quitapp()),&app,SLOT(quit()));
//QtAndroid::androidService().callMethod<void>("stopSelf");
//return app.exec();
@ -94,6 +95,10 @@ int main(int argc, char *argv[]) {
XHR* xhr = XHR::instance();
view.rootContext()->setContextProperty("xhr", xhr);
FILESYSTEM* filesystem = FILESYSTEM::instance();
if (qstrcmp(argv[1],"-background")==0){
filesystem->setVisibility(false);
} else{filesystem->setVisibility(true);}
view.rootContext()->setContextProperty("filesystem", filesystem);
ALARM* alarm = ALARM::instance();
view.rootContext()->setContextProperty("alarm", alarm);

View File

@ -7,4 +7,4 @@ Terminal=false
Name=Friendiqa
GenericName=Social Media
Comment= App for social network Friendica
Categories=Network,Qt,News
Categories=Network

View File

@ -64,19 +64,21 @@ function beautify(newsitemobject,msg){
var attachArray=newsitemobject.attachments;
for (var image in attachArray){
var attachhelper={mimetype:attachArray[image].mimetype}
var attachhelperstring=Qt.btoa(attachArray[image].url)
var attachhelperstring="<img" //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}
// 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
// }
if (helperstringposition>-1){var removeme=newsitemobject.statusnet_html.substring(helperstringposition,newsitemobject.statusnet_html.indexOf('">',helperstringposition)+2);}
//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),"")
newsitemobject.statusnet_html=newsitemobject.statusnet_html.replace(removeme,"")
//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),"")
imageAttachmentList.push(attachhelper)
}
@ -138,18 +140,19 @@ if(msg.deleteId!==undefined)
msg.model.sync()
}
else{
if(msg.method=="refresh" ||(msg.method=="conversation"&&msg.news.length>0)){msg.model.clear()};
if(msg.method=="refresh" || msg.method=="contact" ||(msg.method=="conversation"&&msg.news.length>0)){msg.model.clear()};
msg.model.sync()
for (var j=0;j<msg.news.length;j++){
//for (var j=0;j<msg.news.length;j++){
for (var j in msg.news){
let data=({})
if (msg.news[j]) {
var newsitemobject=msg.news[j];
newsitemobject=beautify(newsitemobject,msg);
if (newsitemobject.hasOwnProperty("currentconversation")&&(newsitemobject.currentconversation.length>0)){
newsitemobject.lastcomment=beautify(newsitemobject.currentconversation[newsitemobject.currentconversation.length-1],msg);
newsitemobject.lastcomment.indent=1
//print("Currentconversation" + newsitemobject.currentconversation.length+JSON.stringify(newsitemobject.lastcomment))
}
}
if (msg.method=="conversation"){
if (j==0){newsitemobject.indent=0}else{
@ -160,19 +163,17 @@ else{
}
}
}}
var data=({"newsitemobject": newsitemobject})
data=({"newsitemobject": newsitemobject})
}
if(msg.method=="append") {
msg.model.insert(j, data)}
else{
msg.model.append(data)
}
}
if (j==msg.news.length){
//if (j==msg.news.length){
msg.model.sync()
}
//}
}
}

View File

@ -350,7 +350,7 @@ function updateglobaloptions(database,key,value){
var db=Sql.LocalStorage.openDatabaseSync(database[0],database[1],database[2],database[3]);
db.transaction( function(tx) {
var result = tx.executeSql('SELECT * from globaloptions where k="'+key+'"'); // check for key
if(result.rows.length === 1) {// use update
if(result.rows.length > 0) {// use update
result = tx.executeSql('UPDATE globaloptions SET v="'+value+'" WHERE k="'+key+'"')
} else {// use insert
result = tx.executeSql('INSERT INTO globaloptions (k,v) VALUES (?,?)', [key,value])
@ -412,7 +412,7 @@ function cleanContacts(login,database,callback){
//print(login.username+" älteste news: "+ oldestnewsTime);
var result = tx.executeSql('SELECT * from contacts WHERE username="'+login.username+'" AND isFriend=0 AND imageAge<'+oldestnewsTime); // check for friends
//print ("Contact result length: "+ result.rows.length)
for (var i=0;i<result.rows.length;i++){
for (var i=0;i<result.rows.length;i++){//print("rm "+result.rows.item(i).profile_image)
filesystem.rmFile(result.rows.item(i).profile_image);
var deleters = tx.executeSql('DELETE from contacts WHERE username="'+login.username+'" AND url="'+result.rows.item(i).url+'"');
}

View File

@ -30,6 +30,7 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
import QtQuick 2.11
import QtQuick.Controls.Material 2.12
//import QtQuick.Controls 2.4
Item {
@ -50,7 +51,7 @@ Item {
id:daytext
anchors.right: parent.right
anchors.margins: 0.5*mm
color:(model.month==monthgrid.month)?"black":"grey"
color:(model.month==monthgrid.month)?Material.primaryTextColor:Material.secondaryTextColor
wrapMode: Text.WrapAnywhere
text: model.day
font.bold: model.today

View File

@ -31,6 +31,7 @@
import QtQuick 2.0
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import QtQml 2.2
import Qt.labs.calendar 1.0
//import QtQuick.Layouts 1.3
@ -45,7 +46,7 @@ Rectangle {
width:parent.width//-mm
height:parent.height//-5*mm
// anchors.fill: parent
color: '#fff'
color: Material.backgroundColor//'#fff'
property date currentTime: new Date()
property int offsetTime: currentTime.getTimezoneOffset() * 60 * 1000
property var events:[]
@ -190,6 +191,7 @@ Rectangle {
//Layout.fillWidth: true
width: parent.width-root.fontFactor*osSettings.bigFontSize
horizontalAlignment:Text.AlignHCenter
color: Material.primaryTextColor
text: model.year
font.pointSize: osSettings.systemFontSize
}
@ -197,6 +199,7 @@ Rectangle {
width: parent.width-osSettings.bigFontSize
text: Qt.locale().standaloneMonthName(model.month)
//Layout.fillWidth: true
color: Material.primaryTextColor
horizontalAlignment:Text.AlignHCenter
font.pointSize: osSettings.systemFontSize
}

View File

@ -31,6 +31,7 @@
import QtQuick 2.0
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/js/service.js" as Service
import "qrc:/js/helper.js" as Helperjs
import "qrc:/qml/genericqml"
@ -40,7 +41,7 @@ Rectangle{
id:eventList
// height: parent.height
// width:parent.width
color: Material.backgroundColor
//radius: 0.5*mm
property var daylist:[]
property int dayint: 0

View File

@ -31,6 +31,7 @@
import QtQuick 2.0
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/js/service.js" as Service
import "qrc:/js/helper.js" as Helperjs
import "qrc:/qml/genericqml"
@ -42,7 +43,8 @@ Rectangle{
property var currEvent: event
width:parent.width
height:eventNameText.height+eventDetailsText.height+mm
border.color: "light grey"
border.color: Material.backgroundDimColor//"light grey"
color: Material.backgroundColor
border.width: 1
radius: 0.5*mm
Image {
@ -61,6 +63,7 @@ Rectangle{
x: 8*mm
width:parent.width-8*mm
height:contentHeight
color: Material.primaryTextColor
font.pointSize: osSettings.systemFontSize
text: new Date(event.start).toLocaleString(Qt.locale(),Locale.NarrowFormat)+ " - " +((event.end>0)&&(event.end!=null)?new Date(event.end).toLocaleString(Qt.locale(),Locale.NarrowFormat):"\u221E")+":\n"+event.title //+calendarrectangle.offsetTime
wrapMode:Text.Wrap
@ -72,6 +75,7 @@ Rectangle{
z:4
width: parent.width-8*mm
height: contentHeight
color: Material.primaryTextColor
textFormat: Text.RichText
text: status!="large"?"":Qt.atob(event.desc) + (event.location==""?"":"<br><br>"+qsTr("Location")+": "+event.location)//Qt.atob(event.html)
anchors.top: eventNameText.bottom

View File

@ -33,6 +33,7 @@ import QtQuick 2.7
import QtQuick.Dialogs 1.2
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
import QtQml.Models 2.15
import "qrc:/js/service.js" as Service
import "qrc:/js/layout.js" as Layoutjs
import "qrc:/js/helper.js" as Helperjs
@ -40,53 +41,53 @@ import "qrc:/qml/configqml"
import "qrc:/qml/genericqml"
Page{
id:accountPage
width: root.width
height: root.height
property var users:[]
property var userdata: ({})
property string imagestoredir: ""
id:accountPage
width: root.width
height: root.height
property var users:[]
property var userdata: ({})
property string imagestoredir: ""
function setServericon(server){
try {Helperjs.friendicaWebRequest(server+"/api/statusnet/config",accountPage, function (obj){
function setServericon(server){
if ((server!=null) && (server!="")){
try {Helperjs.friendicaWebRequest(server+"/api/statusnet/config",accountPage, function (obj){
var serverdata = JSON.parse(obj);
servericon.visible=true;
servericon.source=serverdata.site.logo})} catch(e){print(e)}
servericon.source=serverdata.site.logo})
} catch(e){print(e)}
}
}
MButton{
id:userButton
text:qsTr("User")
font.pointSize: osSettings.bigFontSize
x: root.fontFactor*osSettings.bigFontSize
y: root.fontFactor*osSettings.bigFontSize
width: root.width/2 - 2*mm
height: 2*root.fontFactor*osSettings.bigFontSize
visible: users.length>0
onClicked:{
var useritems="";
for (var i=0;i<accountPage.users.length;i++){
useritems=useritems+"MenuItem{font.pointSize: osSettings.bigFontSize;width:accountPage.width*2/3; text:'"+accountPage.users[i].username+
"'; onTriggered: {Service.readConfig(db,function(obj){
userButton.text=obj.username;
servername.text=obj.server;
accountPage.setServericon(obj.server);
username.text= obj.username;
password.text=Qt.atob(obj.password);
imagestore.text=obj.imagestore;
imagestoredir=obj.imagestore;
if( obj.isActive==0){userButton.font.bold='true'} else {userButton.font.bold='false'}
},'username','"+ accountPage.users[i].username+"')}}"
}
var menuString="import QtQuick.Controls 2.12;import 'qrc:/js/service.js' as Service;"+
" Menu {width:8*root.fontFactor*osSettings.bigFontSize;"+useritems+"}";
var userlistObject=Qt.createQmlObject(menuString,accountPage,"usermenuOutput")
userlistObject.popup() }
MButton{
id:userButton
text:qsTr("User")
font.pointSize: osSettings.bigFontSize
x: root.fontFactor*osSettings.bigFontSize
y: root.fontFactor*osSettings.bigFontSize
width: root.width/2 - 2*mm
height: 2*root.fontFactor*osSettings.bigFontSize
visible: users.length>0
onClicked:{
var useritems="";
for (var i=0;i<accountPage.users.length;i++){
useritems=useritems+"MenuItem{font.pointSize: osSettings.bigFontSize;width:accountPage.width*2/3; text:'"+accountPage.users[i].username+
"'; onTriggered: {Service.readConfig(db,function(obj){
userButton.text=obj.username;
serverModel.insert(0,{text:obj.server})
accountPage.setServericon(obj.server);
username.text= obj.username;
password.text=Qt.atob(obj.password);
imagestore.text=obj.imagestore;
imagestoredir=obj.imagestore;
if( obj.isActive==0){userButton.font.bold='true'} else {userButton.font.bold='false'}
},'username','"+ accountPage.users[i].username+"')}}"
}
var menuString="import QtQuick.Controls 2.12;import 'qrc:/js/service.js' as Service;"+
" Menu {width:8*root.fontFactor*osSettings.bigFontSize;"+useritems+"}";
var userlistObject=Qt.createQmlObject(menuString,accountPage,"usermenuOutput")
userlistObject.popup() }
}
Image{
id:servericon
@ -115,18 +116,87 @@ Page{
onClicked:{Qt.openUrlExternally(Qt.resolvedUrl("https://dir.friendica.social/servers"))}
}
// ComboBox{
// id: servername
// x: 4*root.fontFactor*osSettings.bigFontSize
// y: 3.5*root.fontFactor*osSettings.bigFontSize
// width: root.width-5*root.fontFactor*osSettings.bigFontSize
// height: 2.5*root.fontFactor*osSettings.bigFontSize//5*mm;
// font.pointSize: osSettings.systemFontSize
// editable:true
// model: serverModel
// onAccepted: {
// let cleanText =currentText;if(currentText==""){cleanText=editText}
// if((cleanText).substring(0,8) !=="https://"){
// cleanText="https://"+cleanText
// }
// if (find(cleanText) === -1) {
// serverModel.append({text: cleanText})
// currentIndex = find(cleanText)
// displayText=cleanText
// }
// if (cleanText!=""){accountPage.setServericon(cleanText)}
// }
// onFocusChanged: {
// if(focus==false){
// onAccepted()
// }
// }
// }
TextField {
id: servername
x: 4*root.fontFactor*osSettings.bigFontSize; y: 4*root.fontFactor*osSettings.bigFontSize; width: root.width-18*mm; //height: 5*mm;
placeholderText: qsTr("Server")
x: 4*root.fontFactor*osSettings.bigFontSize
y: 3.5*root.fontFactor*osSettings.bigFontSize
width: root.width-5*root.fontFactor*osSettings.bigFontSize
height: 2.5*root.fontFactor*osSettings.bigFontSize//5*mm;
font.pointSize: osSettings.systemFontSize
onEditingFinished: {
if ((servername.text)==""){}
else if((servername.text).substring(0,7) !=="https://"){
servername.text= "https://"+text//(serverstring.text).substring(8)
}
accountPage.setServericon(servername.text)}
text:"https://"
onFocusChanged:{
if (focus){servermenu.open()}
else{
if((servername.text).substring(0,11) =="https://http"){
servername.text= (servername.text).substring(8)
}
if (servername.text!="https://"){
accountPage.setServericon(servername.text)}
}
}
}
Menu {
id:servermenu
width: 13*root.fontFactor*osSettings.bigFontSize
x: 4*root.fontFactor*osSettings.bigFontSize
y: 5*root.fontFactor*osSettings.bigFontSize
Instantiator{
model:serverModel
MenuItem{
text: modelData
onTriggered: {servername.text=modelData}
}
onObjectAdded: servermenu.insertItem(index,object)
onObjectRemoved: servermenu.removeItem(object)
}
}
ListModel{id:serverModel
ListElement{text:"https://asaps-sm.lafayettegroup.com"}
ListElement{text:"https://f.freinetz.ch"}
ListElement{text:"https://friendica.chilemasto.casa"}
ListElement{text:"https://friendica.utzer.de"}
ListElement{text:"https://friendica.vrije-mens.org"}
ListElement{text:"https://friendicarg.nsupdate.info.de"}
ListElement{text:"https://friends.nogafam.es"}
ListElement{text:"https://libranet.de"}
ListElement{text:"https://loma.ml"}
ListElement{text:"https://social.trom.tf"}
ListElement{text:"https://motley.club"}
ListElement{text:"https://nerdica.net"}
ListElement{text:"https://noovi.org"}
ListElement{text:"https://nsfw.wnymathguy.com"}
ListElement{text:"https://opensocial.at"}
ListElement{text:"https://social.isurf.ca"}
ListElement{text:"https://squeet.me"}
ListElement{text:"https://venera.social"}
}
TextField {
@ -155,7 +225,7 @@ Page{
inputMethodHints: Qt.ImhNoAutoUppercase | Qt.ImhNoPredictiveText | Qt.ImhSensitiveData
}
Text {
Label {
id: imagedirlabel
visible: imagestore.text!=""
text: qsTr("Image dir.")
@ -210,8 +280,8 @@ Page{
text: qsTr("Confirm")
font.pointSize: osSettings.bigFontSize
onClicked:{
accountBusy.running=true;
var userconfig={server: servername.text, username: username.text, password:Qt.btoa(password.text), imagestore:imagestoredir, maxnews:"",interval: ""};
accountBusy.running=true;//servername.displayText
var userconfig={server: servername.displayText, username: username.text, password:Qt.btoa(password.text), imagestore:imagestoredir, maxnews:"",interval: ""};
var errormessage="";
if (servername.text==""){errormessage=qsTr("No server given! ")}
else if (username.text==""){errormessage+=qsTr("No nickname given! ")}
@ -274,23 +344,23 @@ Page{
onClicked:{
var userconfig={server: servername.text, username: username.text, password: Qt.btoa(password.text)};
Service.deleteConfig(db,userconfig,function(){
filesystem.Directory=imagestore.text+"contacts";
filesystem.rmDir();
filesystem.Directory=imagestore.text+"albums";
filesystem.rmDir();
servername.text="https://";
servericon.visible=false;
servericon.source="";
username.text="";
password.text="";
imagestore.text="";
filesystem.Directory=imagestore.text+"contacts";
filesystem.rmDir();
filesystem.Directory=imagestore.text+"albums";
filesystem.rmDir();
servername.text="https://";
servericon.visible=false;
servericon.source="";
username.text="";
password.text="";
imagestore.text="";
//maxNews.value=0;
//newsTypeField.text="Conversations";
//messageIntervalSlider.value=30;
userButton.text=qsTr("User");
Helperjs.readData(db,"config","",function(storedUsers){
storedUsers.sort(function(obj1, obj2) {
return obj1.isActive - obj2.isActive;
userButton.text=qsTr("User");
Helperjs.readData(db,"config","",function(storedUsers){
storedUsers.sort(function(obj1, obj2) {
return obj1.isActive - obj2.isActive;
})
accountPage.users=storedUsers;})
})
@ -339,6 +409,7 @@ Page{
Service.readConfig(db,function(obj){
userButton.text=obj.username;
servername.text=obj.server;
serverModel.insert(0,{text:obj.server})
accountPage.setServericon(obj.server);
username.text= obj.username;
password.text=Qt.atob(obj.password);

View File

@ -0,0 +1,220 @@
// This file is part of Friendiqa
// https://git.friendi.ca/lubuwest/Friendiqa
// Copyright (C) 2020 Marco R. <thomasschmidt45@gmx.net>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// In addition, as a special exception, the copyright holders give
// permission to link the code of portions of this program with the
// OpenSSL library under certain conditions as described in each
// individual source file, and distribute linked combinations including
// the two.
//
// You must obey the GNU General Public License in all respects for all
// of the code used other than OpenSSL. If you modify file(s) with this
// exception, you may extend this exception to your version of the
// file(s), but you are not obligated to do so. If you do not wish to do
// so, delete this exception statement from your version. If you delete
// this exception statement from all source files in the program, then
// also delete it here.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
import QtQuick 2.11
import QtQuick.Dialogs 1.2
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/js/service.js" as Service
import "qrc:/qml/configqml"
import "qrc:/qml/genericqml"
Page{
//anchors.fill: parent
width:root.width
height:root.height
Label {
text: qsTr("News as")
font.pointSize:osSettings.systemFontSize
x: root.fontFactor*osSettings.bigFontSize; y: 2*root.fontFactor*osSettings.bigFontSize
}
Rectangle{
x: root.fontFactor*osSettings.bigFontSize; y: 4*root.fontFactor*osSettings.bigFontSize;
width: newsTypeField.contentWidth+2*mm; height: 2*root.fontFactor*osSettings.bigFontSize
color: Material.dialogColor//"#F3F3F3"
radius: 0.5*mm
Label{
id: newsTypeField
anchors.fill: parent
font.pointSize:osSettings.bigFontSize
text:qsTr("Conversations")
}
MouseArea{
anchors.fill:parent
onClicked:newstypemenu.popup()
}
}
Menu {
id:newstypemenu
width:12*root.fontFactor*osSettings.bigFontSize
MenuItem {
font.pointSize: osSettings.bigFontSize
text: qsTr("Timeline")
onTriggered: {newsTypeField.text=qsTr("Timeline");
Service.updateglobaloptions(root.db,"newsViewType","Timeline");}
}
MenuItem {
font.pointSize: osSettings.bigFontSize
text: qsTr("Conversations")
onTriggered: {newsTypeField.text=qsTr("Conversations");
Service.updateglobaloptions(root.db,"newsViewType","Conversations");}
}
}
Label {
text: qsTr("Max. News")
font.pointSize: osSettings.systemFontSize
x: root.fontFactor*osSettings.bigFontSize; y:8*root.fontFactor*osSettings.bigFontSize
}
Slider{ id: maxNews
x:6*root.fontFactor*osSettings.bigFontSize; y: 10*root.fontFactor*osSettings.bigFontSize;
width: root.width/2;height:2*root.fontFactor*osSettings.bigFontSize
from: 0;to:2000; stepSize: 100
value: root.globaloptions.hasOwnProperty("max_news")?root.globaloptions.max_news:1000
}
Rectangle{
color: Material.dialogColor
x: root.fontFactor*osSettings.bigFontSize; y: 10*root.fontFactor*osSettings.bigFontSize;
width: 4*root.fontFactor*osSettings.bigFontSize; height: 2*root.fontFactor*osSettings.bigFontSize;
radius: 0.5*mm
TextEdit{id:maxNewsText;
anchors.fill: parent
font.pointSize: osSettings.bigFontSize
verticalAlignment:TextEdit.AlignRight
color: Material.primaryTextColor
text:maxNews.value
selectByMouse: true
onTextChanged: {
Service.updateglobaloptions(root.db,"max_news",text);
}
}
}
CheckBox{
id: nsfwCheckbox
x: root.fontFactor*osSettings.bigFontSize
y: 14*root.fontFactor*osSettings.bigFontSize
font.pointSize: osSettings.bigFontSize
text: qsTr("Hide #nsfw?")
checked:(globaloptions["hide_nsfw"]==1)?true:false
onClicked: {
toggle();
if(nsfwCheckbox.checked==true){
Service.updateglobaloptions(root.db,"hide_nsfw",0);nsfwCheckbox.checked=false;
}
else{
Service.updateglobaloptions(root.db,"hide_nsfw",1);nsfwCheckbox.checked=true;
}
}
}
// CheckBox{
// id: darkmodeCheckbox
// tristate:true
// x: root.fontFactor*osSettings.bigFontSize
// y: 24*root.fontFactor*osSettings.bigFontSize
// font.pointSize: osSettings.bigFontSize
// text: qsTr("Dark Mode")
// checked:(globaloptions["view_darkmode"]==1)?true:false
// onClicked: {
// toggle();
// if(darkmodeCheckbox.checked==true){
// Service.updateglobaloptions(root.db,"view_darkmode",0);darkmodeCheckbox.checked=false;
// root.Material.theme=Material.Light
// }
// else{
// Service.updateglobaloptions(root.db,"view_darkmode",1);darkmodeCheckbox.checked=true;
// root.Material.theme=Material.Dark
// }
// }
// }
Column{
x: root.fontFactor*osSettings.bigFontSize
y: 18*root.fontFactor*osSettings.bigFontSize
Label{
text: qsTr("Dark Mode")
font.pointSize: osSettings.systemFontSize}
RadioButton{
text: qsTr("System")
checked: (globaloptions["view_darkmode"]==0 || globaloptions["view_darkmode"]==undefined)?true:false
font.pointSize: osSettings.bigFontSize
onClicked: {
if(checked==true){
Service.updateglobaloptions(root.db,"view_darkmode",0);
root.Material.theme=Material.System
}
}
}
RadioButton{
text: qsTr("Dark")
checked: (globaloptions["view_darkmode"]==1)?true:false
font.pointSize: osSettings.bigFontSize
onClicked: {
if(checked==true){
Service.updateglobaloptions(root.db,"view_darkmode",1);
root.Material.theme=Material.Dark
}
}
}
RadioButton{
text: qsTr("Light")
checked: (globaloptions["view_darkmode"]==2)?true:false
font.pointSize: osSettings.bigFontSize
onClicked: {
if(checked==true){
Service.updateglobaloptions(root.db,"view_darkmode",2);
root.Material.theme=Material.Light
}
}
}
}
MButton {
anchors.right: parent.right; //anchors.rightMargin: mm;
anchors.top: parent.top
anchors.topMargin: 2*root.fontFactor*osSettings.bigFontSize
width: 2*root.fontFactor*osSettings.bigFontSize;
text: "?"
font.pointSize: osSettings.bigFontSize
onClicked:{
rootstackView.push("qrc:/qml/configqml/InfoBox.qml");
}
}
// MButton{
// id:closeButton
// // height: 2*root.fontFactor*osSettings.bigFontSize
// width: 2*root.fontFactor*osSettings.bigFontSize;
// anchors.top: parent.top
// anchors.topMargin:root.fontFactor*osSettings.bigFontSize
// anchors.right: parent.right
// anchors.rightMargin: 1*mm
// text: "\uf057"
// font.pointSize: osSettings.bigFontSize
// onClicked:{rootstackView.pop()}
// }
}

View File

@ -31,8 +31,9 @@
import QtQuick 2.11
import QtQuick.Dialogs 1.2
import QtQuick.Layouts 1.11
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/js/service.js" as Service
import "qrc:/qml/configqml"
import "qrc:/qml/genericqml"
@ -42,122 +43,77 @@ Page{
width:root.width
height:root.height
Rectangle{
x: root.fontFactor*osSettings.bigFontSize; y:4*root.fontFactor*osSettings.bigFontSize;
width: parent.width - 6*root.fontFactor*osSettings.bigFontSize; height: 2*root.fontFactor*osSettings.bigFontSize
color:"#F3F3F3"
radius: 0.5*mm
Text{
anchors.fill: parent
font.pointSize: osSettings.bigFontSize
text:qsTr("Sync")
TabBar {
id: configbar
width: parent.width-3*root.fontFactor*osSettings.bigFontSize//osSettings.osType=="Android"?parent.width-3*root.fontFactor*osSettings.bigFontSize:parent.width
height: 2*root.fontFactor*osSettings.bigFontSize
x: osSettings.osType=="Android"?2*osSettings.bigFontSize:0
//visible: !wideScreen
position:TabBar.Header
currentIndex: 0
TabButton {
text: qsTr("Appearance")
font.pointSize: osSettings.systemFontSize
height: 2*root.fontFactor*osSettings.bigFontSize
width:6*root.fontFactor*osSettings.bigFontSize
}
MouseArea{
anchors.fill:parent
onClicked:rootstackView.push("qrc:qml/configqml/SyncConfig.qml");
TabButton {
text: qsTr("Sync")
font.pointSize: osSettings.systemFontSize
height: 2*root.fontFactor*osSettings.bigFontSize
width:10*root.fontFactor*osSettings.bigFontSize
}
TabButton {
text: qsTr("Start")
visible:osSettings.osType=="Linux"
font.pointSize: osSettings.systemFontSize
height: 2*root.fontFactor*osSettings.bigFontSize
width:10*root.fontFactor*osSettings.bigFontSize
}
}
Text {
text: qsTr("News as")
font.pointSize:osSettings.systemFontSize
x: root.fontFactor*osSettings.bigFontSize; y: 8*root.fontFactor*osSettings.bigFontSize
LeftDrawerLinux{
id:leftDrawer
visible: wideScreen&&rootstackView.depth<2
width: visible?osSettings.systemFontSize*15:0
height: root.height-bar.height
}
Rectangle{
x: root.fontFactor*osSettings.bigFontSize; y: 10*root.fontFactor*osSettings.bigFontSize;
width: newsTypeField.contentWidth+2*mm; height: 2*root.fontFactor*osSettings.bigFontSize
color:"#F3F3F3"
radius: 0.5*mm
Text{
id: newsTypeField
anchors.fill: parent
font.pointSize:osSettings.bigFontSize
text:qsTr("Conversations")
LeftDrawerAndroid{
id: leftDrawerAndroid
}
StackLayout{
id:configTabView
//anchors.fill: parent
width: wideScreen&&rootstackView.depth<2?parent.width-leftDrawer.width-mm:parent.width-mm//newstabitem.width/3*2:newstabitem.width
x: leftDrawer.width
y: configbar.height
height: parent.height-configbar.height-mm
currentIndex: configbar.currentIndex
// onCurrentIndexChanged:{
// if (currentIndex==1){
// contactsSignal("")
// }
// else if (currentIndex==2){
// contactsSignal("")
// }
// else if (currentIndex==3){groupsSignal(root.login.username)}
// }
Loader{
id: appearanceLoader
source:(configTabView.currentIndex==0)? "qrc:/qml/configqml/ConfigAppearancePage.qml":""
}
MouseArea{
anchors.fill:parent
onClicked:newstypemenu.popup()
Loader{
id: syncLoader
source:(configTabView.currentIndex==1)? "qrc:/qml/configqml/SyncConfig.qml":""
}
}
Menu {
id:newstypemenu
width:8*root.fontFactor*osSettings.bigFontSize
MenuItem {
font.pointSize: osSettings.bigFontSize
text: qsTr("Timeline")
onTriggered: {newsTypeField.text=qsTr("Timeline");
Service.updateglobaloptions(root.db,"newsViewType","Timeline");}
}
MenuItem {
font.pointSize: osSettings.bigFontSize
text: qsTr("Conversations")
onTriggered: {newsTypeField.text=qsTr("Conversations");
Service.updateglobaloptions(root.db,"newsViewType","Conversations");}
}
}
Text {
text: qsTr("Max. News")
font.pointSize: osSettings.systemFontSize
x: root.fontFactor*osSettings.bigFontSize; y:14*root.fontFactor*osSettings.bigFontSize
}
Slider{ id: maxNews
x:6*root.fontFactor*osSettings.bigFontSize; y: 16*root.fontFactor*osSettings.bigFontSize;
width: root.width/2;height:2*root.fontFactor*osSettings.bigFontSize
from: 0;to:2000; stepSize: 100
value: root.globaloptions.hasOwnProperty("max_news")?root.globaloptions.max_news:1000
}
Rectangle{
color: "#F3F3F3";
x: root.fontFactor*osSettings.bigFontSize; y: 16*root.fontFactor*osSettings.bigFontSize;
width: 4*root.fontFactor*osSettings.bigFontSize; height: 2*root.fontFactor*osSettings.bigFontSize;
radius: 0.5*mm
TextEdit{id:maxNewsText;
anchors.fill: parent
font.pointSize: osSettings.bigFontSize
verticalAlignment:TextEdit.AlignRight
text:maxNews.value
selectByMouse: true
onTextChanged: {
Service.updateglobaloptions(root.db,"max_news",text);
}
}
}
CheckBox{
id: nsfwCheckbox
x: root.fontFactor*osSettings.bigFontSize
y: 20*root.fontFactor*osSettings.bigFontSize
font.pointSize: osSettings.bigFontSize
text: qsTr("Hide #nsfw?")
checked:(globaloptions["hide_nsfw"]==1)?true:false
onClicked: {
toggle();
if(nsfwCheckbox.checked==true){
Service.updateglobaloptions(root.db,"hide_nsfw",0);nsfwCheckbox.checked=false;
}
else{
Service.updateglobaloptions(root.db,"hide_nsfw",1);nsfwCheckbox.checked=true;
}
}
}
MButton {
anchors.right: closeButton.left; anchors.rightMargin: mm;
anchors.top: parent.top
anchors.topMargin:root.fontFactor*osSettings.bigFontSize
width: 2*root.fontFactor*osSettings.bigFontSize;
text: "?"
font.pointSize: osSettings.bigFontSize
onClicked:{
rootstackView.push("qrc:/qml/configqml/InfoBox.qml");
Loader{
id: startLoader
source:(configTabView.currentIndex==2)? "qrc:/qml/configqml/ConfigStartPage.qml":""
}
}
MButton{
@ -165,7 +121,7 @@ Page{
// height: 2*root.fontFactor*osSettings.bigFontSize
width: 2*root.fontFactor*osSettings.bigFontSize;
anchors.top: parent.top
anchors.topMargin:root.fontFactor*osSettings.bigFontSize
anchors.topMargin:2*root.fontFactor*osSettings.bigFontSize
anchors.right: parent.right
anchors.rightMargin: 1*mm
text: "\uf057"

View File

@ -0,0 +1,82 @@
// This file is part of Friendiqa
// https://git.friendi.ca/lubuwest/Friendiqa
// Copyright (C) 2020 Marco R. <thomasschmidt45@gmx.net>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// In addition, as a special exception, the copyright holders give
// permission to link the code of portions of this program with the
// OpenSSL library under certain conditions as described in each
// individual source file, and distribute linked combinations including
// the two.
//
// You must obey the GNU General Public License in all respects for all
// of the code used other than OpenSSL. If you modify file(s) with this
// exception, you may extend this exception to your version of the
// file(s), but you are not obligated to do so. If you do not wish to do
// so, delete this exception statement from your version. If you delete
// this exception statement from all source files in the program, then
// also delete it here.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
import QtQuick 2.11
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
Page{
//anchors.fill: parent
width:root.width
height:root.height-6*root.fontFactor*osSettings.bigFontSize
CheckBox{
id: autostartCheckbox
x: mm
y: root.fontFactor*osSettings.bigFontSize
width: 10*root.fontFactor*osSettings.bigFontSize
checked:filesystem.isAutostart
//style: CheckBoxStyle {
text: qsTr("Autostart")
font.pointSize: osSettings.bigFontSize
onClicked: {
toggle();
if(autostartCheckbox.checked==true){
filesystem.setAutostart(false);
autostartCheckbox.checked=false;
}
else{
filesystem.setAutostart(true);
autostartCheckbox.checked=true;
}
}
}
// CheckBox{
// id: minimizeCheckbox
// x: mm
// y: 3*root.fontFactor*osSettings.bigFontSize
// width: 10*root.fontFactor*osSettings.bigFontSize
// enabled: autostartCheckbox.checked==true
// checked:(globaloptions["notify_"+adapter]==1)?true:false
// text: qsTr("Start Minimized")
// font.pointSize: osSettings.bigFontSize
// onClicked: {
// toggle();
// if(notifyCheckbox.checked==true){
// Service.updateglobaloptions(root.db,"notify_"+adapter,0);notifyCheckbox.checked=false;
// }
// else{
// Service.updateglobaloptions(root.db,"notify_"+adapter,1);notifyCheckbox.checked=true;
// }
// }
// }
}

View File

@ -31,6 +31,7 @@
import QtQuick 2.0
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/qml/genericqml"
Page{
@ -43,8 +44,9 @@ Page{
textFormat: Text.RichText
width: root.width-mm
font.pointSize: osSettings.systemFontSize
color:Material.primaryTextColor
wrapMode: Text.WrapAtWordBoundaryOrAnywhere
text: "<b>Friendiqa v0.6.2 </b><br>Licensed under GPL 3 with the exception of OpenSSL <br> "+
text: "<b>Friendiqa v0.6.3 </b><br>Licensed under GPL 3 with the exception of OpenSSL <br> "+
"Website <a href='https://friendiqa.ma-nic.de'>https://friendiqa.ma-nic.de</a><br>"+
"Sourcecode: <a href='https://git.friendi.ca/LubuWest/Friendiqa'>https://git.friendi.ca/LubuWest/Friendiqa</a><br>"+
"Privacy Policy: <a href='https://git.friendi.ca/lubuwest/Friendiqa/src/branch/master/PrivacyPolicy.md'>http://git.friendi.ca/lubuwest/Friendiqa/src/branch/master/PrivacyPolicy.md</a><br>"+

View File

@ -32,11 +32,12 @@
import QtQuick 2.11
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/qml/configqml"
import "qrc:/js/service.js" as Service
Rectangle{
color: "#EEEEEE" //Material.Grey
color: Material.dialogColor
property string adapter: ""
width: parent.width
height: 4*root.fontFactor*osSettings.bigFontSize

View File

@ -31,17 +31,18 @@
import QtQuick 2.11
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/qml/configqml"
import "qrc:/qml/genericqml"
import "qrc:/js/service.js" as Service
Rectangle{
color:"white"
Page{
//color:"white"
width:root.width
height: root.height
//height:root.height
Text {
Label {
text: qsTr("Sync Interval (0=None)")
font.pointSize: osSettings.bigFontSize
//visible: false
@ -58,11 +59,14 @@ Rectangle{
Rectangle{
x: root.fontFactor*osSettings.bigFontSize; y:4*root.fontFactor*osSettings.bigFontSize;
width: 4*root.fontFactor*osSettings.bigFontSize; height: 2*root.fontFactor*osSettings.bigFontSize;
color: Material.dialogColor
radius: 0.5*mm
TextEdit{
id: messageIntervalField
anchors.fill: parent
font.pointSize: osSettings.bigFontSize
verticalAlignment:TextEdit.AlignRight
color: Material.primaryTextColor
text:messageIntervalSlider.value
focus: true
selectByMouse: true
@ -76,7 +80,7 @@ Rectangle{
}
}
}
Text{x: 6*root.fontFactor*osSettings.bigFontSize; y: 4*root.fontFactor*osSettings.bigFontSize;
Label{x: 6*root.fontFactor*osSettings.bigFontSize; y: 4*root.fontFactor*osSettings.bigFontSize;
width: 2*root.fontFactor*osSettings.bigFontSize; height: 1.5*root.fontFactor*osSettings.bigFontSize;
font.pointSize: osSettings.bigFontSize
text:qsTr("Min.")
@ -99,15 +103,15 @@ Rectangle{
}
}
MButton{
id:closeButton
anchors.top: parent.top
anchors.topMargin: osSettings.bigFontSize
anchors.right: parent.right
anchors.rightMargin: 1*mm
width: 2*root.fontFactor*osSettings.bigFontSize;
text: "\uf057"
font.pointSize: osSettings.bigFontSize
onClicked:{rootstackView.pop()}
}
// MButton{
// id:closeButton
// anchors.top: parent.top
// anchors.topMargin: osSettings.bigFontSize
// anchors.right: parent.right
// anchors.rightMargin: 1*mm
// width: 2*root.fontFactor*osSettings.bigFontSize;
// text: "\uf057"
// font.pointSize: osSettings.bigFontSize
// onClicked:{rootstackView.pop()}
// }
}

View File

@ -31,6 +31,7 @@
import QtQuick 2.11
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import QtQuick.Layouts 1.11
import QtQuick.LocalStorage 2.0
import "qrc:/js/helper.js" as Helperjs
@ -119,12 +120,13 @@ Item{
Rectangle {
width: friendsView.width
height: childrenRect.height
//color: "lightsteelblue"
color: Material.dialogColor //color: "lightsteelblue"
required property string section
Text {
color: Material.secondaryTextColor
text: parent.section
font.bold: true
font.pointSize: osSettings.bigFontSize
font.pointSize: osSettings.bigFontSize
}
}
}
@ -134,7 +136,7 @@ Item{
x:mm
y:updateFriendsButton.height+mm
width:friendsGridTab.width-2*mm
height:friendsGridTab.height-(updateFriendsButton.height+5*mm)
height:friendsGridTab.height-(updateFriendsButton.height+7*mm)
clip: true
spacing: 2
function processContactSelection(contactobject){showContactdetails(contactobject)}

View File

@ -31,6 +31,7 @@
import QtQuick 2.11
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import QtQuick.Layouts 1.11
import QtQuick.LocalStorage 2.0
import "qrc:/js/helper.js" as Helperjs
@ -41,7 +42,7 @@ import "qrc:/qml/genericqml"
Rectangle {
y:1
color: "white"
color: Material.backgroundColor//"white"
function showContactdetails(contact){
// rootstack.currentIndex=0;

View File

@ -31,6 +31,7 @@
import QtQuick 2.11
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/js/helper.js" as Helperjs
import "qrc:/js/news.js" as Newsjs
import "qrc:/qml/genericqml"
@ -55,7 +56,7 @@ Item {
height: parent.height-mm
radius: 0.5*mm
border.color: "grey"
color:"white"
color:Material.backgroundColor//"white"
// Image {
// id: photoImage
@ -72,13 +73,14 @@ Item {
width: wrapper.width-2
height: 3*root.fontFactor*osSettings.bigFontSize
//border.color: "light grey"
TextInput {
id: namelabel
anchors.fill: parent
readOnly: true
text: group.new?"":group.groupname
color: "#303030"
font.pointSize: osSettings.bigFontSize
color:Material.backgroundColor
TextInput {
id: namelabel
anchors.fill: parent
readOnly: true
text: group.new?"":group.groupname
color: Material.secondaryTextColor//"#303030"
font.pointSize: osSettings.bigFontSize
}
}
@ -128,6 +130,7 @@ Item {
Rectangle{
id: detailsrectangle
anchors.top: namelabelRect.bottom
color: Material.backgroundColor
//anchors.topMargin: mm
x:mm
width: parent.width-2*mm

View File

@ -31,6 +31,7 @@
import QtQuick 2.0
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/qml/genericqml"
import "qrc:/js/service.js" as Service
@ -38,7 +39,7 @@ Rectangle {
// width:parent.width-2*mm
// height:parent.height-14*mm
anchors.fill:parent
color:"white"
color: Material.backgroundColor//color:"white"
property var profile:({})
property var attachImageURLs:[]
property var createdAtDate: new Date(profile.friendica_owner.created_at)
@ -196,7 +197,7 @@ Rectangle {
anchors.topMargin: 0
anchors.left: photoImage.left
wrapMode: Text.Wrap
color: "#303030"
color: Material.secondaryTextColor//"#303030"
font.pointSize: osSettings.bigFontSize
anchors.top: photoImage.bottom
}
@ -207,12 +208,13 @@ Rectangle {
Rectangle{
id:profileRect
width:profileView.width
color: Material.backgroundColor
height: 5*mm+profiletextfield.height
Text{
y:mm
font.pointSize: osSettings.systemFontSize
text:"<b>"+qsTr("profile id")+": </b> "+profileid+"<br>"
color:"black"
color:Material.primaryTextColor//"black"
}
Text{
id:profiletextfield
@ -222,7 +224,7 @@ Rectangle {
wrapMode: Text.Wrap
font.pointSize: osSettings.systemFontSize
text:profiletext
color:"black"
color:Material.primaryTextColor//"black"
}
}
}
@ -230,6 +232,7 @@ Rectangle {
id:textcomponent
Text{
id:namelabeltext
color:Material.primaryTextColor
width: namelabelflickable.width
height: implicitHeight
font.pointSize: osSettings.bigFontSize

View File

@ -33,6 +33,7 @@ import QtQuick 2.5
import QtQuick.LocalStorage 2.0
import QtQuick.Window 2.0
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.12
import QtQuick.Layouts 1.11
import QSystemTrayIcon 1.0
import "qrc:/js/news.js" as Newsjs
@ -47,7 +48,7 @@ ApplicationWindow{
property QtObject osSettings: {var tmp=Qt.createComponent("qrc:/qml/configqml/OSSettingsLinux.qml");return tmp.createObject(root)}
width: globaloptions.hasOwnProperty("appWidth")?globaloptions.appWidth:osSettings.appWidth
height:globaloptions.hasOwnProperty("appHeight")?globaloptions.appHeight:osSettings.appHeight
visible: true
visible: filesystem.Visibility// true
property var db: ["Friendiqa", "1.0", "Stores Friendica data", 100000000]
property var login: Service.readActiveConfig(db)
property real fontFactor: root.font.pixelSize/root.font.pointSize
@ -72,6 +73,10 @@ ApplicationWindow{
property var contactposts:[]
property bool imagePicking: false
Material.theme: Material.System // globaloptions.view_darkmode==1?Material.Dark:Material.Light
color: Material.backgroundColor
function onLoginChanged(login){
if(login==""){rootstackView.push("qrc:/qml/configqml/AccountPage.qml")}
else{
@ -138,14 +143,14 @@ ApplicationWindow{
onClosing: {
if (rootstack.currentIndex==0){
newstab.active=true;
newstab.active=true;print("newstabstatus "+newstab.newstabstatus + " newsViewType " +globaloptions.newsViewType)
if (newstab.newstabstatus!=globaloptions.newsViewType){
newstab.newstabstatus=globaloptions.newsViewType;
if(globaloptions.newsViewType=="Timeline"){Newsjs.newsfromdb(db,login.username,0,function(dbnews){
newsSignal(dbnews)
})}
else{
Newsjs.chatsfromdb(db,login.username,function(dbnews){
Newsjs.chatsfromdb(db,login.username,0,function(dbnews){
newsSignal(dbnews)
})}
close.accepted=false;
@ -159,13 +164,13 @@ ApplicationWindow{
root.pop();
close.accepted=false
}
else{
Service.cleanNews(root.db,function(){
Service.cleanHashtags(root.db,function(){
Service.cleanContacts(root.login,root.db,function(){
else{print("Closing");
Service.cleanNews(root.db,function(){print("cleannews");
Service.cleanHashtags(root.db,function(){print("cleanhashtags");
Service.cleanContacts(root.login,root.db,function(){print("cleancontacts");
if (osSettings.osType=="Android"){
Qt.quit()}
else{
else{print("show systray")
systemTray.show();
systemTray.showMessage("",qsTr("Background Sync\n Rightclick or Middleclick to Quit"),"",5000)
root.hide()
@ -180,13 +185,16 @@ ApplicationWindow{
}
Rectangle{
anchors.fill: parent
color: Material.backgroundColor
}
header: ToolBar{
position: wideScreen?ToolBar.Header:ToolBar.Footer
background: Rectangle{
anchors.fill: parent
color: "#EEEEEE"//"#F8F8F8"
color: Material.backgroundDimColor//"#EEEEEE"//"#F8F8F8"
}
RowLayout{
anchors.fill: parent
@ -206,28 +214,28 @@ ApplicationWindow{
text: "\uf03a"
background:Rectangle{
anchors.fill: parent
color: "#EEEEEE"
color: Material.backgroundDimColor
}
}
TabButton {
text: "\uf0c0"
background:Rectangle{
anchors.fill: parent
color: "#EEEEEE"
color: Material.backgroundDimColor
}
}
TabButton {
text: "\uf03e"
background:Rectangle{
anchors.fill: parent
color: "#EEEEEE"
color: Material.backgroundDimColor
}
}
TabButton {
text: "\uf073"
background:Rectangle{
anchors.fill: parent
color: "#EEEEEE"
color: Material.backgroundDimColor
}
}
}
@ -287,10 +295,10 @@ StackView{id:rootstackView
Qt.quit()
}
}
Component.onCompleted: {
Component.onCompleted: {print("systray completed")
icon = iconTray
toolTip = qsTr("Click to open Friendiqa")
hide()
//&hide()
}
}
@ -298,6 +306,17 @@ StackView{id:rootstackView
Component.onCompleted: {
onLoginChanged(login);
globaloptions=Service.readGO(db);
if(globaloptions.view_darkmode==1){Material.theme=Material.Dark}
else if (globaloptions.view_darkmode==2){Material.theme=Material.Light}
else {Material.theme=Material.System}
if(!filesystem.Visibility){
systemTray.icon = iconTray;
// systemTray.toolTip = qsTr("Click to open Friendiqa");
systemTray.visible=true
systemTray.show();
}
if(osSettings.osType=="Android"){
var component = Qt.createComponent("qrc:/qml/genericqml/IntentReceiver.qml");
var IntentReceiverQml = component.createObject(root);

View File

@ -30,6 +30,7 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
import QtQuick 2.0
import QtQuick.Controls.Material 2.12
Rectangle{
id: blueButton
width: Math.max(mainText.width+2*mm,5*mm)
@ -65,7 +66,7 @@ Rectangle{
states: [
State { name: "Pressed"
PropertyChanges { target: blueButton; color: "white"} }
PropertyChanges { target: blueButton; color: Material.buttonColor} }
]
transitions: [
Transition { to:"*"

View File

@ -31,6 +31,7 @@
import QtQuick 2.0
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/qml/genericqml"
Item {
@ -45,8 +46,8 @@ Item {
width:parent.width
height: parent.height//8*mm
radius: 0.5*mm
border.color: "grey"
color:"white"
border.color: Material.backgroundDimColor// "grey"
color: Material.backgroundColor//"white"
Image {
id: photoImage
x:0.5*mm
@ -70,7 +71,7 @@ Item {
height: 1.1*root.fontFactor*osSettings.bigFontSize//3*mm
text: contact.name
elide: contentWidth>wrapper.width-4*osSettings.systemFontSize?Text.ElideRight:Text.ElideNone
color: "#303030"
color: Material.secondaryTextColor//"#303030"
font.pointSize: osSettings.bigFontSize
}
Label {
@ -79,7 +80,7 @@ Item {
height: 1.1*root.fontFactor*osSettings.bigFontSize//3*mm
text: "(@"+contact.screen_name+")"
elide: contentWidth>wrapper.width-4*root.fontFactor*osSettings.systemFontSize?Text.ElideRight:Text.ElideNone
color: "#303030"
color: Material.secondaryTextColor//"#303030"
font.pointSize: osSettings.bigFontSize
}
Label {
@ -88,7 +89,7 @@ Item {
height: 2*root.fontFactor*osSettings.systemFontSize//2.5*mm
text: Qt.atob(contact.description)!=""?contact.description:""
elide:contentWidth>wrapper.width-4*root.fontFactor*osSettings.systemFontSize?Text.ElideRight:Text.ElideNone
color: "#303030"
color: Material.secondaryTextColor//"#303030"
font.pointSize: osSettings.systemFontSize
}
}

View File

@ -31,6 +31,7 @@
import QtQuick 2.0
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import Qt.labs.folderlistmodel 2.1
import "qrc:/js/service.js" as Service
import "qrc:/js/helper.js" as Helperjs
@ -40,6 +41,7 @@ Rectangle{
id:imageDialog
z:2
border.color: "grey"
color: Material.backgroundColor
width: parent.width-4*mm
height:parent.height-12*mm
x:2*mm

View File

@ -31,6 +31,7 @@
import QtQuick 2.0
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/qml/configqml"
Rectangle{
@ -39,6 +40,7 @@ Rectangle{
// height: root.height-bar.height
//y: bar.height
signal opened()
color: Material.backgroundColor
LeftDrawerScrollview{
width:parent.width-mm
@ -49,7 +51,7 @@ Rectangle{
width: 1
height: leftDrawer.height
anchors.right: leftDrawer.right
color: "#EEEEEE"
color: Material.dialogColor//"#EEEEEE"
}
Component.onCompleted: {opened();}
}

View File

@ -30,6 +30,7 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
import QtQuick 2.6
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
Button{
id: mButton
property alias color: bg.color
@ -38,5 +39,7 @@ Button{
height: 2*root.fontFactor*osSettings.bigFontSize
//color: Material.grey
font.pointSize: osSettings.bigFontSize
background: Rectangle{id:bg;color:"#F3F3F3";radius: 0.5*mm}
//highlighted:true
background: Rectangle{id:bg;color: Material.dialogColor//"#F3F3F3";
radius: 0.5*mm}
}

View File

@ -30,12 +30,14 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
import QtQuick 2.11
import QtQuick.Controls.Material 2.12
import "qrc:/js/service.js" as Service
import "qrc:/js/helper.js" as Helperjs
import "qrc:/qml/genericqml"
Rectangle{
id:permissionDialog
color: Material.backgroundColor
// x: mm
width: parent.width-5*mm
height:root.height/3
@ -63,6 +65,7 @@ Rectangle{
Text{
x:0.5*mm
y:0.5*mm
color: Material.primaryTextColor
text: qsTr("Friends")
}
ListView {
@ -82,18 +85,18 @@ Rectangle{
id:contactItem
Rectangle{
id:contactitemRect
color: Material.backgroundColor
width:contactView.width
height: 5*mm
radius: 0.5*mm
property string contactstatus
onContactstatusChanged:{
if(contactstatus=="positive"){contactitemRect.color="light green"}
else if (contactstatus=="negative"){contactitemRect.color= "ffe6e6"}
else{contactitemRect.color= "white"}}
color: "white"
border.color:"grey"
else if (contactstatus=="negative"){contactitemRect.color= "red"}
else{contactitemRect.color= Material.backgroundColor}}
border.color:Material.frameColor
Text{
color:"grey"
color: Material.primaryTextColor
text:contact.screen_name
}
MouseArea{
@ -122,6 +125,7 @@ Rectangle{
}
}
Text{
color: Material.primaryTextColor
x:contactView.width+2*mm
y:0.5*mm
text: qsTr("Groups")
@ -149,14 +153,14 @@ Rectangle{
property string groupstatus:"neutral"
onGroupstatusChanged:
{if(groupstatus=="positive"){groupitemRect.color="light green"}
else if (groupstatus=="negative"){groupitemRect.color= "#ffe6e6"}
else{groupitemRect.color= "white"}}
color: "white"
border.color:"grey"
Text{
color:"grey"
else if (groupstatus=="negative"){groupitemRect.color= "red"}
else{groupitemRect.color= Material.backgroundColor}}
color: Material.backgroundColor
border.color: Material.frameColor
Text{
color: Material.primaryTextColor
text:group.groupname
}
}
MouseArea{
anchors.fill: parent
onClicked:{
@ -188,7 +192,7 @@ Rectangle{
var perms=[];
perms.push(contact_allow,contact_deny,group_allow,group_deny);
Service.savePermissions(db,perms)
}
}
}
MButton{
x:contactView.width+2*mm
@ -207,7 +211,7 @@ Rectangle{
if (contact_allow.indexOf(contacts[name].cid)>-1){contactstatus="positive"}
else if (contact_deny.indexOf(contacts[name].cid)>-1){contactstatus="negative"}
contactModel.append({"contact":contacts[name],"contactstatus":contactstatus})
}},"isFriend",1);
}},"isFriend",1,"name");
Helperjs.readData(db,"groups",login.username,function(owngroups){
for (var number in owngroups){

View File

@ -31,39 +31,30 @@
import QtQuick 2.7
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/qml/genericqml"
//import "qrc:/js/news.js" as Newsjs
//import "qrc:/js/helper.js" as Helperjs
//import "qrc:/js/service.js" as Service
Rectangle {
id:searchComponent
color: Material.backgroundColor
radius:0.5*mm
/* anchors.left: parent.left
anchors.leftMargin:mm
anchors.top:parent.top
anchors.topMargin: 0.5*mm
width:parent.width-2*mm
height: 4*mm *///Math.max( searchText.contentHeight,5*mm)
Rectangle{
color: "#EEEEEE"
radius:0.5*mm
anchors.left: parent.left
anchors.leftMargin:mm
anchors.top:parent.top
anchors.topMargin: 0.5*mm
width:parent.width-2*mm
height: 4*mm //Math.max( searchText.contentHeight,5*mm)
TextInput {
id: searchText
focus: true
font.pointSize: osSettings.bigFontSize
wrapMode: Text.Wrap
anchors.fill: parent
selectByMouse: true
cursorVisible: false
onEditingFinished:{ if (displayText!=""){search(displayText)};searchComponent.destroy()}
//onHeightChanged: newsView.contentY+=4.5*mm
}
Component.onCompleted: searchText.forceActiveFocus()
TextInput {
id: searchText
color: Material.primaryTextColor
focus: true
font.pointSize: osSettings.bigFontSize
wrapMode: Text.Wrap
anchors.fill: parent
selectByMouse: true
cursorVisible: false
onEditingFinished:{ if (displayText!=""){search(displayText)};searchComponent.destroy()}
}
Component.onCompleted: searchText.forceActiveFocus()
}

View File

@ -32,6 +32,7 @@
import QtQuick 2.0
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/js/helper.js" as Helperjs
import "qrc:/js/news.js" as Newsjs
import "qrc:/js/service.js" as Service
@ -140,9 +141,9 @@ Page {
Component { id: contactHeader
Rectangle{
border.color: "#EEEEEE"
border.color: Material.backgroundDimColor//"#EEEEEE"
border.width: 1
color:"white"
color: Material.backgroundColor//"white"
width:contactView.width
height: contactView.width<35*root.fontFactor*osSettings.systemFontSize?(profileImage.height+namelabel.height+detailtext.height+7*mm):Math.max(profileImage.height,(buttonflow.height+namelabel.height+detailtext.height))+7*mm
//height: wrapper.height
@ -170,7 +171,7 @@ Page {
y: mm
spacing:4
BlueButton{
MButton{
id:photobutton
height: 6*mm
width: 8*mm
@ -187,7 +188,7 @@ Page {
}
}
BlueButton{
MButton{
id:dmbutton
height: 6*mm
width: 8*mm
@ -200,7 +201,7 @@ Page {
}
}
BlueButton{
MButton{
id:eventbutton
visible:(contact.network=="dfrn")
height: 6*mm
@ -214,7 +215,7 @@ Page {
rootstackView.pop()
}
}
BlueButton{
MButton{
id:approvebutton
visible:(contact.hasOwnProperty("acct"))
height: 6*mm
@ -229,7 +230,7 @@ Page {
rootstackView.pop()
}
}
BlueButton{
MButton{
id:rejectbutton
visible:(contact.hasOwnProperty("acct"))
height: 6*mm
@ -243,7 +244,7 @@ Page {
rootstackView.pop()
}
}
BlueButton{
MButton{
id:ignorebutton
visible:(contact.hasOwnProperty("acct"))
height: 6*mm
@ -257,7 +258,7 @@ Page {
rootstackView.pop()
}
}
BlueButton{
MButton{
id:followbutton
visible:(contact.isFriend==0)
height: 6*mm
@ -276,7 +277,7 @@ Page {
}
}
BlueButton{
MButton{
id:unfollowbutton
visible:(contact.isFriend==1)
height: 6*mm
@ -301,7 +302,7 @@ Page {
height: implicitHeight
text:contact.name+" (@"+contact.screen_name+")"
wrapMode: Text.Wrap//elide:Text.ElideRight
color: "#303030"
color: Material.primaryTextColor//"#303030"
font.pointSize: 1.2*osSettings.bigFontSize
font.family: "Noto Sans"
anchors.top: contactView.width<35*root.fontFactor*osSettings.systemFontSize?profileImage.bottom:buttonflow.bottom
@ -320,6 +321,7 @@ Page {
font.family: "Noto Sans"
textFormat:Text.RichText
wrapMode: Text.Wrap
color: Material.primaryTextColor
text:"<b>"+qsTr("Description")+": </b> "+(Qt.atob(contact.description)!=""?contact.description:"")+"<br> <b>"+qsTr("Location")+":</b> "+contact.location+"<br> <b>"+qsTr("Posts")+":</b> "+contact.statuses_count+
"<br> <b>"+qsTr("URL")+":</b> <a href='"+ contact.url+"'>"+contact.url+"</a><br>"+
connectUrl+ "<b>"+qsTr("Created at")+":</b> "+createdAtDate.toLocaleString(Qt.locale())
@ -341,7 +343,7 @@ Page {
}
function onSuccess(data,api){
Service.processNews(api,data)
replySignal("")
//replySignal("")
}
}
@ -350,9 +352,8 @@ Page {
function onContactpostsChanged(){
if (root.contactposts.length>0&&root.contactposts[0]!=null){profileimagesource=root.contactposts[0].friendica_author.profile_image_url_large}
contactBusy.running=false;
contactModel.clear();
var currentTime= new Date();
var msg = {'currentTime': currentTime, 'model': contactModel,'news':root.contactposts, 'options':globaloptions};
var msg = {'currentTime': currentTime, 'model': contactModel,'news':root.contactposts, 'options':globaloptions, 'method':'contact'};
contactWorker.sendMessage(msg)
}
}

View File

@ -31,14 +31,15 @@
// List of people from Friendica Activities
import QtQuick 2.0
import QtQuick.Controls.Material 2.12
import "qrc:/js/helper.js" as Helperjs
import "qrc:/qml/genericqml"
Rectangle {
id:activitiesRectangle
property var activitymembers
color: "white"
border.color: "light grey"
color: Material.dialogColor
border.color: Material.frameColor
radius:0.5*mm
width:root.width/2
height:Math.min(root.height/2,(10*mm+6*activitymembers.length*mm))
@ -53,50 +54,54 @@ Rectangle {
spacing: 0
model: activitiesModel
delegate: activitiesContact
}
}
ListModel{id: activitiesModel}
ListModel{id: activitiesModel}
Component { id:activitiesContact
Rectangle{
border.color: "#EEEEEE"
border.width: 1
radius:0.5*mm
width:parent.width
height:6*mm
Image {
id: contactImage
x:1
y:1
width: 5*mm
height:5*mm
source:(contact.profile_image!="")? "file://"+contact.profile_image : contact.profile_image_url
onStatusChanged: if (contactImage.status == Image.Error) {source="qrc:/images/defaultcontact.jpg"}
}
Text{
font.pointSize: osSettings.bigFontSize
anchors.left: contactImage.right
anchors.margins: 1*mm
text:contact.name
}
Component {
id:activitiesContact
Rectangle{
border.color: Material.frameColor
color: Material.backgroundColor
border.width: 1
radius:0.5*mm
width:parent.width
height:6*mm
Image {
id: contactImage
x:1
y:1
width: 5*mm
height:5*mm
source:(contact.profile_image!="")? "file://"+contact.profile_image : contact.profile_image_url
onStatusChanged: if (contactImage.status == Image.Error) {source="qrc:/images/defaultcontact.jpg"}
}
Text{
color: Material.primaryTextColor
font.pointSize: osSettings.bigFontSize
anchors.left: contactImage.right
anchors.margins: 1*mm
text:contact.name
}
MouseArea{
anchors.fill: parent
onClicked:{showContact(contact)}
}
}}
}
}
MButton {
id: closeButton
anchors.top: parent.top
anchors.topMargin: 1*mm
anchors.right: parent.right
anchors.rightMargin: 1*mm
color:"white"
text: "\uf057"// qsTr("Close")
onClicked: {
activitiesRectangle.destroy()
}
id: closeButton
anchors.top: parent.top
anchors.topMargin: 1*mm
anchors.right: parent.right
anchors.rightMargin: 1*mm
//color:"white"
text: "\uf057"
onClicked: {
activitiesRectangle.destroy()
}
}
Component.onCompleted: {

View File

@ -30,17 +30,19 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
import QtQuick 2.0
import QtQuick.Controls.Material 2.12
Rectangle {
id:hasgtagRectangle
color: "light grey"
id:hashtagRectangle
color:Material.dialogColor
property alias text: hashtagText.text
radius:0.3*mm
width:hashtagText.contentWidth+mm
height:2.5* mm
height:root.fontFactor*osSettings.bigFontSize
Text{
id:hashtagText
font.pixelSize: 1.5*mm
font.pointSize: osSettings.systemFontSize
color: Material.secondaryTextColor
anchors.centerIn: parent
anchors.margins: 0.5*mm
}

View File

@ -33,6 +33,7 @@
// message with buttons
import QtQuick 2.4
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
//import QtQuick.Dialogs 1.2
import "qrc:/js/helper.js" as Helperjs
import "qrc:/js/smiley.js" as Smileyjs
@ -41,7 +42,7 @@ import "qrc:/qml/genericqml"
Rectangle{
color:"#EEEEEE"
color:Material.dialogColor//"#EEEEEE"
width:parent.width
height: conversation || (newsSwipeview.stacktype!="Notifications")?messageColumn.height+mm:0
id:messageSend
@ -221,7 +222,7 @@ Rectangle{
}
Rectangle{
color: "white"
color: Material.backgroundColor//"white"
radius: 0.5*mm
x:mm
width: parent.width-2*mm
@ -242,6 +243,8 @@ Rectangle{
onLinkActivated:{Qt.openUrlExternally(link)}
onActiveFocusChanged:{//print(placeholder)
if (activeFocus==true){
print("contenty "+messageSend.ListView.view.contentY)
if (messageSend.ListView.view.contentY==null){messageSend.parent.ListView.view.y=0}else{messageSend.ListView.view.contentY=messageSend.ListView.view.contentY+8*mm};
if (conversation==true){
if(parentId==""){setParent(conversationModel.get(0).newsitemobject);}
messageSend.state="conversation";

View File

@ -30,11 +30,12 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
import QtQuick 2.0
import QtQuick.Controls.Material 2.12
Rectangle{
id: moreComments
width: parent.width
height: 5*mm
color:"white"
color:Material.background//"white"
property int comments:0
// border.color:"grey"
// border.width:1

View File

@ -54,6 +54,8 @@ AnimatedImage {id:gif;
}
MouseArea {anchors.fill:parent;
onClicked:{
rootstackView.push("qrc:/qml/newsqml/NewsPhotolist.qml",{"photolistarray": model.newsitemobject.imageAttachmentList})}
rootstackView.push("qrc:/qml/newsqml/NewsPhotolist.qml",{"photolistarray": model.newsitemobject.imageAttachmentList})
roottoolbar.visible=false
}
}
}

View File

@ -30,8 +30,9 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
import QtQuick 2.9
import QtQuick 2.15
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/qml/genericqml"
Page{
@ -64,8 +65,12 @@ Page{
anchors.topMargin: 1*mm
anchors.right: parent.right
anchors.rightMargin: 1*mm
color: Material.dialogColor
text: "\uf057"
onClicked: {if (rootstackView.depth>1){ rootstackView.pop()}
onClicked: {
if (rootstackView.depth>1){
roottoolbar.visible=true;
rootstackView.pop()}
}
}
Component {
@ -85,16 +90,17 @@ Page{
running: realImage.status==Image.Loading
anchors.centerIn: parent
}
PinchArea {
id:imagePinch
pinch.target: realImage
anchors.fill: realImage
pinch.minimumScale: 0.1
pinch.maximumScale: 10
enabled: true
}
}
// PinchArea {
// id:imagePinch
// pinch.target: realImage
// anchors.fill: realImage
// pinch.minimumScale: 0.1
// pinch.maximumScale: 10
// enabled: false
// }
}
@ -131,4 +137,5 @@ Page{
})
}
}
//onDestroyed: root.roottoolbar.visible=true
}

View File

@ -31,6 +31,7 @@
import QtQuick 2.11
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/js/news.js" as Newsjs
import "qrc:/js/helper.js" as Helperjs
import "qrc:/js/service.js" as Service
@ -40,6 +41,7 @@ Rectangle{
//anchors.fill: parent
width: parent.width
height: parent.height
color: Material.backgroundColor
property string updateMethodNews: "refresh"
property var allchats: ({})
property int lastnewsid:0
@ -101,9 +103,9 @@ Rectangle{
newsView.anchors.topMargin=7*mm;
newstab.newstabstatus="Search";
newsBusy.running=false;
var leftoffset=osSettings.osType=="Android"?3*osSettings.bigFontSize:0
var leftoffset=(osSettings.osType=="Android")?2*root.fontFactor*osSettings.bigFontSize:0
var component = Qt.createComponent("qrc:/qml/genericqml/Search.qml");
var searchItem = component.createObject(newsStack,{y:mm,x:leftoffset,width:root.width-leftoffset,height: 5*mm});
var searchItem = component.createObject(newsStack,{y:mm,x:leftoffset,width:root.width-(leftoffset+mm),height: 1.5*root.fontFactor*osSettings.systemFontSize});
break;
case "refresh":
if (newstab.newstabstatus=="Timeline" || newstabstatus=="Timeline"){
@ -173,8 +175,9 @@ Rectangle{
function getOldNews(){
var currentTime= new Date();
var oldnewsitemobject=newsModel.get(newsModel.count-1).newsitemobject;
try{ if(oldnewsitemobject.hasOwnProperty("lastcomment")){
try{var oldnewsitemobject=newsModel.get(newsModel.count-1).newsitemobject;
if(oldnewsitemobject.hasOwnProperty("lastcomment")){
var lastnews_id=oldnewsitemobject.lastcomment.created_at;
}else{
var lastnews_id=oldnewsitemobject.created_at;
@ -257,10 +260,12 @@ Rectangle{
Component { id:footerComponent
Rectangle{
border.color: "#EEEEEE"
color: Material.dialogColor
border.width: 1
width:newsView.width
height:6*mm
Text{
color: Material.primaryTextColor
font.pointSize: osSettings.systemFontSize
anchors.centerIn: parent
text:qsTr("More")

View File

@ -32,7 +32,7 @@
import QtMultimedia 5.8
import QtQuick 2.9
import QtQuick.Controls 2.12
import "qrc:/qml/genericqml"
Page{
id:newsvideofullscreen
@ -61,12 +61,12 @@ Page{
autoLoad: true
autoPlay: true
audioRole: MediaPlayer.VideoRole
MouseArea {
anchors.fill:parent;
onClicked:{
rootstackView.pop()
}
}
// MouseArea {
// anchors.fill:parent;
// onClicked:{
// rootstackView.pop()
// }
// }
}
ProgressBar{
@ -96,6 +96,20 @@ Page{
visible:video.playbackState!=MediaPlayer.StoppedState
value: video.bufferProgress
}
MButton {
id: closeButton
z:2
anchors.top: parent.top
anchors.topMargin: 1*mm
anchors.right: parent.right
anchors.rightMargin: 1*mm
text: "\uf057"
onClicked: {if (rootstackView.depth>1){ rootstackView.pop()}
}
}
// Slider{ id: videoSlider
// width: parent.width
// height: 3*mm

View File

@ -31,6 +31,7 @@
import QtQuick 2.0
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/js/news.js" as Newsjs
import "qrc:/js/helper.js" as Helperjs
import "qrc:/qml/genericqml"
@ -63,12 +64,14 @@ Item {
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: Material.backgroundDimColor//"light grey"
}
Rectangle{
width:newsitem.width
height:newsitem.height-1
color: "white"
color: Material.background//"white"
Column {
id:toprow //newscolumn
@ -112,20 +115,20 @@ Item {
Label {
id:messageTypeLabel
color: "grey"
color: Material.secondaryTextColor//"grey"
text: if (newsitemobject.messagetype==1){ qsTr("Direct Message")} else if(newsitemobject.messagetype==2) {" Notification"} else {qsTr("Source: ")+newsitemobject.source}
font.pointSize: 0.6*osSettings.systemFontSize
}
Label {
id:createdAtLabel
color: "grey"
color: Material.secondaryTextColor//"grey"
font.pointSize: 0.6*osSettings.systemFontSize
horizontalAlignment: Label.AlignRight
text: " \u00B7 "+getDateDiffString(newsitemobject.dateDiff) + " " +qsTr("ago")
}
Label {
id:replytoLabel
color: "grey"
color: Material.secondaryTextColor//"grey"
font.pointSize: 0.6*osSettings.systemFontSize
font.family: "Noto Sans"
horizontalAlignment: Label.AlignRight
@ -138,10 +141,11 @@ Item {
MouseArea{id: itemBody
width: toprow.width-2
height: itemMessage.height
onPressAndHold: {pushConversation()}
//onPressAndHold: {pushConversation()}
onClicked: {pushConversation()}
Text {
color: "#404040"
linkColor: "light green"
color: Material.primaryTextColor//"#404040"
linkColor: Material.accentColor//"light green"
id: itemMessage
textFormat: Text.RichText
font.family: "Noto Sans"
@ -194,9 +198,9 @@ Item {
anchors.bottom: toprow.bottom//itemMessage.bottom
visible: toprow.implicitHeight>3/4*root.height || newsitemobject.nsfw//messageColumn.implicitHeight>3/4*root.height || newsitemobject.nsfw//itemMessage.implicitHeight>3/4*root.height
text:"\uf078"
fontColor:"grey"
fontColor: Material.secondaryTextColor//"grey"
border.color: "transparent"
color:"white"
color: Material.backgroundColor//"white"
// gradient: Gradient {
// GradientStop { position: 0.0; color: "transparent" }
// GradientStop { position: 0.5; color: "white" }
@ -220,7 +224,7 @@ Item {
width:parent.width
spacing:mm
Label{color: "grey"
Label{color: Material.secondaryTextColor//"grey"
height:3.5*mm
font.pointSize: 0.75*osSettings.systemFontSize
text: friendica_activities_view.likeText
@ -229,7 +233,7 @@ Item {
onClicked: { showActivityContacts(newsitemobject.friendica_activities.like)}
}
}
Label{color: "grey"
Label{color: Material.secondaryTextColor//"grey"
height:3.5*mm
font.pointSize: 0.75*osSettings.systemFontSize
text: friendica_activities_view.dislikeText
@ -238,7 +242,7 @@ Item {
onClicked: { showActivityContacts(newsitemobject.friendica_activities.dislike)}
}
}
Label{color: "grey"
Label{color: Material.secondaryTextColor//"grey"
height:3.5*mm
font.pointSize: 0.75*osSettings.systemFontSize
text: friendica_activities_view.attendyesText
@ -246,7 +250,7 @@ Item {
anchors.fill: parent
onClicked: { showActivityContacts(newsitemobject.friendica_activities.attendyes)}
}}
Label{color: "grey"
Label{color: Material.secondaryTextColor//"grey"
height:3.5*mm
font.pointSize: 0.75*osSettings.systemFontSize
text: friendica_activities_view.attendnoText
@ -255,7 +259,7 @@ Item {
onClicked: { showActivityContacts(newsitemobject.friendica_activities.attendno)}
}
}
Label{color: "grey"
Label{color: Material.secondaryTextColor//"grey"
height:3.5*mm
font.pointSize: 0.75*osSettings.systemFontSize
text: friendica_activities_view.attendmaybeText
@ -266,7 +270,7 @@ Item {
}
Label{
id:attendLabel
color: "grey"
color: Material.secondaryTextColor//"grey"
height:3.5*mm
font.pointSize: 0.75*osSettings.systemFontSize
horizontalAlignment: Label.AlignRight
@ -287,11 +291,12 @@ Item {
indicator: Rectangle{
implicitWidth: newsitem.width/5 //10*mm
implicitHeight:root.fontFactor*osSettings.bigFontSize
color:"transparent"
Text{
anchors.centerIn: parent
font.pointSize: osSettings.systemFontSize
font.family:fontAwesome.name
color:likeCheckbox.checked?"black": "grey"
color:likeCheckbox.checked?Material.primaryTextColor: Material.secondaryTextColor
text:likeCheckbox.checked?"\uf118"+"!":"\uf118"
}
}
@ -314,11 +319,12 @@ Item {
indicator: Rectangle{
implicitWidth: newsitem.width/5 //10*mm
implicitHeight:root.fontFactor*osSettings.bigFontSize
color:"transparent"
Text{
anchors.centerIn: parent
font.pointSize: osSettings.systemFontSize
font.family:fontAwesome.name
color:dislikeCheckbox.checked?"black": "grey"
color:dislikeCheckbox.checked?Material.primaryTextColor: Material.secondaryTextColor
text: dislikeCheckbox.checked?"\uf119"+"!":"\uf119"
}
}
@ -341,11 +347,12 @@ Item {
indicator:Rectangle{
implicitWidth: newsitem.width/5 //10*mm
implicitHeight:root.fontFactor*osSettings.bigFontSize
color:"transparent"
Text{
anchors.centerIn: parent
font.pointSize: osSettings.systemFontSize
font.family:fontAwesome.name
color: favoritedCheckbox.checked?"black":"grey"
color: favoritedCheckbox.checked?Material.primaryTextColor: Material.secondaryTextColor
text:"\uf005"
}
}
@ -364,7 +371,7 @@ Item {
color:"transparent"
Text{
id:newsmenusymbol
color: "grey"
color: Material.secondaryTextColor//"grey"
anchors.centerIn: parent
font.pointSize: osSettings.systemFontSize
font.family:fontAwesome.name
@ -378,10 +385,11 @@ Item {
Menu {
id:newsmenu
width: 18*osSettings.FontSize
width: 10*root.fontFactor*osSettings.systemFontSize
delegate: MenuItem{
contentItem: Text{
font.pointSize: osSettings.systemFontSize
color: Material.secondaryTextColor
text: parent.text
}
}
@ -392,8 +400,15 @@ Item {
if (newsitemobject.messagetype==1){ directmessage=1}
var replycomp=Qt.createComponent("qrc:/qml/newsqml/MessageSend.qml");
var conversation;
if (newsitem.ListView.view.viewtype=="conversation"){conversation=true}
else{conversation=false};
if (newsitem.ListView.view==null){conversation=true}
else if (newsitem.ListView.view.viewtype=="conversation"){
conversation=true
newsitem.ListView.view.currentIndex=itemindex
}
else{
conversation=false;
newsitem.ListView.view.currentIndex=itemindex
};
var reply=replycomp.createObject(friendicaActivities,{parentId:newsitemobject.id,reply_to_user:newsitemobject.user.screen_name, state:"reply",conversation:conversation,textfocus:true})
}
}
@ -420,10 +435,11 @@ Item {
Menu{
title: qsTr("Attending")
width: 10*osSettings.systemFontSize
width: 10*root.fontFactor*osSettings.systemFontSize
delegate: MenuItem{
contentItem: Text{
font.pointSize: osSettings.systemFontSize
color: Material.secondaryTextColor
text: parent.text
}
}

View File

@ -32,6 +32,7 @@
import QtQuick 2.11
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.11
import QtQuick.Controls.Material 2.12
import "qrc:/js/smiley.js" as Smileyjs
import "qrc:/js/helper.js" as Helperjs
import "qrc:/qml/genericqml"
@ -41,6 +42,7 @@ Rectangle{
x: mm
width: messageColumn.width-5*mm
height:root.height/2
color: Material.backgroundColor
MButton{
id:closeButton
@ -87,6 +89,7 @@ Rectangle{
height: smileyDialog.height-4*root.fontFactor*osSettings.bigFontSize
Rectangle{
id: htmlGridTab
color: Material.backgroundColor
GridView {
id:htmlView
anchors.fill: parent
@ -109,6 +112,7 @@ Rectangle{
Rectangle{
id: coreGridTab
color: Material.backgroundColor
GridView {
id: coreSmileyView
anchors.fill: parent
@ -133,6 +137,7 @@ Rectangle{
Rectangle{
id: addonGridTab
color: Material.backgroundColor
GridView {
id: addonView
anchors.fill: parent
@ -156,6 +161,7 @@ Rectangle{
Rectangle{
id: adultGridTab
color: Material.backgroundColor
GridView {
id: adultView
anchors.fill: parent
@ -197,7 +203,7 @@ Rectangle{
Component{
id:htmlItem
Text{id:smileText
Label{id:smileText
width:4.5*mm
height: 4.5*mm
textFormat:Text.RichText

View File

@ -31,11 +31,12 @@
import QtQuick 2.5
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import "qrc:/js/helper.js" as Helperjs
import "qrc:/js/image.js" as Imagejs
import "qrc:/qml/genericqml"
Rectangle{
Page{
id:imageDialog
property var attachImageURLs: []
property string imageId: ""
@ -118,7 +119,7 @@ Rectangle{
anchors.right: parent.right
anchors.rightMargin: 1*mm
spacing:5*mm
Text{
Label{
font.pointSize: osSettings.bigFontSize
font.bold: true
text:qsTr("Upload to album")
@ -192,7 +193,7 @@ Rectangle{
x:3*mm //23*mm
y: 11*mm + album.height
width: imageDialog.width-5*mm //25*mm
height: parent.height -(9*root.fontFactor*osSettings.bigFontSize)//root.width/2 //25*mm
height: parent.height -(12*root.fontFactor*osSettings.bigFontSize)//root.width/2 //25*mm
model: imageUploadModel
delegate: imageDelegate
footer: imageId==""?imageFooter:null
@ -231,7 +232,8 @@ Rectangle{
id: imageDelegate
Rectangle{
width:root.width/2 //Math.max(20*mm,descriptionInput.contentWidth)
height:imageUploadView.height-5*mm // 20*mm
height:imageUploadView.height-3*root.fontFactor*osSettings.bigFontSize// 20*mm
color: Material.backgroundColor
Image{
id: uploadImage
width: root.width/2-mm //20*mm
@ -250,7 +252,7 @@ Rectangle{
}
Rectangle{
//color: "light grey"
color: Material.backgroundColor
border.color: "grey"
anchors.top: uploadImage.bottom
anchors.topMargin: mm

View File

@ -31,6 +31,7 @@
import QtQuick 2.5
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import QtQml.Models 2.1
import "qrc:/js/image.js" as Imagejs
import "qrc:/js/helper.js" as Helperjs
@ -47,7 +48,7 @@ StackView{
// y:1
// width:root.width-mm
// height:root.height-5*mm
color: '#fff'
color: Material.backgroundColor//'#fff'
property var newimages:[]
property int currentimageno: 0
property bool remoteContact: false
@ -169,7 +170,7 @@ StackView{
y:mm
z:2
visible: !wideScreen
fontColor: "grey"
fontColor: Material.secondaryTextColor//"grey"
border.color: "transparent"
text: "\uf0c9"
font.pointSize: osSettings.bigFontSize
@ -285,7 +286,7 @@ StackView{
clip: true
model: visualphotoModel.parts.album
footer:Rectangle{
border.color: "#EEEEEE"
border.color: Material.backgroundDimColor//"#EEEEEE"
border.width: 1
width:12*mm
height:6*mm

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff