Giter Site home page Giter Site logo

nextcloud / social Goto Github PK

View Code? Open in Web Editor NEW
487.0 28.0 59.0 44.56 MB

πŸŽ‰ Social can be used for work, or to connect to the fediverse!

Home Page: https://apps.nextcloud.com/apps/social

License: GNU Affero General Public License v3.0

JavaScript 23.32% Makefile 0.14% PHP 68.19% Vue 6.78% Shell 0.26% CSS 0.06% TypeScript 1.25%
nextcloud nextcloud-app activitypub social-network federation mastodon fediverse open-source social nextcloud-social

social's Introduction

Nextcloud Social

πŸŽ‰ Nextcloud becomes part of the federated social networks!

⚠️ This application is currently in beta stage.

For more information about our motivation and goals, read the announcement blog.

The app is in beta stage, so it’s time for you to get involved! πŸ‘©β€πŸ’»

For a roadmap, see our development milestones - feel free to pick up any of the tasks which are not yet in progress!

Emojis

Please follow this guide to enable the Emojis in the Social app.

Reset app

If you want to reset all Social app data e.g. to change the domain used for Social, you can use occ social:reset (For how to use occ commands see documentation: using the occ command).

Development setup

  1. ☁ Clone the app into the apps folder of your Nextcloud: git clone https://github.com/nextcloud/social.git
  2. πŸ‘©β€πŸ’» Run make dev-setup to install the dependencies
  3. πŸ— To build the Javascript whenever you make changes, run make build-js
  4. βœ… Enable the app through the app management of your Nextcloud
  5. πŸŽ‰ Partytime! Help fix some issues and review pull requests πŸ‘

social's People

Contributors

ahangarha avatar artificialowl avatar artonge avatar blizzz avatar carlschwan avatar christophwurst avatar commanderroot avatar dependabot-preview[bot] avatar dependabot-support avatar dependabot[bot] avatar emersonkfuri avatar icewind1991 avatar jancborchardt avatar jospoortvliet avatar juliushaertl avatar mashedkeyboard avatar max-nextcloud avatar mnd avatar morrisjobke avatar nextcloud-bot avatar nickvergessen avatar rakekniven avatar rubo77 avatar rullzer avatar silopolis avatar skjnldsv avatar stcyr avatar szaimen avatar valdnet avatar violoncelloch avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

social's Issues

Sidebar sections

Edit @jancborchardt summing up the entries we want:

  • 🏠 Home: Only accounts you follow, including notifications (!), and including your own posts too
  • πŸ”” Notifications: @mentions, new followers, people liking or reposting your posts or things you were mentioned in, you being tagged in pictures etc. ("Activity" as word for this is easy to misunderstand as it’s less specific)
  • πŸ”’ Direct messages: Private 1-to-1 or group messages. (It seems better to separate it from Notifications so it’s clear what is private and what is not.)
  • πŸ‘€ Profile: Own user profile, where you can get to your own posts, following, followers and favorites. We could use the current profile picture as icon, and instead of "Profile" display the user name (and maybe handle as soon as we have a detail row), so that you know how you are displayed.
  • dividing whitespace
  • ☁ Local timeline: All public posts (or whichever you are set to be able to view) from the current Nextcloud instance.
  • 🌐 Global timeline: All public posts (or whichever you are set to be able to view) from the current Nextcloud instance and known external instances of ActivityPub.

The sidebar entries and their contents still needs some discussion. I propose to have the following entries as a first start:

Timeline: Should be the personal timeline of the user (What home is on Mastodon) containing posts of accounts i follow.
Mentions: All entries of the personal timeline that mention me
Direct messages: Messages of type direct
Profile: Own user profile
Friends: Combined list of followers and following accounts

Mastodon uses the word timeline for a global stream of all posts, but I think we should rather go with the approach mentioned above. Maybe we could add an extra section like "global timeline" to have that feature as well.

@daita This is how I understood it. @jancborchardt please have a look if those sections make sense to you like this.

Post composition

When writing a post users should be able to:

  • Mention others social ids with autocompletion
  • Insert an emoji using a picker
  • Upload a file
  • Attach a file from Nextcloud

Rendered posts should highlight/render:

  • Link user mentions to the account page
  • Link URLs
  • Display images that were added as URL in the post
  • Highlight hashtags and link them to a search?

Bold ones are mandatory for the first release in my oppinion.

TODO first alpha 0.1 πŸ₯š

See 0.1 πŸ₯š milestone at https://github.com/nextcloud-gmbh/social/milestone/1

Technical debt to sort out before alpha release:

  • Prune node modules from history for quick cloning: #65 (@juliushaertl)
  • Use migrations for database #11
  • Using sqlite is broken #55

