• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

.github/H19-Sep-2021-7254

.tx/H19-Sep-2021-129

data/H03-May-2022-714657

examples/H19-Sep-2021-3,7383,689

flatpak/H19-Sep-2021-103102

po/H19-Sep-2021-50,28336,528

sql/H19-Sep-2021-13798

src/H19-Sep-2021-35,52729,282

tests/H19-Sep-2021-8,0767,278

ui/H19-Sep-2021-5,7325,596

vapi/H19-Sep-2021-520451

._vimrcH A D19-Sep-202198 21

.gitignoreH A D19-Sep-2021125 98

COPYINGH A D19-Sep-202134.3 KiB675553

README.mdH A D19-Sep-202114.2 KiB255184

cawbird.gresource.xmlH A D19-Sep-20213.8 KiB7069

meson.buildH A D03-May-20227.7 KiB278251

notes.mdH A D19-Sep-20215.3 KiB6947

README.md

1# Cawbird 1.4.2
2
3<a href="https://ibboard.co.uk/cawbird/#screenshots"><img src="./screenshot1.jpg" style="float:right; margin-left: 1em;" /></a>
4
5[Cawbird](https://ibboard.co.uk/cawbird/) is a fork of the [Corebird](https://corebird.baedert.org/) Twitter client from Baedert, which became unsupported after Twitter disabled the streaming API.
6
7Cawbird works with the new APIs and includes a few fixes and modifications that have historically been patched in to IBBoard's custom Corebird build on his personal Open Build Service account<sup>[1](#footnote1)</sup>.
8
9## Packaging and installation
10
11Cawbird packages are built in the [Cawbird Open Build Service project](https://build.opensuse.org/project/show/home:IBBoard:cawbird). They can be installed from the [Cawbird download page](https://software.opensuse.org//download.html?project=home%3AIBBoard%3Acawbird&package=cawbird).
12
13<a href="https://software.opensuse.org//download.html?project=home%3AIBBoard%3Acawbird&package=cawbird" style="display: inline-block; padding: 0.5em 1em; border: 1px solid #000; border-radius: 0.5em; background: #444; color: #eee; font-weight: bold">**Install Cawbird**</a>
14
15These packages are currently available for:
16
17* openSUSE
18  * openSUSE Tumbleweed
19  * openSUSE Leap 15.2
20  * openSUSE Leap 15.3
21* Fedora
22  * Fedora 32
23  * Fedora 33
24  * Fedora 34
25  * Fedora Rawhide
26* CentOS
27  * CentOS 7
28  * CentOS 8 (including Streams)
29* Ubuntu
30  * Ubuntu 18.04 (Bionic Beaver)
31  * Ubuntu 20.04 (Focal Fossa)
32  * Ubuntu 20.10 (Groovy Gorilla)
33  * Ubuntu 21.04 (Hirstue Hippo)
34* Debian
35  * 10 (Buster)
36  * Testing
37  * Unstable
38  * Raspbian 10
39
40i586, x86_64 (amd64), aarch64 (arm64) and armv7l are available on most platforms (where supported by the distro).
41
42### Official distro repositories
43
44The following distros currently have their own official packages:
45
46* [Alpine Linux / postmarketOS (Edge)](https://pkgs.alpinelinux.org/packages?name=cawbird&branch=edge)
47  * `sudo apk add cawbird`
48* [Arch Linux](https://www.archlinux.org/packages/community/x86_64/cawbird/) ("Community")
49  * `pacman -Syu cawbird`
50* [Fedora (30+)](https://apps.fedoraproject.org/packages/cawbird)
51  * `sudo dnf install cawbird`
52* [Guix](https://guix.gnu.org/en/packages/cawbird-1.4.1/)
53  * `guix install cawbird`
54* [NixOS (19.09+)](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/networking/cawbird/default.nix)
55  * `nix-shell -p cawbird` for testing, `nix-env -iA cawbird` for permanent installation
56* [Solus](https://dev.getsol.us/source/cawbird/)
57  * `sudo eopkg it cawbird`
58
59## Community builds
60
61* [Cawbird Snap](https://snapcraft.io/cawbird) on Snapcraft.io
62* [Cawbird Flatpak](https://flathub.org/apps/details/uk.co.ibboard.cawbird) on Flathub.org
63* Arch Linux (AUR):
64  * [Cawbird-git](https://aur.archlinux.org/packages/cawbird-git)
65
66### Dependencies
67
68Twitter uses specific codecs for videos. These are provided by `libav` and are not included in the core repositories of many distros. The following additional repositories are known to include the required libraries:
69
70* openSUSE - [Packman](http://packman.links2linux.org/)
71* Fedora/CentOS - [RPMFusion](https://rpmfusion.org/)
72* Ubuntu - Universe
73
74## Shortcuts
75
76| Key                | Description                                                                                                                                 |
77| :-----:            | :-----------                                                                                                                                |
78| `Ctrl + t`         | Compose Tweet                                                                                                                               |
79| `Back`             | Go one page back (this can be triggered via the back button on the keyboard, the back thumb button on the mouse or  `Alt + Left`)           |
80| `Forward`          | Go one page forward (this can be triggered via the forward button on the keyboard, the forward thumb button on the mouse or  `Alt + Right`) |
81| `Alt + num`        | Go to page `num` (between 1 and 7 at the moment)                                                                                            |
82| `Ctrl + Shift + s` | Show/Hide topbar                                                                                                                            |
83| `Ctrl + p`         | Show account settings                                                                                                                       |
84| `Ctrl + k`         | Show account list                                                                                                                           |
85| `Ctrl + Shift + p` | Show application settings                                                                                                                   |
86
87When a tweet is focused (via keynav):
88
89* `r`  - reply
90* `tt` - retweet
91* `f`  - favorite
92* `q`  - quote
93* `dd` - delete
94* `Return` - Show tweet details
95* `k` - Print tweet details to stdout (debug builds)
96
97## Limitations
98
99Due to [changes in the Twitter API](https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/migration/introduction), Cawbird has the following limitations:
100
101* Cawbird will update every two minutes
102* Cawbird does not get notified of the following actions when performed outside Cawbird, which will be refreshed on restart:
103  * Unfavourite
104  * Follow/Unfollow
105  * Block/Unblock
106  * Mute/Unmute
107  * DM deletion
108  * Some list changes
109
110All limitations are limitations imposed by Twitter and are not the fault of the Cawbird client. They have affected [all third-party client applications](http://apps-of-a-feather.com/).
111
112Cawbird has also been unable to implement the following features because Twitter did not provide a way for third-party applications to get the data:
113
114* Notification of Likes, RTs, quote tweets and any other interaction that appears in the "All" tab of twitter.com's Notifications but not in "Mentions"
115  * No API is available for other notifications, only a [mentions API](https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-mentions_timeline)
116* DMs to Groups
117  * Twitter's API only supports one-to-one DMs
118  * Twitter explicitly [closed a request for this API](https://twitterdevfeedback.uservoice.com/forums/921790-twitter-developer-labs/suggestions/37689256-allow-access-to-dm-group-conversations-via-twitter) as "not a priority"
119* Polls
120  * The free API does not include polls as tweet "entities"
121  * Twitter doesn't even mark posts so that we can direct people to the web
122* Twitter's "[Bookmarks](https://blog.twitter.com/en_us/topics/product/2018/an-easier-way-to-save-and-share-tweets.html)" system
123  * No API is available
124* Full threads in a single request
125  * No API is available
126* Replies older than seven days
127  * The free search is limited to returning results from the last seven days
128* All replies to a tweet
129  * No API is available and the search results are not guaranteed to find all replies
130* Twitter [Cards](https://developer.twitter.com/en/docs/tweets/optimize-with-cards/overview/abouts-cards)
131  * No API is available
132  * Twitter doesn't even mark posts so that we can direct people to the web
133  * This results in @TwitterDev [posting a message](https://mobile.twitter.com/TwitterDev/status/1222596295090757636) that many devs can't see!
134
135As of July 2020, Twitter has [announced v2 of the API](https://blog.twitter.com/developer/en_us/topics/tools/2020/introducing_new_twitter_api.html) and may support some of these features. We are [looking in to this](https://github.com/IBBoard/cawbird/issues/180) as that parts of the API are made available.
136
137## Known issues
138
139There are no current known issues with running Cawbird.
140
141Previously, the following issues have occurred that were outside of our control:
142
143* Due to a [bug in GnuTLS](https://gitlab.com/gnutls/gnutls/issues/841#note_225110002), Cawbird has suffered from occasional TLS errors. This has been handled under [Cawbird bug 9](https://github.com/IBBoard/cawbird/issues/9) and GnuTLS have released a fix for the underlying problem
144* Due to a [bug in GStreamer 1.16.1](https://github.com/IBBoard/cawbird/pull/42#issuecomment-539437887), Cawbird suffered from glitchy audio and video when playing media. This has now been fixed in GStreamer
145* Some combination of GStreamer, GTK and the Video Acceleration API (VAAPI) on some Intel chips can [cause corruption of videos](https://github.com/IBBoard/cawbird/issues/279). This is an [old and on-going problem](https://github.com/baedert/corebird/issues/540). Removing `gstreamer-vaapi` or equivalent resolves the problem.
146* "Fragment downloading has failed consecutive times" messages from GStreamer appear to be due to changes in GStreamer's `adaptivedemux` code that are [fixed in v1.18.1](https://gstreamer.freedesktop.org/releases/1.18/#1.18.2)
147
148## Translations
149
150  Since February 2020, there has been a [Cawbird project on Transifex](https://www.transifex.com/cawbird/cawbird/dashboard/). Users can sign up on Transifex for free to help translate Cawbird.
151
152## Testing
153
154Since August 2020, there has been a [Cawbird "unstable" package](https://software.opensuse.org//download.html?project=home%3AIBBoard%3Acawbird-unstable&package=cawbird-unstable) built on the Open Build Service. These packages are intended for users who can't build Cawbird from source but want to test new features.
155
156**Do not** use the unstable release unless you are testing new features and understand the risks. *They are not intended for everyday use*. They will be updated intermittently with new features from `git master`. They may have bugs. They may not get patched. They may be behind the main release. They may break things and eat your homework.
157
158It is recommended that you backup `~/.config/cawbird` before running Cawbird-Unstable.
159
160## Contributing
161
162  All contributions are welcome (artwork, design, code, just ideas, etc.) but if you're planning to
163  actively change something bigger, talk to me first.
164
165## Compiling Cawbird
166
167### Preparation
168
169Twitter clients need keys and secrets so that Twitter can go through the OAuth process. Cawbird used to ship
170with a standard set of  but has always supported custom keys through schema settings. However, that wasn't convenient for software builds. Cawbird now supports:
171
172a) per-user tokens and secrets (so each user uses a different "app")
173
174b) configuration of the default token and secret at build time
175
176What this means for developers is that you need to supply two build options with the key and the secret before the software will build. To stop them being trivially identifiable, we base64 encode them.
177
178If you wish to build your own "micro-fork" of the application then register at [developer.twitter.com](https://developer.twitter.com/) and create an application. To base64 encode the keys you can run `echo -n "<value>" | base64`.
179
180Reasons you may wish to micro-fork Cawbird:
181
182* You want to package a modified version with your own patches (as IBBoard used to do with Corebird)
183* You want to appear retro and use the old Corebird keys to confuse people
184* You want to check whether you're getting hit by Twitter limiting *applications*
185(not just users - all users of the app in aggregate) to 100,000 calls to some endpoints ([docs](https://developer.twitter.com/en/docs/twitter-api/v1/tweets/timelines/api-reference/get-statuses-mentions_timeline))
186
187Alternatively you can continue using the default keys by using the values `VmY5dG9yRFcyWk93MzJEZmhVdEk5Y3NMOA==` and `MThCRXIxbWRESDQ2Y0podzVtVU13SGUyVGlCRXhPb3BFRHhGYlB6ZkpybG5GdXZaSjI=` respectively.
188
189### Compiling
190
191Cawbird uses the Meson build system rather than the more archaic autoconf/make combination. Building is as simple as:
192
193```Bash
194meson build -Dconsumer_key_base64=<your-base64-key> -Dconsumer_secret_base64=<your-base64-secret>
195ninja -C build
196```
197
198If you want to test translations locally then you will also need to:
199
200* pass `-Dlocaltextdomain=true` to meson
201* run `ninja -C build cawbird-gmo` to generate the binary `.mo` translations
202* run `for file in po/*.gmo; do mkdir -p "${file/.gmo}/LC_MESSAGES/"; cp $file "${file/.gmo}/LC_MESSAGES/cawbird.mo"; done` to put the `.mo` files in the expected places
203* run `pushd build; ./cawbird; popd` to run Cawbird from the build directory
204  * to test a different language, run `cd build; LANGUAGE=aa_BB ./cawbird` with the appropriate language code
205
206Note that executing `build/cawbird` may result in one of the following errors:
207
208```Bash
209Settings schema 'uk.co.ibboard.cawbird' is not installed
210
211Settings schema 'uk.co.ibboard.cawbird' does not contain a key named 'foo'
212```
213
214To fix this, use the schemas from the build directory:
215
216```Bash
217GSETTINGS_SCHEMA_DIR=build/data/ GSETTINGS_BACKEND='memory' build/cawbird
218```
219
220Cawbird installs its application icon into `/usr/share/icons/hicolor/`, so an appropriate call to `gtk-update-icon-cache` might be needed.
221
222### Build Dependencies
223
224* `gtk+-3.0 >= 3.22`
225* `glib-2.0 >= 2.44`
226* `json-glib-1.0`
227* `sqlite3`
228* `libsoup-2.4`
229* `librest-0.7`
230* `liboauth`
231* `gettext >= 0.19.7`
232* `vala >= 0.28` (makedep)
233* `meson` (makedep)
234* `gst-plugins-base-1.0` (for playbin, disable by passing `-Dvideo=false` to Meson)
235* `gst-plugins-bad-1.0 >= 1.6` or `gst-plugins-good-1.0` (disable by passing `-Dvideo=false` to Meson, default enabled)
236  * Requires the `element-gtksink` feature, provided by `gstreamer1.0-gtk` on Ubuntu-based systems,
237    `gstreamer1-plugins-bad-free-gtk` on older RPM-based systems and `gstreamer1-plugins-good-gtk` on
238    newer RPM-based systems
239* `gst-libav-1.0` (disable by passing `-Dvideo=false` to Meson, default enabled)
240* `gspell-1 >= 1.2` (for spellchecking, disable by passing `-Dspellcheck=false` to Meson, default enabled)
241
242Note that the above packages are just rough estimations, the actual package names on your distribution may vary and may require additional repositories (e.g. RPMFusion in Fedora, or Packman in openSUSE)
243
244If you pass `-Dvideo=false` to the Meson script, you don't need any gstreamer dependency but won't be able to view any videos.
245
246## Copyright
247
248Cawbird is released under the GPL v3 - see [COPYING](./COPYING) for more details.
249
250The [video fallback image](data/symbolic/apps/cawbird-video-placeholder.svg) is a Creative Commons "CC BY" licensed work [by Iris Li](https://thenounproject.com/term/film-reel/20395/).
251
252## Footnotes
253
254<a name="footnote1"></a>1: [home:IBBoard:desktop](https://build.opensuse.org/project/show/home:IBBoard:desktop)
255