Refresh timeline after toot while the timeline is disconnected (#4858)
To reflect status posting immediately, we've inserted the status into timelines directly. However, status insertion changes "latest status", and it means next timeline refresh only fetches statuses since the inserted status. This behavior is very bad for disconnected timeline and mobile views.
After this patch, it refreshes timeline for disconnected timelines, instead of direct insertion.
Eugen Rochko [Fri, 8 Sep 2017 10:32:22 +0000 (12:32 +0200)]
Fix language filter codes (#4841)
* Fix language filter codes
CLD3 returns BCP-47 language identifier, filter settings expect
identifiers in the ISO 639-1 format. Convert between formats,
and exclude duplicate languages from filter choices (zh-CN->zh)
Joseph Mingrone [Thu, 7 Sep 2017 01:55:06 +0000 (22:55 -0300)]
Use casecmp() instead of casecmp?() for now (#4832)
* Use casecmp() instead of casecmp?() for now
casecmp?() is only available in ruby 2.4.0. Users running earlier ruby versions
would see errors, e.g., running
RAILS_ENV=production rails mastodon:maintenance:remove_deprecated_preview_cards.
Eugen Rochko [Wed, 6 Sep 2017 17:01:28 +0000 (19:01 +0200)]
Switch to static URIs, new URI format in both protocols for new statuses (#4815)
* Decouple Status#local? from uri being nil
* Replace on-the-fly URI generation with stored URIs
- Generate URI in after_save hook for local statuses
- Use static value in TagManager when available, fallback to tag format
- Make TagManager use ActivityPub::TagManager to understand new format
- Adjust tests
* Use other heuristic for locality of old statuses, do not perform long query
* Exclude tombstone stream entries from Atom feed
* Prevent nil statuses from landing in Pubsubhubbub::DistributionWorker
* Fix URI not being saved (#4818)
* Add more specs for Status
* Save generated uri immediately
and also fix method order to minimize diff.
* Fix alternate HTML URL in Atom
* Fix tests
* Remove not-null constraint from statuses migration to speed it up
Eugen Rochko [Mon, 4 Sep 2017 16:26:33 +0000 (18:26 +0200)]
Fix some ActivityPub JSON bugs (#4796)
- Fix assumption that `url` is always a string. Handle it if it's an
array of strings, array of objects, object, or string, both for
accounts and for objects
- `sharedInbox` is actually supposed to be under `endpoints`, handle
both cases and adjust the serializer
Don't unconditionally call `preventDefault` and `stopPropagation` on all keyup events (#4777)
* UploadArea should only preventDefault for Escape
This will make accessibility for some things less effortful, since we won't have to define a prior event handler to do whatever should be happening by default.
* Remove workaround for fixed bug in SettingToggle
SettingToggle was toggling itself in response to keydown of space, and then the keyup was doing it again
Eugen Rochko [Sat, 2 Sep 2017 12:01:23 +0000 (14:01 +0200)]
Define missing JSON-LD properties (#4767)
Using _: property names is discouraged, as in the future,
canonicalization may throw an error when encountering that instead
of discarding it silently like it does now.
We are defining some ActivityStreams properties which we expect
to land in ActivityStreams eventually, to ensure that future versions
of Mastodon will remain compatible with this even once that happens.
Those would be `locked`, `sensitive` and `Hashtag`
We are defining a custom context inline for some properties which we
do not expect to land in any other context. `atomUri`, `inReplyToAtomUri`
and `conversation` are part of the custom defined OStatus context.
Eugen Rochko [Fri, 1 Sep 2017 14:07:08 +0000 (16:07 +0200)]
Make first use less overwhelming with browser permissions (#4760)
- Ask for desktop notifications after 1 minute of use instead of
instantly
- Ask for protocol handler permission after 5 minutes of use
instead of instantly
James [Thu, 31 Aug 2017 13:44:00 +0000 (06:44 -0700)]
Guarantee Subscription service first account has proper URL details (#4732)
* Guarantee Subscription service first account has proper URL details
Subscription Service potentially could break if the first user suspended
themselves, creating a situation where the urls that populate throughout
subscription service's PuSH request would cause the remote API to throw 503 errors.
Guaranteeing that the first account picked is not suspended prevents this problem.
Eugen Rochko [Wed, 30 Aug 2017 08:23:43 +0000 (10:23 +0200)]
Update status embeds (#4742)
- Use statuses controller for embeds instead of stream entries controller
- Prefer /@:username/:id/embed URL for embeds
- Use /@:username as author_url in OEmbed
- Add follow link to embeds which opens web intent in new window
- Use redis cache in development
- Cache entire embed
Eugen Rochko [Tue, 29 Aug 2017 14:11:05 +0000 (16:11 +0200)]
Serialize ActivityPub alternate link into OStatus deletes, handle it (#4730)
Requires moving Atom rendering from DistributionWorker (where
`stream_entry.status` is already nil) to inline (where
`stream_entry.status.destroyed?` is true) and distributing that.
Unfortunately, such XML renderings can no longer be easily chained
together into one payload of n items.
Akihiko Odaki [Tue, 29 Aug 2017 12:16:21 +0000 (21:16 +0900)]
Do not scroll the columns area due to redirection (#4541)
Commit 9d1f8b9d6af1d384a4dd68bc6353a2fde5735b33 scrolls the columns area
when the route changes since the user is likely to want to see the
rightmost column in such cases.
However, redirection is automatic and does not indicate users' intension.
Do not scroll the columns area due to one.