Bugs & features:

  • Security: Check ids of object during an import (to avoid instance Z to edit information regarding instance Y). (@daita)
  • Security: Check parents/sons chain on external request (import) (@daita)
  • Security: Block any remote request while the app is not configured. (@daita)
  • Security: Filter content from all request (html tags ?) (@daita)
  • Security: Filter content based on mime type when caching document (jpeg/png/gif) (@daita)
  • Improvement: Managing cache (cron) (@daita)
  • Improvement: Manage (network) request. Based on the number of request during the creation of the Post. Generating a queue. Including a retry-on-fail. (@daita)
  • UX: testing the cloud adress, testing the webfinger (mod_rewrite) during the installation process #75 (@juliushaertl)
  • UI: Search for a remote account #76 (@juliushaertl)
  • UI: follow/unfollow account (@juliushaertl)
  • UI: Responsive design #98 (@juliushaertl)
  • UI: Profile view with followers/following accounts #99 (@juliushaertl)

Small fixes/checks (@daita):

  • Check the propagation of the privacy level of InstancePaths on followers (followers-only)
  • Testing the queue on real network issues
  • /apps/social/@nonexistantuser should returns an error
  • /apps/social/api/v1/actor/avatar?id=nonexistantuser - should returns a better error
  • webfinger must returns an error is no account
  • check if all request with IdString can/must be set with CS=false
  • setTimeout on different type of requests/instancePath
  • Bug: Do not create Post if no field is filled (example case: direct message to a non existant user)
  • Create a log file in appdata containing request

Out of scope

  • Feature: Like on a Post #104
  • replyTo - check privacy level when replying (UI: @juliushaertl for 0.2 ?)
  • Feature: Retweet Repeat on a Post #105
  • Feature: Manage attachment (at least image and link) #106 #107
  • Manage local account @account

SQL error when enabling app

Got this when updating to current master, this happens when enabling the app in the apps management after the update to Nextcloud 16 server master:

An exception occurred while executing 'ALTER TABLE oc_social_server_follows
ADD COLUMN "follow_id" VARCHAR(127) NOT NULL':
SQLSTATE[HY000]: General error: 1
Cannot add a NOT NULL column with default value NULL

Any idea @daita @juliushaertl?

(Yes, I use SQLite on my local dev instance, as do many others. ;)

Shortcut in user menu to follow on Social

Just like we have shortcuts to mail a person and Talk to a person via the user menu when you click on their name/avatar, we should have something like "Follow on Social":
follow on social
Same for the Contacts menu in the header where the actions are listed too. Once you follow a person, it could switch from "Follow First name on Social" to "Posts on Social".

This would be great already for first alpha too because it’s nice integration with the rest of Nextcloud. Is that possible @juliushaertl @georgehrke @ChristophWurst? :)

"Skipping optional dependency" in make dev-setup

It’s not critical, but it would be nice to have no scary-looking warnings at all in any of the setup steps:

~/nextcloud/apps/social$ make dev-setup 
rm -f js/social.js
rm -f js/social.js.map
rm -rf node_modules
npm install
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

Could we get rid of those npm WARN lines? @juliushaertl

Add checks for server setup

To properly communicate with other ActivityPub servers, we need to check if the following settings are properly setup:

  • A proper server address is set
  • Rewrite with htaccess (is .well-known/webfinger reachable)

@daita Feel free to add to the list, if i miss something.

Current restrictions due to hardcoded url in database

  • Creating the account is using overwrite.cli.url, we probably should just use the domain the user is currently using when browsing the social app for the first time
  • The app requires the webserver to be configured to work without index.php. Those should be set dynamically depending on the configuration

@daita Don't we have any possibility to just keep the domain out of the database and add the domain prefix for the activity pub urls dynamically on each request?

E.g. we have cloud1.example.com and cloud2.example.com which are both trusted domains of the same Nextcloud instance.

Request https://cloud1.example.com/index.php/apps/social/@admin would return

{
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/security/v1"
  ],
  "id": "https://cloud1.example.com/index.php/apps/social/@admin",
  "type": "Person",
  "url": "https://cloud1.example.com/index.php/apps/social/@admin",
  "aliases": [
    "@admin",
    "users/admin"
  ],
  "preferredUsername": "admin",
  "name": "",
  "inbox": "https://cloud1.example.com/index.php/apps/social/@admin/inbox",
  "outbox": "https://cloud1.example.com/index.php/apps/social/@admin/outbox",
  "account": "",
  "following": "https://cloud1.example.com/index.php/apps/social/@admin/following",
  "followers": "https://cloud1.example.com/index.php/apps/social/@admin/followers",
  "endpoints": {
    "sharedInbox": "https://cloud1.example.com/index.php/apps/social/inbox"
  },
  "publicKey": {
    "id": "https://cloud1.example.com/index.php/apps/social/@admin#main-key",
    "owner": "https://cloud1.example.com/index.php/apps/social/@admin",
    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0vtHX723CgzuL1MmSr/0\nso5seUsbfUQn8t7OZiOdxCD3o9uX08P3YlkNKirf/C0nruXTgxXLXPc7j5zTy9U7\nhl3apLMOZ83YPqxVVD+3lJwHRuTVEkwdcPYaYIlC3QlgrUC4i+WLy7G0E4jERc+L\n4Rhdv1pQ0xQcRQh36w9lAkmkX5/AaTcdRKK/93ZqCcdq6ZQcawYKRe091aNKyjZe\nkVGjKB90Q8ra+WCaQTnKWafh+lZ5gRHbkKZr0BoN2BxqkaxysS/IvR7esMuDLHwI\nzdgVj8EUf7eghG9ibdXWb6icedR2u6+9akIEpsnADko5MDLSI2JRZh6lQyXnWEgs\nKwIDAQAB\n-----END PUBLIC KEY-----\n"
  }
}

