Compare commits
No commits in common. "master" and "appimg" have entirely different histories.
13 changed files with 143 additions and 177 deletions
23
.travis.yml
23
.travis.yml
|
@ -2,12 +2,15 @@ language: cpp
|
|||
compiler: gcc
|
||||
sudo: require
|
||||
dist: trusty
|
||||
|
||||
before_install:
|
||||
- sudo add-apt-repository ppa:beineri/opt-qt58-trusty -y
|
||||
- sudo apt-get update -qq
|
||||
|
||||
install:
|
||||
- sudo apt-get -y install qt58base qt58webengine qt58quickcontrols
|
||||
- source /opt/qt58/bin/qt58-env.sh
|
||||
|
||||
script:
|
||||
- qmake PREFIX=/usr
|
||||
- make -j4
|
||||
|
@ -15,19 +18,7 @@ script:
|
|||
- wget -c "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage"
|
||||
- chmod a+x linuxdeployqt*.AppImage
|
||||
- unset QTDIR; unset QT_PLUGIN_PATH ; unset LD_LIBRARY_PATH
|
||||
- "./linuxdeployqt*.AppImage ./appdir/usr/share/applications/*.desktop -qmldir=./qml/
|
||||
-bundle-non-qt-libs"
|
||||
- "./linuxdeployqt*.AppImage ./appdir/usr/share/applications/*.desktop -qmldir=./qml/
|
||||
-appimage"
|
||||
- find ./appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " "
|
||||
-f 2-3 | sort | uniq
|
||||
- mv FeedTheMonkey*.AppImage FeedTheMonkey.AppImage
|
||||
deploy:
|
||||
provider: releases
|
||||
api_key:
|
||||
secure: d+hHwOnmeLPVvuue6VDCs2LwLS+BFzJF/BB5iObtkCYBwQ8ybnVzUcgnjJKOt37SHI0T9kLegI+Lq/843ECYiGiDjQg4PvCF69V8ODgHv3v1qiN5oG/eroBXd83a0+xhi4BuJt0SwcV9mcv4uD9bCPhj944rmMLH+3qD4ysgImBmbYSbbLecE9+QAs7bfrCwQRfdCePBORX3FHa/p12NEtln7xv6ZRyku9LdJSzAcdgm4zc95ggTAVC1+aQB6J0q2QzWPlQcOkLx+ZYmOqClhbSMFpIyPXP8UpXjYyvUlTAd0+wH8BGf0O3lpOqACc7IKIbj9d5oPmghVZo55SyW+RR77G+az+IbGJ7iXZsMfQZsMvtB7hNYhNvUUxQrAau7Y/ve+6sMQmvA7aMHV8kDUvnNW/c2r2jAWwk+N8QzGcP/rclDCKeOWZqZABmrzTViXZVAeXh4hJ8r6mbq8iwagBUPCsVYhVuerQt/KIoWxyn6/1GmMfKGi3dA/v3u1qU61vzrz3yLlJBmUAVPxZdVmqfRweh4BXjImxFMFmf5PYm5FnDg1gmw8rWsgii7+IPYw7DjTAHpjYbtXvDwDgG1nRXiRp2TGtPPgKW1/Uk8r/j5vfB5WcEZ7exLUgsPPjny5MGvzjqOxeLvwK1Pg9jFBFXIx7l1tNMJQxQU0r3DmBg=
|
||||
file: FeedTheMonkey.AppImage
|
||||
on:
|
||||
repo: jeena/FeedTheMonkey
|
||||
skip_cleanup: true
|
||||
draft: true
|
||||
- ./linuxdeployqt*.AppImage ./appdir/usr/share/applications/*.desktop -qmldir=./qml/ -bundle-non-qt-libs
|
||||
- ./linuxdeployqt*.AppImage ./appdir/usr/share/applications/*.desktop -qmldir=./qml/ -appimage
|
||||
- find ./appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq
|
||||
- curl --upload-file ./FeedTheMonkey*.AppImage https://transfer.sh/FeedTheMonkey-git.$(git rev-parse --short HEAD)-x86_64.AppImage
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# FeedTheMonkey
|
||||
|
||||
<img align=right src="http://jeena.net/feedthemonkey/feedthemonkey-icon.png" width='256' alt='Icon'>
|
||||
<img align=right src="http://jabs.nu/feedthemonkey/feedthemonkey-icon.png" width='256' alt='Icon'>
|
||||
|
||||
FeedTheMonkey is a desktop client for [TinyTinyRSS](http://tt-rss.org). That means that
|
||||
it doesn't work as a standalone feed reader but only as a client for the TinyTinyRSS API
|
||||
|
@ -43,7 +43,7 @@ the use on a desktop computer but I'd like to see it on a mobile device too.
|
|||
|
||||
## Screenshot
|
||||
|
||||

|
||||

|
||||
|
||||
## License
|
||||
|
||||
|
|
|
@ -25,12 +25,14 @@ html, body {
|
|||
body {
|
||||
background: #eee;
|
||||
font-family: sans-serif;
|
||||
padding: 2em;
|
||||
font-weight: lighter;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.nightmode {
|
||||
background: #353535;
|
||||
color: #ddd;
|
||||
background: #111;
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
.nightmode::-webkit-scrollbar {
|
||||
|
@ -49,28 +51,32 @@ body {
|
|||
}
|
||||
|
||||
h1 {
|
||||
font-weight: lighter;
|
||||
font-size: 1.4em;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#date {
|
||||
border-bottom: 1px solid #aaa;
|
||||
margin-bottom: 1em;
|
||||
padding-bottom: 1em;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.nightmode #date {
|
||||
border-bottom-color: #333;
|
||||
}
|
||||
|
||||
.starred:after {
|
||||
content: "*";
|
||||
}
|
||||
|
||||
header {
|
||||
padding: 2em;
|
||||
border-bottom: 1px solid #aaa;
|
||||
}
|
||||
|
||||
.nightmode header {
|
||||
border-bottom-color: #222;
|
||||
}
|
||||
|
||||
header p {
|
||||
color: #666;
|
||||
color: #aaa;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
.nightmode header p {
|
||||
|
@ -84,7 +90,6 @@ a {
|
|||
|
||||
article {
|
||||
line-height: 1.6;
|
||||
margin: 2em;
|
||||
}
|
||||
|
||||
article a {
|
||||
|
|
|
@ -4,96 +4,7 @@
|
|||
<meta charset="utf-8">
|
||||
<title>TTRSS</title>
|
||||
<link href="content.css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript">
|
||||
/*
|
||||
* This file is part of FeedTheMonkey.
|
||||
*
|
||||
* Copyright 2015 Jeena
|
||||
*
|
||||
* FeedTheMonkey 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.
|
||||
*
|
||||
* FeedTheMonkey 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 FeedTheMonkey. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
function $(id) {
|
||||
return document.getElementById(id);
|
||||
}
|
||||
|
||||
function setArticle(article) {
|
||||
window.scrollTo(0, 0);
|
||||
|
||||
$("date").innerHTML = "";
|
||||
$("title").innerHTML = "";
|
||||
$("title").href = "";
|
||||
$("title").title = "";
|
||||
$("feed_title").innerHTML = "";
|
||||
$("author").innerHTML = "";
|
||||
$("article").innerHTML = "";
|
||||
|
||||
if(article === "empty") {
|
||||
|
||||
$("article").innerHTML = "No unread articles to display.";
|
||||
|
||||
} else if(article === "loading") {
|
||||
|
||||
$("article").innerHTML = "Loading <blink>…</blink>";
|
||||
|
||||
} else if (article === "logout") {
|
||||
|
||||
} else if(article) {
|
||||
|
||||
$("date").innerHTML = (new Date(parseInt(article.updated, 10) * 1000));
|
||||
$("title").innerHTML = article.title;
|
||||
$("title").href = article.link;
|
||||
$("title").title = article.link;
|
||||
$("feed_title").innerHTML = article.feed_title;
|
||||
$("title").className = article.marked ? "starred" : "";
|
||||
$("author").innerHTML = "";
|
||||
if(article.author && article.author.length > 0)
|
||||
$("author").innerHTML = "– " + article.author
|
||||
$("article").innerHTML = article.content;
|
||||
|
||||
var as = $("article").getElementsByTagName("a");
|
||||
for(var i = 0; i < as.length; i++) {
|
||||
as[i].target = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function setFont(font, size) {
|
||||
document.body.style.fontFamily = font;
|
||||
document.body.style.fontSize = size + "pt";
|
||||
}
|
||||
|
||||
function setNightmode(nightmode) {
|
||||
if(nightmode) document.body.className = "nightmode";
|
||||
else document.body.className = "";
|
||||
}
|
||||
|
||||
function checkKey(e) {
|
||||
e = e || window.event;
|
||||
|
||||
if (e.keyCode === 37) {
|
||||
window.location.href = "feedthemonkey:previous";
|
||||
} else if (e.keyCode === 39) {
|
||||
window.location.href = "feedthemonkey:next";
|
||||
} else if(e.keyCode == 13) {
|
||||
window.location.href = "feedthemonkey:open";
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener("keydown", checkKey);
|
||||
|
||||
</script>
|
||||
<script type="text/javascript" src="content.js"></script>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
|
||||
</head>
|
||||
<body class=''>
|
||||
|
|
85
html/content.js
Normal file
85
html/content.js
Normal file
|
@ -0,0 +1,85 @@
|
|||
/*
|
||||
* This file is part of FeedTheMonkey.
|
||||
*
|
||||
* Copyright 2015 Jeena
|
||||
*
|
||||
* FeedTheMonkey 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.
|
||||
*
|
||||
* FeedTheMonkey 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 FeedTheMonkey. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
function $(id) {
|
||||
return document.getElementById(id);
|
||||
}
|
||||
|
||||
function setArticle(article) {
|
||||
window.scrollTo(0, 0);
|
||||
|
||||
$("date").innerHTML = "";
|
||||
$("title").innerHTML = "";
|
||||
$("title").href = "";
|
||||
$("title").title = "";
|
||||
$("feed_title").innerHTML = "";
|
||||
$("author").innerHTML = "";
|
||||
$("article").innerHTML = "";
|
||||
|
||||
if(article === "empty") {
|
||||
|
||||
$("article").innerHTML = "No unread articles to display.";
|
||||
|
||||
} else if(article === "loading") {
|
||||
|
||||
$("article").innerHTML = "Loading <blink>…</blink>";
|
||||
|
||||
} else if (article === "logout") {
|
||||
|
||||
} else if(article) {
|
||||
|
||||
$("date").innerHTML = (new Date(parseInt(article.updated, 10) * 1000));
|
||||
$("title").innerHTML = article.title;
|
||||
$("title").href = article.link;
|
||||
$("title").title = article.link;
|
||||
$("feed_title").innerHTML = article.feed_title;
|
||||
$("title").className = article.marked ? "starred" : "";
|
||||
$("author").innerHTML = "";
|
||||
if(article.author && article.author.length > 0)
|
||||
$("author").innerHTML = "– " + article.author
|
||||
$("article").innerHTML = article.content;
|
||||
|
||||
var as = $("article").getElementsByTagName("a");
|
||||
for(var i = 0; i < as.length; i++) {
|
||||
as[i].target = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function setFont(font, size) {
|
||||
document.body.style.fontFamily = font;
|
||||
document.body.style.fontSize = size + "pt";
|
||||
}
|
||||
|
||||
function setNightmode(nightmode) {
|
||||
if(nightmode) document.body.className = "nightmode";
|
||||
else document.body.className = "";
|
||||
}
|
||||
|
||||
document.onkeydown = checkKey;
|
||||
|
||||
function checkKey(e) {
|
||||
e = e || window.event;
|
||||
if (e.keyCode == '37') {
|
||||
window.location.href = "feedthemonkey:previous";
|
||||
}
|
||||
else if (e.keyCode == '39') {
|
||||
window.location.href = "feedthemonkey:next";
|
||||
}
|
||||
}
|
|
@ -2,5 +2,6 @@
|
|||
<qresource prefix="/html">
|
||||
<file>content.css</file>
|
||||
<file>content.html</file>
|
||||
<file>content.js</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
|
|
@ -17,11 +17,12 @@
|
|||
* along with FeedTheMonkey. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import QtWebEngine 1.8
|
||||
import QtWebEngine 1.0
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 1.3
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Controls.Styles 1.3
|
||||
import QtQuick.Controls 1.3
|
||||
import TTRSS 1.0
|
||||
|
||||
Item {
|
||||
|
@ -91,10 +92,7 @@ Item {
|
|||
} else if (request.url == "feedthemonkey:next") {
|
||||
request.action = WebEngineView.IgnoreRequest;
|
||||
app.showNextPost();
|
||||
} else if (request.url == "feedthemonkey:open") {
|
||||
request.action = WebEngineView.IgnoreRequest;
|
||||
Qt.openUrlExternally(post.link)
|
||||
} else if (request.navigationType !== WebEngineNavigationRequest.LinkClickedNavigation) {
|
||||
} else if (request.navigationType != WebEngineView.LinkClickedNavigation) {
|
||||
request.action = WebEngineView.AcceptRequest;
|
||||
} else {
|
||||
request.action = WebEngineView.IgnoreRequest;
|
||||
|
|
|
@ -33,7 +33,7 @@ Item {
|
|||
}
|
||||
|
||||
id: item
|
||||
height: d.height + t.height + e.height + 2
|
||||
height: d.height + t.height + e.height + 20
|
||||
|
||||
Item {
|
||||
anchors.fill: parent
|
||||
|
@ -81,7 +81,7 @@ Item {
|
|||
Label {
|
||||
id: t
|
||||
text: title
|
||||
color: nightmode ? (read ? "#888" : "#ddd") : (read ? "gray" : "black")
|
||||
color: nightmode ? (read ? "#555" : "#aaa") : (read ? "gray" : "black")
|
||||
font.pointSize: textFontSize
|
||||
textFormat: Text.PlainText
|
||||
wrapMode: Text.WrapAnywhere
|
||||
|
|
|
@ -48,21 +48,6 @@ ScrollView {
|
|||
}
|
||||
}
|
||||
|
||||
onWidthChanged: {
|
||||
// Hide sidebar if smaller than 200px wide
|
||||
if(width < 200) {
|
||||
width = 0;
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
width: 1
|
||||
color: app.nightmode ? "#111" : "lightgray"
|
||||
anchors.right: parent.right
|
||||
anchors.top: parent.top
|
||||
height: parent.height
|
||||
}
|
||||
|
||||
ListView {
|
||||
id: listView
|
||||
|
||||
|
@ -82,12 +67,12 @@ ScrollView {
|
|||
highlightFollowsCurrentItem: false
|
||||
highlight: Component {
|
||||
Rectangle {
|
||||
width: listView.currentItem.width -1
|
||||
width: listView.currentItem.width
|
||||
height: listView.currentItem.height
|
||||
color: nightmode ? "#15539e" : "lightblue"
|
||||
color: nightmode ? "#444" : "lightblue"
|
||||
opacity: 0.5
|
||||
y: listView.currentItem.y
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
onCurrentItemChanged: {
|
||||
|
@ -100,6 +85,8 @@ ScrollView {
|
|||
}
|
||||
|
||||
item.content.post = server.posts[currentIndex]
|
||||
//content.flickableItem.contentY = 0
|
||||
|
||||
previousPost = item.content.post
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,11 +35,6 @@ MenuBar {
|
|||
Menu {
|
||||
visible: menuBar.visible
|
||||
title: qsTr("File")
|
||||
MenuItem {
|
||||
text: qsTr("Close &Window")
|
||||
shortcut: "Ctrl+W"
|
||||
onTriggered: Qt.quit()
|
||||
}
|
||||
MenuItem {
|
||||
text: qsTr("Exit")
|
||||
shortcut: "Ctrl+Q"
|
||||
|
@ -137,7 +132,7 @@ MenuBar {
|
|||
title: qsTr("Help")
|
||||
MenuItem {
|
||||
text: qsTr("About")
|
||||
onTriggered: Qt.openUrlExternally("http://jeena.net/feedthemonkey/index.html");
|
||||
onTriggered: Qt.openUrlExternally("http://jabs.nu/feedthemonkey");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ ApplicationWindow {
|
|||
id: app
|
||||
title: "FeedTheMonkey"
|
||||
visible: true
|
||||
color: nightmode ? "#2d2d2d" : "#eee"
|
||||
color: nightmode ? "#111" : "#eee"
|
||||
|
||||
minimumWidth: 480
|
||||
minimumHeight: 320
|
||||
|
@ -60,6 +60,7 @@ ApplicationWindow {
|
|||
__contentItem.visible: visible
|
||||
}
|
||||
|
||||
|
||||
Settings {
|
||||
id: settings
|
||||
category: "window"
|
||||
|
@ -159,6 +160,10 @@ ApplicationWindow {
|
|||
case Qt.Key_Return:
|
||||
Qt.openUrlExternally(content.post.link)
|
||||
break
|
||||
case Qt.Key_S: {
|
||||
console.log(Qt.openUrlExternally("speaker:"+ removeHTML(content.post.content)))
|
||||
break
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
@ -180,6 +185,7 @@ ApplicationWindow {
|
|||
content: content
|
||||
server: server
|
||||
|
||||
Layout.minimumWidth: 200
|
||||
implicitWidth: 300
|
||||
textFontSize: app.textFontSize
|
||||
nightmode: app.nightmode
|
||||
|
|
|
@ -31,7 +31,6 @@
|
|||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||
QGuiApplication app(argc, argv);
|
||||
app.setOrganizationName("Jeena");
|
||||
app.setOrganizationDomain("jeena.net");
|
||||
|
|
|
@ -99,18 +99,6 @@ void TinyTinyRSSLogin::reply()
|
|||
qWarning() << mLoginError;
|
||||
emit loginErrorChanged(mLoginError);
|
||||
|
||||
if(mLoginError == "NOT_LOGGED_IN") {
|
||||
mSessionId = nullptr;
|
||||
mServerUrl = nullptr;
|
||||
|
||||
QSettings settings;
|
||||
settings.remove("sessionId");
|
||||
settings.remove("serverUrl");
|
||||
settings.sync();
|
||||
|
||||
emit sessionIdChanged(mSessionId);
|
||||
}
|
||||
|
||||
} else {
|
||||
mSessionId = json.object().value("content").toObject().value("session_id").toString();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue