Skip to content
This repository was archived by the owner on Jul 8, 2024. It is now read-only.
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
120 commits
Select commit Hold shift + click to select a range
4af6b04
Fix opening from notification via DBus
Oct 23, 2025
6cf705f
Fix access token refresh
Oct 23, 2025
bae7b4b
Use post title instead of 'Comments' for cover image.
Oct 23, 2025
81934cf
Sharing URLs from Comments page and Image view
Oct 23, 2025
72c6553
Various media handling improvements
Oct 23, 2025
8d9abec
Filter subscribed subreddit list on text entered in subreddit field.
Oct 30, 2025
c9aea2a
Update about, spec and remove donate
Oct 30, 2025
60f5311
Translation changes
Oct 30, 2025
132e01e
Update translation files
weblate Oct 30, 2025
f97a868
Added translation using Weblate (Estonian)
Nov 1, 2025
e91ddb8
Translated using Weblate (Estonian)
Nov 1, 2025
e091fc3
Do the inline images better
Nov 5, 2025
689bdb1
Support those share links to comments (/r/sub/s/id) properly.
Nov 6, 2025
3354a15
Move text box to above subreddit list, as it is linked to it now.
Nov 6, 2025
feafad6
Cleanup
Nov 6, 2025
b17758b
Update translations & readme
Nov 6, 2025
23e96ed
Translated using Weblate (Czech)
weblate Nov 16, 2025
440be31
Translated using Weblate (Hungarian)
weblate Nov 16, 2025
3e92780
Translated using Weblate (Polish)
weblate Nov 16, 2025
e4f43cc
Translated using Weblate (Estonian)
weblate Nov 16, 2025
474b31f
Rework page stack and cleanup
Nov 17, 2025
dc3a46b
Translated using Weblate (Polish)
weblate Nov 18, 2025
9adf121
Add github build
Nov 18, 2025
1fddc47
Release 1.14
Nov 18, 2025
08245b4
Regular changelog
Nov 19, 2025
808edd2
Harbour & notification cleanup
Nov 19, 2025
283f498
Username header on Subreddits page
Nov 20, 2025
ff7ce58
Add publish to github repo
Nov 20, 2025
6aff2d8
Update translations
Nov 20, 2025
fb4065f
Translated using Weblate (Polish)
weblate Nov 20, 2025
99707ec
Fix 'Continue this thread' button
Nov 23, 2025
ac2f796
Release 1.14.2
Nov 24, 2025
c2bd56f
Translated using Weblate (Polish)
abranson Nov 24, 2025
a138ae8
Added translation using Weblate (Russian)
user23204r520-create Nov 25, 2025
4c28fc2
Fix default translation
Nov 25, 2025
5063a14
Translated using Weblate (English (United Kingdom))
abranson Nov 25, 2025
1a40beb
Translated using Weblate (Russian)
user23204r520-create Nov 25, 2025
01630ee
Cleanup strings and translations
Nov 26, 2025
92f0ec0
Translated using Weblate (French)
abranson Nov 26, 2025
09e490e
Translated using Weblate (Italian)
abranson Nov 26, 2025
e9d226c
Translated using Weblate (Czech)
abranson Nov 26, 2025
8da5298
Translated using Weblate (Russian)
user23204r520-create Nov 26, 2025
ce4a249
Translated using Weblate (Russian)
abranson Nov 26, 2025
f8cfaf4
Translated using Weblate (German)
abranson Nov 26, 2025
6a1d034
Translated using Weblate (Polish)
weblate Nov 26, 2025
da192bf
Translated using Weblate (Polish)
abranson Nov 26, 2025
98360c0
Translated using Weblate (Hungarian)
abranson Nov 26, 2025
08303a1
Translated using Weblate (Greek)
weblate Nov 26, 2025
a1a4026
Translated using Weblate (English)
abranson Nov 26, 2025
08c6619
Translated using Weblate (Italian)
abranson Nov 26, 2025
cbe5523
Translated using Weblate (English (United Kingdom))
abranson Nov 26, 2025
893b318
More translation cleanup
Nov 26, 2025
ef62683
Last refreshed menu label
Nov 26, 2025
c3d4a0a
Translated using Weblate (Greek)
abranson Nov 26, 2025
526cad6
Translated using Weblate (Portuguese (Brazil))
abranson Nov 26, 2025
becf0bf
Translated using Weblate (Italian)
abranson Nov 26, 2025
0d3cf23
Translated using Weblate (Russian)
abranson Nov 26, 2025
f0227a2
Translated using Weblate (Dutch (Belgium))
abranson Nov 26, 2025
4189a80
Translated using Weblate (Czech)
abranson Nov 26, 2025
66af8ec
Translated using Weblate (German)
abranson Nov 26, 2025
8ce7153
Translated using Weblate (Polish)
abranson Nov 26, 2025
79ceecc
Translated using Weblate (Dutch)
abranson Nov 26, 2025
38a5600
Translated using Weblate (Hungarian)
abranson Nov 26, 2025
d2480fa
Translated using Weblate (Swedish)
abranson Nov 26, 2025
1fe6c73
Translated using Weblate (French)
abranson Nov 26, 2025
db698b6
Avoid DBusActivatable error
Nov 27, 2025
5bc3f65
Better cover text
Nov 27, 2025
c6ce899
Show user overview as default 'My Profile' view.
Nov 27, 2025
3c9dbff
Rearrange user comment entries to show upvotes too
Nov 27, 2025
ac7a542
Translations
Nov 27, 2025
d10b44d
Build for Jolla 1
Nov 28, 2025
58fd7b8
Harbour tweaks, autogenerate icons.
Nov 30, 2025
47cebbd
Release 1.14.3
Nov 30, 2025
74b4467
Translated using Weblate (Russian)
user23204r520-create Nov 30, 2025
2101afc
Added translation using Weblate (Ukrainian)
user23204r520-create Nov 30, 2025
1052b0e
Translated using Weblate (Ukrainian)
user23204r520-create Nov 30, 2025
5a1a895
Translated using Weblate (Dutch)
Dec 1, 2025
1ec37d6
Translated using Weblate (Russian)
user23204r520-create Nov 30, 2025
a3656a3
Translated using Weblate (Dutch (Belgium))
Dec 1, 2025
2f41d0d
Support HLS video
Dec 1, 2025
f4f4dac
Translated using Weblate (English (United Kingdom))
weblate Dec 1, 2025
36eb376
Translated using Weblate (English (United Kingdom))
abranson Dec 1, 2025
b7fb7bf
Translated using Weblate (Polish)
weblate Dec 1, 2025
01299d9
Translated using Weblate (French)
weblate Dec 1, 2025
8ce690b
Translated using Weblate (Ukrainian)
abranson Dec 1, 2025
630b6d9
Translated using Weblate (English (United Kingdom))
abranson Dec 1, 2025
c684635
Translated using Weblate (Polish)
abranson Dec 1, 2025
526a70f
Translated using Weblate (Russian)
user23204r520-create Dec 2, 2025
b87632c
Translated using Weblate (Ukrainian)
user23204r520-create Dec 2, 2025
37da5e5
Remove unwanted character
erhoof Dec 3, 2025
f14ce3b
Merge pull request #1 from erhoof/fix/fix-ru-translation
abranson Dec 3, 2025
efbb9f6
Update youtube-dl
Dec 1, 2025
d31d7e8
Add cancel button to comment text box
Dec 2, 2025
b24ab59
Improve video stream selection. Add video metadata and current time.
Dec 5, 2025
76b4569
Switch deleted comment provider to reveddit, which still exists
Dec 9, 2025
a24ad8b
Reorganize Subreddit list. Add Saved Things.
Dec 9, 2025
672a138
Update translations
Dec 9, 2025
7549851
Switch from youtube-dl to yt-dlp
Dec 11, 2025
dc77c66
Update translation files
weblate Dec 11, 2025
8e822c1
Fix share URL again.
Dec 15, 2025
459333d
Default HLS off because it's a bit unstable. Rename to 'adaptive'.
Dec 15, 2025
369c171
Release 1.14.4
Dec 15, 2025
0219b71
Translated using Weblate (Ukrainian)
user23204r520-create Dec 15, 2025
3ea5751
Translated using Weblate (Russian)
user23204r520-create Dec 15, 2025
a3a3e98
Update translation files
weblate Dec 15, 2025
291a06b
Use avatars for user and account pages.
Dec 15, 2025
1c7331d
Improve inline images. Open them in the viewer when tapped.
Dec 19, 2025
6fbebce
Caching posted gifs caused OOM
Dec 19, 2025
0367bd3
Release 1.14.5
Dec 19, 2025
8de9269
Revert yt-dlp switch - too fussy about the python version
Dec 20, 2025
15bdd54
Release 1.14.6
Dec 20, 2025
7ea2fec
Translated using Weblate (Swedish)
eson57 Dec 29, 2025
dc75872
Translated using Weblate (Ukrainian)
weblate Dec 29, 2025
f7ef884
Translated using Weblate (French)
weblate Dec 29, 2025
be3bf0b
Translated using Weblate (Swedish)
eson57 Dec 30, 2025
ee9e9e5
Translated using Weblate (Estonian)
Jan 7, 2026
43c4044
Translated using Weblate (Estonian)
Jan 30, 2026
2881595
Revert "Revert "packaging: Move rpm folder to repository root"
Thaodan Feb 12, 2023
7b7f385
Workaround youtube-dl returning videos with -silent
Thaodan Feb 7, 2026
d25a8aa
Fix redgifs detection
Thaodan Feb 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
213 changes: 213 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
name: SailfishOS Build

# This creates a GitHub release on every tag push.
# It can also publish the RPMs to a repo in the same user/org called 'repo',
# but only if the 'PUBLISH_REPO_TOKEN' repository secret has been set to a
# fine-grained Personal Access Token that you've created which allows
# read/write access to that repo. If either of those things are missing,
# publishing will be skipped.

on:
push:
branches: [ "*" ]
tags: [ "*" ]
pull_request:
branches: [ "master" ]

jobs:
build:
runs-on: ubuntu-latest
environment: quickddit-api-key
env:
REDDIT_CLIENT_ID: ${{ secrets.REDDIT_CLIENT_ID }}
REDDIT_CLIENT_SECRET: ${{ secrets.REDDIT_CLIENT_SECRET }}
REDDIT_REDIRECT_URL: ${{ secrets.REDDIT_REDIRECT_URL }}
RELEASE: 3.4.0.24
ARCHITECTURES: |
armv7hl
aarch64
i486
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive

- name: Validate Reddit OAuth secrets
run: |
missing=false
for var in REDDIT_CLIENT_ID REDDIT_CLIENT_SECRET REDDIT_REDIRECT_URL; do
if [ -z "${!var}" ]; then
echo "::error::Environment variable $var is required but was not provided."
missing=true
fi
done
if [ "$missing" = true ]; then
exit 1
fi