Request https://cloud2.example.com/index.php/apps/social/@admin would return

{
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/security/v1"
  ],
  "id": "https://cloud2.example.com/index.php/apps/social/@admin",
  "type": "Person",
  "url": "https://cloud2.example.com/index.php/apps/social/@admin",
  "aliases": [
    "@admin",
    "users/admin"
  ],
  "preferredUsername": "admin",
  "name": "",
  "inbox": "https://cloud2.example.com/index.php/apps/social/@admin/inbox",
  "outbox": "https://cloud2.example.com/index.php/apps/social/@admin/outbox",
  "account": "",
  "following": "https://cloud2.example.com/index.php/apps/social/@admin/following",
  "followers": "https://cloud2.example.com/index.php/apps/social/@admin/followers",
  "endpoints": {
    "sharedInbox": "https://cloud2.example.com/index.php/apps/social/inbox"
  },
  "publicKey": {
    "id": "https://cloud2.example.com/index.php/apps/social/@admin#main-key",
    "owner": "https://cloud2.example.com/index.php/apps/social/@admin",
    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0vtHX723CgzuL1MmSr/0\nso5seUsbfUQn8t7OZiOdxCD3o9uX08P3YlkNKirf/C0nruXTgxXLXPc7j5zTy9U7\nhl3apLMOZ83YPqxVVD+3lJwHRuTVEkwdcPYaYIlC3QlgrUC4i+WLy7G0E4jERc+L\n4Rhdv1pQ0xQcRQh36w9lAkmkX5/AaTcdRKK/93ZqCcdq6ZQcawYKRe091aNKyjZe\nkVGjKB90Q8ra+WCaQTnKWafh+lZ5gRHbkKZr0BoN2BxqkaxysS/IvR7esMuDLHwI\nzdgVj8EUf7eghG9ibdXWb6icedR2u6+9akIEpsnADko5MDLSI2JRZh6lQyXnWEgs\nKwIDAQAB\n-----END PUBLIC KEY-----\n"
  }
}

Adding images to posts

People should be able to upload images to their posts. Just like we have in the Talk app, with a βž• button (or πŸ–Ό) which then shows you:

  • ⬆ Upload from device
  • πŸ“ Add from Nextcloud

Reporting & muting

Similar to #38 (blocking), we need to think about having a report functionality like all big social network platforms have, and how to handle it considering the decentralized nature of the network. This would be for spam, hate speech, harrassment and the like.

Here is documentation on how Mastodon does it: https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/User-guide.md#reporting-toots-or-users

Also a relevant article: https://www.theverge.com/2018/8/31/17801404/mastodon-harassment-wil-wheaton-mobs-twitter

Twitter rival Mastodon isn’t safe from online mobs either
The mass reporting of actor Wil Wheaton prompts the platform to examine its moderation tools

And an additional analysis: https://nolanlawson.com/2018/08/31/mastodon-and-the-challenges-of-abuse-in-a-federated-system/

Also compare how it looks like on Twitter. They already have an "I don’t like this Tweet" option which I guess also helps not have people mass report if they just disagree:
twitter menu

Which then shows this:
twitter dont like

And if you report, you get this dialog for further clarification:
twitter reporting

Add notifications stream

From #34

  • πŸ”” Notifications: @mentions, new followers, people liking or reposting your posts or things you were mentioned in, you being tagged in pictures etc. ("Activity" as word for this is easy to misunderstand as it’s less specific)

Issue with the @accounts in post

Tested on firefox

  • search should only be made with an at-least-one-char length string.
  • When writing a post, as I search for an account it displays the account in the box. Once validated only the written part of the name of the account is available in the post.
  • The post is sent when selecting the type of the post (public/direct/...)

public pages ?

For federation, do we need public pages, that returns information about

  • an account,
  • following/followers
  • public post

If so, we would need some design.

Federation

