Server: Status overview

Created on 11 May 2020  路  19Comments  路  Source: nextcloud/server

Summary

It would be nice if in your Nextcloud you could relay your own status to other users. So they know what you are doing.

Details

A lot of modern communication platforms have statuses. Something like that would be useful for Nextcloud as well. That way you can signal that you are busy, on holiday, on site somewhere etc.

To be extended

API

DB:

  1. New table: user_status

    • id (unsigned int, not null, autoincrement)

    • user_id (string, not null)

    • status_type (string, not null) => available, busy, unavailable

    • status_icon (string) => 1 unicode character

    • message (string) => custom message

    • created_at (unsigned int, not null) => unixtime

    • clear_at (unsigned int) => unixtime

API spec (OCS):

  1. Expose user_status capability
    Req: GET /ocs/v1.php/cloud/capabilities
    Res:
{
  "ocs": {
    ...
    "data": {
      ...
      "capabilities": {
        ...
        "user_status": {
          "enabled": true
        }
      }
    }
  }
}
  1. Read all user-statuses
    Req: GET /ocs/v1.php/apps/user_status/api/v1/statuses
    Res:
{
  "ocs": {
    "meta": {
      "status": "ok",
      "statuscode": 200,
      "message": null
    },
    "data": [
      {
        "userId": "admin",
        "statusType": "busy",
        "createdAt": 1589795903
      },
      {
        "userId": "user",
        "statusType": "holiday",
        "statusIcon": "馃彎",
        "message": "On Vacation",
        "createdAt": 1589795903,
        "clearAt": 1589795904,
      }
    ]
  }
}

Allowed parameters:

  • limit
  • offset
  1. Read status of specific user:
    Req: GET /ocs/v1.php/apps/user_status/api/v1/statuses/admin
    Res:
{
  "ocs": {
    "meta": {
      "status": "ok",
      "statuscode": 200,
      "message": null
    },
    "data": {
      "userId": "admin",
      "statusType": "busy",
      "createdAt": 1589795903
    }
  }
}
  1. Read status of authenticated user:
    Req: GET /ocs/v1.php/apps/user_status/api/v1/status
    Res:
{
  "ocs": {
    "meta": {
      "status": "ok",
      "statuscode": 200,
      "message": null
    },
    "data": {
      "userId": "admin",
      "statusType": "busy",
      "createdAt": 1589795903
    }
  }
}
  1. Set a new status:
    Req: PUT /ocs/v1.php/apps/user_status/api/v1/status

  2. Clear status:
    Req: DELETE /ocs/v1.php/apps/user_status/api/v1/status

Notes on privacy:

The APIs should respect the sharing privacy settings. (e.g. only allow to fetch status within own groups, etc.)

Acceptance criteria

To be extended.

  • [x] I want to be able to see my own status overlayed on my avatar in the top right
  • [x] I want to be able to set my status
  • [x] I want to have at least the available statuses

    • [x] Available

    • [x] Busy

    • [x] Holiday

  • [x] In places where appropiat (specify @georgehrke @jancborchardt) I want to see the status of other users on the system
  • [x] I want to have an API that can be used by our mobile apps as well
1. to develop 馃捇 desktop 馃馃崗 mobile enhancement status overview

Most helpful comment

@go2s Yes, the plan is to have a "Clear status in 1 hour / 1 day / 1 week" feature.

All 19 comments

It would be nice to set a certain time span or end date for a status, e.g. "Holiday until 17.05.2020".

@go2s Yes, the plan is to have a "Clear status in 1 hour / 1 day / 1 week" feature.

Holiday

Nitpick: this is a bit specific. How about unavailable, which covers vacation, out of office and being sick

I think the reason, why someone is unavailable, provides a good value for communication, because you can express a grading. If someone is sick or on vaction, you might get no answere, but if someone is out of office, or doing homeoffice, you might get answer.

Fair enough, out of office does not mean unavailable. But being sick, public holiday and vacation can be seen as unavailable IMO :)

@go2sh You will have the ability to set a custom icon and custom message like 馃尨 On Vacation or 馃 On sick leave.

The status should really be on a lower level:

  • 馃煝 Available
  • 馃煚 Busy (e.g. in a meeting right now, but i will be available after)
  • 馃敶 Unavailable.

Ah nice, that wasn't clear to me. :-)

So for mobile it would be great to have it in:

  • propfind "nc:sharees" of files/folders, so that we can directly show it in file list
  • search for users when sharing (should be "ocs/v2.php/apps/files_sharing/api/v1/sharees")

@rullzer @jancborchardt Should the user-status be visible on public pages as well or should it only be visible to other users?

@rullzer @jancborchardt Should the user-status be visible on public pages as well or should it only be visible to other users?

O that is a good question.
For now I guess not. we already have privacy controls for the avatar. So we don't always (or by default not even) show it. So I guess for now status should not be shown on public pages. Since it can leak even more sensitive info.

Let's keep this open to track further improvements and client parity.

ToDo for a follow-up PR:

  • [x] inject user-status into share search endpoint
  • [x] The invisible icon is black on dark background when dark theme is used.
  • [x] Add Max length to input field

Notes from @jancborchardt:

  • [ ] Status indicator icon overlaid on your own avatar in the top right
  • [x] In the avatar menu which opens when you click on another person's avatar
  • [x] In Talk in the Participants list as a subline
  • [x] In sharing as a subline
  • [x] In the sharing suggestion dropdown as a subline
  • [x] In the Dashboard below the title

Followup PR: #22109

Pull-Request in Nc/Vue:https://github.com/nextcloud/nextcloud-vue/pull/1259

@georgehrke I'm starting to use vuex in our app. At times i only see the user status data in the stores state:

Bildschirmfoto von 2020-08-15 06-06-03

(note the url of the wiki app and the mixed mutations: wikis from our app and then loadStatusFromServer)

How can we isolate the two stores from each other?

@azul That is an issue in the devtools, see https://github.com/vuejs/vue-devtools/issues/430.

Vuex itself will work correctly though.

Edit: you can just disable User Status in the apps management, if it's causing too many issues for you

@georgehrke You're right - it's just in the dev tools. The issue in my code was a different one. Thanks for the hints. :smile:

Follow-up Issues:
Indicator on Top Right Avatar: https://github.com/nextcloud/server/issues/22451
Client Implementation Tracking: https://github.com/nextcloud/server/issues/22452

Was this page helpful?
0 / 5 - 0 ratings