- name: Prepare
run: |
docker pull coderus/sailfishos-platform-sdk:${RELEASE}

- name: Build Sailfish OS packages
run: |
set -euo pipefail
mkdir .RPMs
docker run --rm --privileged \
-e REDDIT_CLIENT_ID \
-e REDDIT_CLIENT_SECRET \
-e REDDIT_REDIRECT_URL \
-e RELEASE \
-e ARCHITECTURES \
-v "$PWD":/share \
coderus/sailfishos-platform-sdk:${RELEASE} \
bash -c '
set -euo pipefail
while read -r arch; do
[ -n "$arch" ] || continue
target="SailfishOS-${RELEASE}-${arch}"
echo "::group::Building for $target ($arch)"
rm -rf build
mkdir -p build
cp -r /share/* /share/.git* build
cd build/sailfish
mb2 -t "$target" -s rpm/harbour-quickddit.spec build \
--define "quickddit_reddit_client_id $REDDIT_CLIENT_ID" \
--define "quickddit_reddit_client_secret $REDDIT_CLIENT_SECRET" \
--define "quickddit_reddit_redirect_url $REDDIT_REDIRECT_URL"
sudo cp -v RPMS/*.rpm /share/.RPMs/
ls -la /share/.RPMs
echo "::endgroup::"
done <<< "$ARCHITECTURES"
'

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: harbour-quickddit
path: .RPMs/*
include-hidden-files: true

release:
runs-on: ubuntu-latest
needs: build
if: startsWith(github.ref, 'refs/tags/')

env:
# Target repo to host the RPM repository; auto-uses whoever owns this workflow
PACKAGE_REPO: ${{ github.repository_owner }}/repo

steps:
- name: Download RPMs
uses: actions/download-artifact@v4
with:
name: harbour-quickddit
path: .

- name: Create releases
uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref_name }}
name: ${{ github.ref_name }}
files: '*.rpm'

- name: Check publish configuration
id: publish_check
env:
TOKEN: ${{ secrets.PUBLISH_REPO_TOKEN }}
run: |
set -euo pipefail

if [ -z "${TOKEN:-}" ]; then
echo "::warning ::PUBLISH_REPO_TOKEN is not set; skipping RPM repo publish."
echo "enabled=false" >> "$GITHUB_OUTPUT"
exit 0
fi

OWNER_REPO="${{ github.repository_owner }}/repo"
STATUS=$(curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer ${TOKEN}" \
https://api.github.com/repos/${OWNER_REPO})

if [ "$STATUS" -ne 200 ]; then
echo "::warning ::Target repo '${OWNER_REPO}' does not exist or is inaccessible; skipping RPM repo publish."
echo "enabled=false" >> "$GITHUB_OUTPUT"
exit 0
fi

echo "Publish configuration OK for ${OWNER_REPO}"
echo "enabled=true" >> "$GITHUB_OUTPUT"

- name: Checkout or create repo
if: steps.publish_check.outputs.enabled == 'true'
env:
PUBLISH_TOKEN: ${{ secrets.PUBLISH_REPO_TOKEN }}
run: |
set -euo pipefail
REPO_URL="https://x-access-token:${PUBLISH_TOKEN}@github.com/${PACKAGE_REPO}.git"

git config --global init.defaultBranch master
git config --global user.name "GitHub Actions"
git config --global user.email "actions@users.noreply.github.com"

if git ls-remote "$REPO_URL" HEAD >/dev/null 2>&1; then
echo "Cloning existing repo"
git clone "$REPO_URL" publish-repo
cd publish-repo
if git rev-parse --verify master >/dev/null 2>&1; then
git checkout master
else
echo "Creating master branch"
git checkout -b master
fi
else
echo "Creating new repo"
mkdir publish-repo
cd publish-repo
git init -b master
git remote add origin "$REPO_URL"
fi

- name: Add new RPMs to repo and push
if: steps.publish_check.outputs.enabled == 'true'
working-directory: publish-repo
run: |
set -euo pipefail
mkdir -p aarch64 armv7hl i486

# Move new RPMs into repo
for f in ../*.rpm; do
[ -e "$f" ] || continue
case "$f" in
*aarch64.rpm) dest="aarch64" ;;
*armv7hl.rpm) dest="armv7hl" ;;
*i486.rpm) dest="i486" ;;
*) echo "Skipping unknown arch in $f"; continue ;;
esac
echo "Moving $f -> $dest/"
mv "$f" "$dest/"
done

# Regenerate repo metadata for each arch
sudo apt-get update
sudo apt-get install -y createrepo-c
for archdir in aarch64 armv7hl i486; do
echo "Running createrepo_c in $archdir"
createrepo_c --update "$archdir"
done

echo "Resulting tree:"
ls -R

# Commit and push
git add aarch64 armv7hl i486
if git diff --cached --quiet; then
echo "No changes to commit."
else
echo "Committing new RPMs and pushing"
git commit -m "Release ${{ github.event.repository.name }} ${{ github.ref_name }}"
git push origin master
fi
19 changes: 10 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ Features
| search posts | Y | | Y |
| search subreddits | Y | Y | Y |
| inbox notifications | Y | | Y |
| share posts | Y | | Y |
| watch clipboard for reddit links | Y | | Y |
| TOR | Y | | Y |
| Post flair | partial | partial | |
Expand All @@ -48,27 +49,27 @@ id and secret](https://github.com/reddit/reddit/wiki/OAuth2) and fill it up in

Optionally you can also define `IMGUR_CLIENT_ID` with your own Imgur API client id.

TODO
-----

- (Local) browse history
- bookmark users, locally or using reddit 'friend' feature.
- Add more filtering options, e.g. by flair
- Reddit Live and/or a method of 'live' following a post

Download
--------
- MeeGo Harmattan (Nokia N9/N950): [OpenRepos](https://openrepos.net/content/accumulator/quickddit)
- SailfishOS (Jolla): [OpenRepos](https://openrepos.net/content/accumulator/quickddit-0)
- SailfishOS (Jolla): [OpenRepos](https://openrepos.net/content/abranson/quickddit)
- Ubuntu-touch: [OpenStore](https://open-store.io/app/quickddit) or build with `clickable -c ubuntu-touch/clickable.json`

Translations
------------

You can help translation Quickddit into different languages here:

https://hosted.weblate.org/projects/Quickddit/

License
-------
All files in this project are licensed under the GNU GPLv3+, unless otherwise stated.

Quickddit - Reddit client for mobile phones
Copyright (C) 2013-2014 Dickson Leong
Copyright (C) 2015-2020 Sander van Grieken
Copyright (C) 2025 Andrew Branson

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
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,61 @@
# Add new changelog entries following the format below.
# Add newest entries to the top of the list.
# Separate entries from eachother with a blank line.
# Separate entries from each other with a blank line.

# * date Author's Name <author's email> version-release
# - Summary of changes
* Sat Dec 20 2025 Andrew Branson <github@andrewbranson.net> 1.14.6-1
- fix: Revert back to youtube-dl because yt-dlp really doesn't work with Python < 3.10

* Fri Dec 19 2025 Andrew Branson <github@andrewbranson.net> 1.14.5-1
- new: Use avatars in user and account pages.
- chg: Improve inline image handling and scaling. Open in viewer.
- fix: Caching posted gifs caused OOM crashes

* Mon Dec 15 2025 Andrew Branson <github@andrewbranson.net> 1.14.4-1
- new: Support adaptive video streams. Must be enabled in settings. More likely to have sound, but a bit unstable right now.
- new: Elapsed video time on the left, Video metadata at the top.
- new: Cancel button on Comment Reply
- chg: Reorganize main menu. Add saved things.
- chg: Switch from youtube-dl to yt-dlp
- fix: Avoid Share URL resolution server blocking

* Sun Nov 30 2025 Andrew Branson <github@andrewbranson.net> 1.14.3-1
- new: Menu label showing last refresh time
- new: Show upvotes on user comment list
- chg: Better fit cover text for post names
- chg: Generate png icons during build
- fix: Various harbour compat tweaks
- fix: Build for SFOS 3.4.0 for Jolla 1
- chg: Organize and sync all translations.
- new: Russian translation.

* Mon Nov 24 2025 Andrew Branson <github@andrewbranson.net> 1.14.2-1
- new: Add login details to Subreddit page. Tap opens Accounts to login or switch.
- fix: Fix 'Continue this thread' button
- fix: Notification opens all messages instead of last view

* Wed Nov 19 2025 Andrew Branson <github@andrewbranson.net> 1.14-1
- new: Tweak Subreddit page, use it as the root page and stack pages more.
- new: Support shared reddit comment links
- chg: Drop all other globalUtil variables
- fix: Drop singleton WebViewer to avoid closing hangs and crashes
- fix: Refresh properly after switching accounts or signing in
- fix: Improve inline images
- new: Github action build.
- chg: Update translations

* Thu Oct 30 2025 Andrew Branson <github@andrewbranson.net> 1.13-1
- fix: access token URL
- fix: opening notifications
- fix: some thumbnail URLs were escaped
- fix: improve video stream detection
- new: Comments cover page now shows post title
- new: Inline images in comments
- new: Filter subreddit list when typing subreddit name
- chg: update youtube-dl
- chg: ownership URLs to me as was abandoned
- chg: translations & translation host

* Mon Mar 06 2023 Sander van Grieken <sander@outrightsolutions.nl> 1.11.1-1
- fix: remember settings (thanks DeathByDenim)
Expand Down
24 changes: 19 additions & 5 deletions sailfish/rpm/harbour-quickddit.spec → rpm/harbour-quickddit.spec
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@

Name: harbour-quickddit
Summary: Reddit client for mobile phones
Version: 1.11.1
Version: 1.14.6
Release: 1
Group: Qt/Qt
License: GPLv3+
URL: https://github.com/accumulator/Quickddit
URL: https://github.com/abranson/Quickddit
Source0: %{name}-%{version}.tar.bz2
Requires: sailfishsilica-qt5
Requires: mapplauncherd-booster-silica-qt5
Expand All @@ -23,15 +23,15 @@ BuildRequires: pkgconfig(Qt5Network)
BuildRequires: pkgconfig(sailfishapp)
BuildRequires: pkgconfig(nemonotifications-qt5)
BuildRequires: pkgconfig(keepalive)
BuildRequires: pkgconfig(qt5embedwidget)
BuildRequires: qt5-qttools-linguist
BuildRequires: librsvg-tools

%description
Quickddit is a free and open source Reddit client for mobile phones.


%prep
%setup -q -n %{name}-%{version}
%setup -q -n %{name}-%{version}/sailfish

%build

Expand All @@ -46,7 +46,21 @@ Quickddit is a free and open source Reddit client for mobile phones.
%install
%qmake5_install

for size in 86 108 128 172; do
icon_dir="%{buildroot}%{_datadir}/icons/hicolor/${size}x${size}/apps";
mkdir -p "${icon_dir}";
rsvg-convert -w ${size} -h ${size} -o "${icon_dir}/%{name}.png" %{name}.svg;
done

%files
%defattr(-,root,root,-)
%{_bindir}/%{name}
%{_datadir}/*
# Make sure python files aren't executable or they'll fail harbour validation
%defattr(0644,root,root,-)
%{_datadir}/applications/%{name}.desktop
%{_datadir}/%{name}
%{_datadir}/icons/hicolor/86x86/apps/%{name}.png
%{_datadir}/icons/hicolor/108x108/apps/%{name}.png
%{_datadir}/icons/hicolor/128x128/apps/%{name}.png
%{_datadir}/icons/hicolor/172x172/apps/%{name}.png

3 changes: 3 additions & 0 deletions sailfish/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,6 @@ app_interface*

# application binary
harbour-quickddit

# Packages
RPMS
4 changes: 2 additions & 2 deletions sailfish/dbusapp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ DbusApp::DbusApp(QObject *parent) :
new ViewAdaptor(this);

QDBusConnection c = QDBusConnection::sessionBus();
bool ret = c.registerService("org.quickddit");
bool ret = c.registerService("nl.outrightsolutions.Quickddit");
Q_ASSERT(ret);
ret = c.registerObject("/", this);
ret = c.registerObject("/nl/outrightsolutions/Quickddit", this);
Q_ASSERT(ret);
Q_UNUSED(ret);
}
Expand Down
Loading