How to manage federation ?

  • Admin add federated instance of Nextcloud to a list
  • every one can federated and share
  • both with option

Responsive design

Currently the design only works on desktop. All content elements should probably be max-width: 100% to make them responsive.

On smaller screen like tablet:
smaller screen

On mobile:
social on mobile

Keyboard accessibility: emoji picker and user profile tabs

Everything else seems fine at the moment, but:

  • The emoji-picker is not tab-focusable. (To then open it with enter.)
  • The tabs on the personal profile page are focusable, but don’t give any feedback. Should get a dark line below like in the files sidebar probably?

Ability add a comment when Boosting a post

Just like retweeting / retooting, people should be able to "Repeat" posts. This will embed the original post on your timeline, and up the repeat count on the original post.

As a second step, you could be able to add a comment in addition to the repeat, like on Twitter.

Fetch existing posts from remote accounts

Right now, when following a remote account, messages from the past will not appear in the stream. We somehow should fetch the message history and add it to the notes database, so they will be shown in the UI as well.

Issues when creating a new post

@daita Can you have a look at this:

  • When adding a invalid @ mention i get aOCA\Social\Exceptions\InvalidResourceException in lib/Service/ActivityPub/PersonService.php:166
    We should not fail hard if the user enters a social id that doesn't exist
    Data sent: {"data":{"content":"@[email protected]Β Test Foo @abc1","to":["[email protected]","abc1"],"type":"public"}}

  • After creating a note a Note object should be returned, in the same way we get it from the timeline endpoint

Exception on creating the actor

@daita

Nachricht: json_decode() expects parameter 1 to be string, boolean given
Datei: /var/www/html/apps-extra/social/lib/Service/CurlService.php
Zeile: 76

Trace
#0 /var/www/html/apps-extra/social/lib/Service/CurlService.php(76): json_decode(false, true)
#1 /var/www/html/apps-extra/social/lib/Service/InstanceService.php(112): OCA\Social\Service\CurlService->request(Object(daita\MySmallPhpTools\Model\Request))
#2 /var/www/html/apps-extra/social/lib/Service/ActivityPub/PersonService.php(109): OCA\Social\Service\InstanceService->retrieveObject('http://localhos...')
#3 /var/www/html/apps-extra/social/lib/Service/ActorService.php(183): OCA\Social\Service\ActivityPub\PersonService->getFromId('http://localhos...', true)
#4 /var/www/html/apps-extra/social/lib/Controller/NavigationController.php(117): OCA\Social\Service\ActorService->createActor('admin2', 'admin2')
#5 /var/www/html/lib/private/AppFramework/Http/Dispatcher.php(166): OCA\Social\Controller\NavigationController->navigate('')
#6 /var/www/html/lib/private/AppFramework/Http/Dispatcher.php(99): OC\AppFramework\Http\Dispatcher->executeController(Object(OCA\Social\Controller\NavigationController), 'navigate')
#7 /var/www/html/lib/private/AppFramework/App.php(118): OC\AppFramework\Http\Dispatcher->dispatch(Object(OCA\Social\Controller\NavigationController), 'navigate')
#8 /var/www/html/lib/private/AppFramework/Routing/RouteActionHandler.php(47): OC\AppFramework\App::main('OCA\\Social\\Cont...', 'navigate', Object(OC\AppFramework\DependencyInjection\DIContainer), Array)
#9 [internal function]: OC\AppFramework\Routing\RouteActionHandler->__invoke(Array)
#10 /var/www/html/lib/private/Route/Router.php(297): call_user_func(Object(OC\AppFramework\Routing\RouteActionHandler), Array)
#11 /var/www/html/lib/base.php(987): OC\Route\Router->match('/apps/social/')
#12 /var/www/html/index.php(42): OC::handleRequest()
#13 {main}

Improvements for privacy controls

From #18

  • Currently seems not specifically sorted? Just like we do for the privacy controls in the personal settings, we should sort this by most private first to most public last:
    privacy settings email etc
    It seems though that there’s not really a continuum there? Like the mentioned users don’t have to be followers, or you could post it to followers but not on the public timeline? So are these correctly labeled?

  • Then also like for the privacy controls, the currently selected option (the default seems public) should be highlighted in the list via full opacity and the blue bar on the left.

  • The last chosen post visibility option should be remembered. So if you always only want to post to followers, you pick that once and all subsequent posts default to that, unless changed again.

  • It will look better if the box is centered below the button instead of off to the left.

  • Should we maybe label the button depending on the option like "Post publicly" or "Post to followers"? That would be good to know you are in control.

Originally posted by @jancborchardt in #18 (comment)

Hashtags

We should make it possible to use hashtags in posts. They should then be highlighted, clickable and linked to a search.

(As @juliushaertl mentioned in #10 )

Account locking (follow after approval)

Right now, the confirmation of a new follower is automatic, an option should be added for an account to 'lock' the account, meaning a manual confirmation needs to be perfomed when someone wants to follow you.

Summary field length is probably to short

@daita Maybe we shouldn't limit this, unfortunately i couldn't find any standard specs about the summary.

message: "An exception occurred while executing 'INSERT INTO `oc_social_cache_actors` (`id`, `account`, `type`, `local`, `following`, `followers`, `inbox`, `shared_inbox`, `outbox`, `featured`, `url`, `preferred_username`, `name`, `summary`, `public_key`, `source`, `creation`, `icon_id`) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params ["https:\/\/mastodon.xyz\/users\/nextcloud", "[email protected]", "Person", "0", "https:\/\/mastodon.xyz\/users\/nextcloud\/following", "https:\/\/mastodon.xyz\/users\/nextcloud\/followers", "https:\/\/mastodon.xyz\/users\/nextcloud\/inbox", "https:\/\/mastodon.xyz\/inbox", "https:\/\/mastodon.xyz\/users\/nextcloud\/outbox", "https:\/\/mastodon.xyz\/users\/nextcloud\/collections\/featured", "https:\/\/mastodon.xyz\/@nextcloud", "nextcloud", "Nextcloud \ud83d\udcf1\u2601\ufe0f\ud83d\udcbb", "<p>A safe home for all your data, community-driven &amp; open source!<br \/><a href=\"https:\/\/nextcloud.com\" rel=\"nofollow noopener\" target=\"_blank\"><span class=\"invisible\">https:\/\/<\/span><span class=\"\">nextcloud.com<\/span><span class=\"invisible\"><\/span><\/a><br \/>Join us at <a href=\"https:\/\/help.nextcloud.com\" rel=\"nofollow noopener\" target=\"_blank\"><span class=\"invisible\">https:\/\/<\/span><span class=\"\">help.nextcloud.com<\/span><span class=\"invisible\"><\/span><\/a> and <a href=\"https:\/\/github.com\/nextcloud\" rel=\"nofollow noopener\" target=\"_blank\"><span class=\"invisible\">https:\/\/<\/span><span class=\"\">github.com\/nextcloud<\/span><span class=\"invisible\"><\/span><\/a> \ud83d\ude0a<\/p>", "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzydjBvhTuNNgOUTTz450\nl4RiORVw4XU2gMGqvB5QtYGuLkBDU2BZR41N\/BVoYX3exNYei35kO2P\/vAFBZ6NO\nQIuQXbrd1Gy8FF9Hv6Te\/n8KPlRN76RsMVfml+CN6COTjgl+sXJogzTyFcPLxoZS\nJJbP64Yw3p0b5y3JNwrVuQPLBnjcjuHFKuxU5NXHgTZak4U4WCYdIE3FNw9\/Xiyc\nacpo1GoZabMzJupGGtOWi8FL64EchvtRkvmyhb0Ae1GVnDY6Y1xhsbTEmrwSkDH4\nlSDIkdxxQMZOo4Y8+UyMJamzlxwm2kmfFebSjVhwQmvYLLEzvSfPAA0q6mI7uuin\nEQIDAQAB\n-----END PUBLIC KEY-----\n", "{\"@context\":[\"https:\/\/www.w3.org\/ns\/activitystreams\",\"https:\/\/w3id.org\/security\/v1\",{\"manuallyApprovesFollowers\":\"as:manuallyApprovesFollowers\",\"sensitive\":\"as:sensitive\",\"movedTo\":{\"@id\":\"as:movedTo\",\"@type\":\"@id\"},\"Hashtag\":\"as:Hashtag\",\"ostatus\":\"http:\/\/ostatus.org#\",\"atomUri\":\"ostatus:atomUri\",\"inReplyToAtomUri\":\"ostatus:inReplyToAtomUri\",\"conversation\":\"ostatus:conversation\",\"toot\":\"http:\/\/joinmastodon.org\/ns#\",\"Emoji\":\"toot:Emoji\",\"focalPoint\":{\"@container\":\"@list\",\"@id\":\"toot:focalPoint\"},\"featured\":{\"@id\":\"toot:featured\",\"@type\":\"@id\"},\"schema\":\"http:\/\/schema.org#\",\"PropertyValue\":\"schema:PropertyValue\",\"value\":\"schema:value\"}],\"id\":\"https:\/\/mastodon.xyz\/users\/nextcloud\",\"type\":\"Person\",\"following\":\"https:\/\/mastodon.xyz\/users\/nextcloud\/following\",\"followers\":\"https:\/\/mastodon.xyz\/users\/nextcloud\/followers\",\"inbox\":\"https:\/\/mastodon.xyz\/users\/nextcloud\/inbox\",\"outbox\":\"https:\/\/mastodon.xyz\/users\/nextcloud\/outbox\",\"featured\":\"https:\/\/mastodon.xyz\/users\/nextcloud\/collections\/featured\",\"preferredUsername\":\"nextcloud\",\"name\":\"Nextcloud \\ud83d\\udcf1\\u2601\\ufe0f\\ud83d\\udcbb\",\"summary\":\"<p>A safe home for all your data, community-driven &amp; open source!<br \/><a href=\\\"https:\/\/nextcloud.com\\\" rel=\\\"nofollow noopener\\\" target=\\\"_blank\\\"><span class=\\\"invisible\\\">https:\/\/<\/span><span class=\\\"\\\">nextcloud.com<\/span><span class=\\\"invisible\\\"><\/span><\/a><br \/>Join us at <a href=\\\"https:\/\/help.nextcloud.com\\\" rel=\\\"nofollow noopener\\\" target=\\\"_blank\\\"><span class=\\\"invisible\\\">https:\/\/<\/span><span class=\\\"\\\">help.nextcloud.com<\/span><span class=\\\"invisible\\\"><\/span><\/a> and <a href=\\\"https:\/\/github.com\/nextcloud\\\" rel=\\\"nofollow noopener\\\" target=\\\"_blank\\\"><span class=\\\"invisible\\\">https:\/\/<\/span><span class=\\\"\\\">github.com\/nextcloud<\/span><span class=\\\"invisible\\\"><\/span><\/a> \\ud83d\\ude0a<\/p>\",\"url\":\"https:\/\/mastodon.xyz\/@nextcloud\",\"manuallyApprovesFollowers\":false,\"publicKey\":{\"id\":\"https:\/\/mastodon.xyz\/users\/nextcloud#main-key\",\"owner\":\"https:\/\/mastodon.xyz\/users\/nextcloud\",\"publicKeyPem\":\"-----BEGIN PUBLIC KEY-----\\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzydjBvhTuNNgOUTTz450\\nl4RiORVw4XU2gMGqvB5QtYGuLkBDU2BZR41N\/BVoYX3exNYei35kO2P\/vAFBZ6NO\\nQIuQXbrd1Gy8FF9Hv6Te\/n8KPlRN76RsMVfml+CN6COTjgl+sXJogzTyFcPLxoZS\\nJJbP64Yw3p0b5y3JNwrVuQPLBnjcjuHFKuxU5NXHgTZak4U4WCYdIE3FNw9\/Xiyc\\nacpo1GoZabMzJupGGtOWi8FL64EchvtRkvmyhb0Ae1GVnDY6Y1xhsbTEmrwSkDH4\\nlSDIkdxxQMZOo4Y8+UyMJamzlxwm2kmfFebSjVhwQmvYLLEzvSfPAA0q6mI7uuin\\nEQIDAQAB\\n-----END PUBLIC KEY-----\\n\"},\"tag\":[],\"attachment\":[],\"endpoints\":{\"sharedInbox\":\"https:\/\/mastodon.xyz\/inbox\"},\"icon\":{\"type\":\"Image\",\"mediaType\":\"image\/png\",\"url\":\"https:\/\/6-28.mastodon.xyz\/accounts\/avatars\/000\/059\/736\/original\/8aa28f66dd14ec84.png\"},\"image\":{\"type\":\"Image\",\"mediaType\":\"image\/jpeg\",\"url\":\"https:\/\/6-28.mastodon.xyz\/accounts\/headers\/000\/059\/736\/original\/5017adf00cac8ece.jpg\"},\"_address\":\"mastodon.xyz\",\"_path\":\"\/users\/nextcloud\",\"_code\":200,\"_host\":\"mastodon.xyz\"}", "2018-11-28 10:37:20", "https:\/\/local.dev.bitgrid.net\/index.php\/documents\/g\/91669a6a-aa69-4b83-bdac-f084c269b81b"]:↡↡SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'summary' at row 1"

Twemoji folder duplicated

They are in the twemoji folder, and then the same 2841 svg files seem to be in the twemoji β†’ svg folder?

@juliushaertl I guess we just need the twemoji folder, and the svg subfolder would also be a candidate for removing from history like node_modules? #65

@MorrisJobke @rullzer @skjnldsv if you have tips on how to completely remove a folder from history to keep repo size low, please advise. :)

Search

It should be possible to search for anything:

  • words in posts
  • users
  • hashtags #108

Name of a 'post' ?

Mastodon define the 'Note' as toot
I used mood in mood

How should we name them in Social ?

Ability to like/favorite posts

The ability to like/heart/favorite posts, which shows publicly on the liked post.

Also should show in a navigation entry "Favorites"/"Likes", whatever we would call it.

partial completion

if I write @[email protected] and want to edit in the middle, to switch to @example.com like @cloud.example.com the frontend will search for @account@clou*

The frontend only search on chars from the left of the cursor even if there is more on the right

Show link embeds in posts

Just like on Twitter, links in a post should automatically be shown with a little embed from the meta properties:
twitter link embed

On a post with multiple links, it shows one of the links (we have to check if it’s the first or last one).

Blocking

To combat harrassment or generally ignoring certain accounts, we should allow people to block other accounts.

This would then result in them not being visible at all. No posts, no reposts, not in search, not in the activities/mentions, not in hashtag lists, etc.

Using sqlite is broken

{"status":-1,"exception":"Doctrine\\DBAL\\Exception\\DriverException",
"message":"An exception occurred while executing
'SELECT \"sn\".\"id\", \"sn\".\"to\", \"sn\".\"to_array\", \"sn\".\"cc\", \"sn\".\"bcc\", \"sn\".\"content\", \"sn\".\"summary\", \"sn\".\"published\", \"sn\".\"published_time\", \"sn\".\"attributed_to\", \"sn\".\"in_reply_to\", \"sn\".\"source\", \"sn\".\"local\", \"sn\".\"instances\", \"sn\".\"creation\"
FROM \"oc_social_server_notes\" \"sn\"
RIGHT JOIN \"oc_social_server_follows\" \"f\"
ON (\"sn\".\"to\" = \"f\".\"follow_id\")
OR (\"sn\".\"to_array\"

LIKE (? || (\"f\".\"follow_id\" || ?))
ESCAPE '\\')
OR (\"sn\".\"cc\"
LIKE (:dcValue3 || (\"f\".\"follow_id\" || :dcValue4))
ESCAPE '\\')
OR (\"sn\".\"bcc\"
LIKE (:dcValue5 || (\"f\".\"follow_id\" || :dcValue6))
ESCAPE '\\')
WHERE (\"f\".\"actor_id\" = ?)
AND (\"sn\".\"published_time\" \u003C ?)

ORDER BY \"published_time\" desc
LIMIT 5' with params [\"%\\\"\", \"\\\"%\", \"https:\\\/\\\/local.dev.bitgrid.net\\\/index.php\\\/apps\\\/social\\\/@admin\", \"2018-11-26 13:14:01\"]:\n\n

SQLSTATE[HY000]: General error: 1
RIGHT and FULL OUTER JOINs are not currently supported"}

@daita General error: 1 RIGHT and FULL OUTER JOINs are not currently supported

Issues with actor details

  • The following/followers endpoints still miss the details about the currrent user being a follower or not
  • The count of followers/following for /api/v1/account/{username}/info is always 0

from #99

frontend UX

We need to start some editing on the frontend:

  • On user's first use of the Social app, we need an empty screen that ask for a username (no space and let's start with only numeric/alpha chars). Example if my username is maxence my ActivityPub handle will be @[email protected]

  • Once the username defined, we need to add a way to post something from the UI, also to display posts (post should be displayed in a timeline and in some notification)

Get information about following/followers

To properly allow following/follower listing and adding a follow button to the frontend we will need:

  • An indicator field if the current user is following an actor on the actor results (search/info)
  • An endpoint to fetch the list of all actors that follow/are followed by a given account

First steps

There’s a mockup for how the Social app could look in the repository:

  • I put the first part in the repository, based on the vue example app, it already has the default navigation
  • @daita you are focusing on how to link to ActivityPub? You could start by just putting the posts in the content area
  • The content view in the mockup is based on the Talk app. We could reuse what is done there and standardize. cc @skjnldsv @juliushaertl
  • A basic start would be to show messages from all the people in that timeline, and for added federation the posts of our Mastodon account: https://mastodon.xyz/@nextcloud
  • Then afterwards do more dynamic stuff like search, following, unfollowing etc.
  • Liking, repeating, replying and such is definitely still far in the future. ;)

What do you think?

Emoji picker accessibility keyboard navigation issues

  • When you type in the search field and then press enter, the first emoji should automatically be inserted. (Currently you need to tab and then press enter.)
  • After inserting an emoji like this, the picker should automatically be closed with a space inserted after it so you can continue typing.

Is that possible? This will be very useful for everyone using the emoji picker. :)

Originally posted by @jancborchardt in #103 (comment)

What is up with autoload.php?

Is there a reason we have this strange autoload.php file?

With proper namespacing our autoloader should be able to handle that all just fine.

Emoji picker and post privacy popup overlap

Open the post privacy picker and then the emoji picker, you get this:
emoji picker overlap

Whenever you open one, the other should close. The issue seems to be with the post privacy picker, because that doesn’t close when you click outside of it, while the emoji picker does.

@juliushaertl

Local actors not added to the cache

Steps to reproduce:

  1. Create a new user
  2. Login as that user
  3. Open the social app

@daita Maybe we should try to avoid not null constraints for entries where it isn't really important to have a value?

An exception occurred while executing 'INSERT INTO `oc_social_cache_actors` (`id`, `account`, `type`, `local`, `following`, `followers`, `inbox`, `shared_inbox`, `outbox`, `featured`, `url`, `preferred_username`, `name`, `summary`, `public_key`, `source`, `creation`) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params ["https:\/\/local.dev.bitgrid.net\/index.php\/apps\/social\/@admin", "[email protected]", "Person", "1", "https:\/\/local.dev.bitgrid.net\/index.php\/apps\/social\/@admin\/following", "https:\/\/local.dev.bitgrid.net\/index.php\/apps\/social\/@admin\/followers", "https:\/\/local.dev.bitgrid.net\/index.php\/apps\/social\/@admin\/inbox", "https:\/\/local.dev.bitgrid.net\/index.php\/apps\/social\/inbox", "https:\/\/local.dev.bitgrid.net\/index.php\/apps\/social\/@admin\/outbox", "", "https:\/\/local.dev.bitgrid.net\/index.php\/apps\/social\/@admin", "admin", "", "", "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHUFcWRKw4WaUYuz2OR2\nWX1kgJAqH8PylUnDzqeFDl7Qyled\/orowxGrbmQQP+xe6BqMZMOw9FJO5MWuNmdD\nB4YibM76XUVCrPY5VvuQysbbZlqO0Etp1oEKbfTK3RVITry5eEO4K9C9Iojo1O6m\ntygdKPgWVlWlwjByvN5wIw1Irb9kwl+yrN\/XxWSX6N2fXVgPl0mJQA58B6dmY\/DW\nqMX7h2JONpCpFHliAih6rykyUe+AWZ8fVH87R3A4+v9wK1zTpyXyBehYS2OYP6ik\nSOVkocYTSIr+bi6FwxzRVyAx5ltR5ZKByIDjCGoViISw\/J4Nh8VDWeqI4FU8wuBK\n1wIDAQAB\n-----END PUBLIC KEY-----\n", "{\"@context\":[\"https:\/\/www.w3.org\/ns\/activitystreams\",\"https:\/\/w3id.org\/security\/v1\"],\"id\":\"https:\/\/local.dev.bitgrid.net\/index.php\/apps\/social\/@admin\",\"type\":\"Person\",\"url\":\"https:\/\/local.dev.bitgrid.net\/index.php\/apps\/social\/@admin\",\"local\":true,\"aliases\":[\"https:\/\/local.dev.bitgrid.net\/index.php\/apps\/social\/@admin\",\"https:\/\/local.dev.bitgrid.net\/index.php\/apps\/social\/users\/admin\"],\"preferredUsername\":\"admin\",\"name\":\"\",\"inbox\":\"https:\/\/local.dev.bitgrid.net\/index.php\/apps\/social\/@admin\/inbox\",\"outbox\":\"https:\/\/local.dev.bitgrid.net\/index.php\/apps\/social\/@admin\/outbox\",\"account\":\"[email protected]\",\"following\":\"https:\/\/local.dev.bitgrid.net\/index.php\/apps\/social\/@admin\/following\",\"followers\":\"https:\/\/local.dev.bitgrid.net\/index.php\/apps\/social\/@admin\/followers\",\"endpoints\":{\"sharedInbox\":\"https:\/\/local.dev.bitgrid.net\/index.php\/apps\/social\/inbox\"},\"publicKey\":{\"id\":\"https:\/\/local.dev.bitgrid.net\/index.php\/apps\/social\/@admin#main-key\",\"owner\":\"https:\/\/local.dev.bitgrid.net\/index.php\/apps\/social\/@admin\",\"publicKeyPem\":\"-----BEGIN PUBLIC KEY-----\\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHUFcWRKw4WaUYuz2OR2\\nWX1kgJAqH8PylUnDzqeFDl7Qyled\/orowxGrbmQQP+xe6BqMZMOw9FJO5MWuNmdD\\nB4YibM76XUVCrPY5VvuQysbbZlqO0Etp1oEKbfTK3RVITry5eEO4K9C9Iojo1O6m\\ntygdKPgWVlWlwjByvN5wIw1Irb9kwl+yrN\/XxWSX6N2fXVgPl0mJQA58B6dmY\/DW\\nqMX7h2JONpCpFHliAih6rykyUe+AWZ8fVH87R3A4+v9wK1zTpyXyBehYS2OYP6ik\\nSOVkocYTSIr+bi6FwxzRVyAx5ltR5ZKByIDjCGoViISw\/J4Nh8VDWeqI4FU8wuBK\\n1wIDAQAB\\n-----END PUBLIC KEY-----\\n\"}}", "2018-11-28 20:59:27"]:

SQLSTATE[HY000]: General error: 1364 Field 'icon_id' doesn't have a default value

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.