nextcloud / deck

🗂 Kanban-style project & personal management tool for Nextcloud, similar to Trello
https://apps.nextcloud.com/apps/deck
GNU Affero General Public License v3.0
1.22k stars 278 forks source link

Contents synchronisation / Live update for changes #256

Closed 9662 closed 1 year ago

9662 commented 7 years ago

Just putting this up for discussion, this is neither a bug report nor necessarily a feature request.

Steps to reproduce

  1. Access the Deck application on computer Alpha as user Albert
  2. Access the Deck application on computer Beta as user Albert
  3. Access the Deck application on computer Gamma as user Bettie
  4. Have Albert@Alpha make some changes, e.g.:
    • CRUD operation on deck
    • CRUD operation on board
    • CRUD operation on card
    • CRUD operation on tag

Expected behaviour

Either:

Actual behaviour

Different users have inconsistent views of the Deck state.

Current status

juliusknorr commented 7 years ago

@9662 Yes, this is something we should have. Since we have no way of pushing information to the client we need some kind of polling mechanism like the notifications app does to check if there were changes on a board and update it then.

9662 commented 7 years ago

On second thought, maybe this should be considered at a higher level in NC? After all, the same problem is evident in other applications, e.g., if viewing a given director and a file is uploaded to / deleted from it, the changes are not reflected until a manual refresh. Same with contacts, calendar...

A generic update framework (piggybacking on notifications?) might make sense, or not? I am not familiar enough with NC's architecture to answer that question.

pixelipo commented 7 years ago

Why not use Activity app instead? We could log changes to boards there and notify current user in case a shared board has been updated

9662 commented 7 years ago

and notify current user in case a shared board has been updated

To confirm, would the following user story accurately describe your suggestion?

“As a user having a board open on a browser page, when that board is updated from a different session, I should receive a conspicuous but non-intrusive notification that the board's state has changed.”

UkeFan commented 6 years ago

Yes! That would be gorgeous!

bsherwoodofdaptiv commented 5 years ago

As a note / thought - if the browser received a 'dirty page' message, it could auto reload the boards (or affected column / or card). Just thinking out load here.

stale[bot] commented 5 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

putt1ck commented 5 years ago

Even just a refresh button would be neat

bsherwoodofdaptiv commented 5 years ago

Adding another thought - an application (single page javascript app) I wrote (as an amateur) recently has a ping routine that just updates the central server every 60 seconds to say 'hey, I am still running (ie: user is still logged in)'. This could be the mechanism to get the last time the current board was updated. Just a big unix datestamp (or some such) that you look at compared to the last one you loaded the page (or refreshed it) with. Client side, pretty light. Traffic wise it might be a little intense on high traffic / user base sites. Maybe.

putt1ck commented 5 years ago

Shouldn't be any more intense than say the equivalent for web-based email clients.

juliusknorr commented 5 years ago

We have some first steps made for this with the last modified date being added to entries for the REST API with 0.6. Once we have finished the vue rewrite I'll look into this, as with Vuex storing all the data this shouldn't be to hard.

Blockligne commented 4 years ago

Hi dev team. First of all great great job on pulling out the Deck app. It's awesome ! How far are you in the live refresh developments ? This is something really missing out of the app when using it extensively in collaboration mode. I know nothing about coding, but helping out on this feature would great !!!! Take care and keep it up !!!

juliusknorr commented 4 years ago

First steps have been made to provide a server API in Nextcloud that allows pushing changes from the backend to connected frontend sessions in https://github.com/nextcloud/server/pull/17173

Once https://github.com/nextcloud/push/pull/27 is ready we can look into how we can integrate those push capabilities into deck.

desperateCoder commented 4 years ago

Isn't this also a topic for @David-Development and @tobiasKaminsky? As our Android deck app is using SSO, wouldn't they need to pass the events to us as well?

juliusknorr commented 4 years ago

That would be pretty awesome indeed :wink:

tobiasKaminsky commented 4 years ago

Sure, once there is a working system on server, I can give it a try with SSO.

bnabled commented 3 years ago

Not sure if this makes technical sense, but from a functional perspective this could be a usable workaround:

  1. Have a checkbox in on top of each board saying "live updating"
  2. Have the frontend check the notificiations for updates on decks
  3. Have the frontend reload the page on each notification (of course this could be refined to updating only for notifications of the board that is currently shown, but an indistinct update would be a nice start).

This solves a couple requirements

listenerri commented 3 years ago

This would be a great feature

jfreak53 commented 3 years ago

Any news on when this might be integrated, it's been 4 years? Most other kanban systems have live updates. Thanks!

gbytedev commented 2 years ago

I appreciate the fact that everyone has different priorities when it comes to using software, but collaboration on a kanban board seems to be its intrinsic value proposition. What is it that needs to be done before this feature can be worked on?

juliusknorr commented 2 years ago

The main blocker here is currently to clarify how this should behave in terms of the user experience. WIth that we could approach the next steps as they were already started in the first draft pull request.

Quoting from https://github.com/nextcloud/deck/pull/2159

UI wise we currently don't trigger an update of the user interface to avoid ui element that are changing places without user interaction, so instead a small banner is shown that the view is outdated which allows the user to trigger a refresh manually. cc https://github.com/orgs/nextcloud/teams/designers Does that make sense? I guess ideally we could just update all data that doesn't affect any item position changes. So a card reordering would still trigger the banner while simple label or text changes would be shown immediately in the UI.

Maybe @jancborchardt or @nimishavijay can have another look at this :)

bsherwoodofplanview commented 2 years ago

Interestingly (pardon the identity change - using different (new) company github account now): The moment you display a flag (notice), you (the application) are already interacting with the user interface. You could offer a setting that says "state page is dirty / auto update page as it changes" and let the user choose which behavior they prefer. Personally, I want to see cards move from one column to another. Seeing a card change as you edit it is a different problem - in theory last update trumps prior update (regardless of what it was) no matter if it was while you were editing. (advanced clever thinking pops up a side (not overlay) version of the change that just occurred while you were editing. Again, ADVANCED. Someone else can implement that in their product)

It is okay if you don't agree or support that mode of operation. It is convenient and something I have leveraged in team usage of a board on 'the competing / originating' platform. In a team meeting, I might have the same board open as another team member. I make a card move, they see it happen. They make a card edit and move, and I see it. We are not sharing a single screen, but using different computers. (seldom editing the same card as ownership of it may be obvious) If more than two people are making board changes, then constantly getting a 'board is dirty - reload' message would be annoying. But... It is a solution to know you are out of date with the current view of the board.

gbytedev commented 2 years ago

I agree with the above.

Collaboration here should mean working on a thing together and seeing changes live - this actually increases transparency (e.g. think live co-editing a word document would be hard if you didn't know what the other person is doing).

If in doubt how the UX should be implemented, I encourage to look at how Trello does it. I believe Trello as well as later Atlassian habe been throwing resources at usability testing, so why not use that.

nursoda commented 2 years ago

I'm not sure if that's relevant, but: At least instances that are configured to use the push server, should allow for instant experiences. I agree that the challenge "moving a card while the user is editing it" must be addressed.

bnabled commented 2 years ago

My two cents:

For now the position is the main issue. The conflict on updating already exists in the current setup as multiple people can edit cards. This is actually much more of a problem since the board is not automatically refreshed. So I don't see how auto-update would make this worse.

nimishavijay commented 2 years ago

Super nice feature! Pretty much every collaborative board has live updating.

I don't think it should be a configurable option and it should be the standard because it is expected to have edits reflected immediately. Having a toggle for this and accidentally having it off could mean we are working with an outdated version while thinking it is the latest one. So I think such a cool feature should just be available all the time :)

As for the UX, I checked Trello and here is what I noted:

As for position of the card, it is also immediately reflected.

  1. If you are in the board view and someone moves a card from column1 to column2, it disappears from column1 and appears in column2.
  2. If you are looking at the details of a card and editing something, and someone else moves it from column1 to column2, the board attribute changes in the card details. When you finish editing it and go back to the board view, the new card is there in column2 with the new details.
  3. If you are moving a card from column1 to column2, and someone else simultaneously moves it from column1 to column3 before you finish moving it, your changes are lost. Even if you finish moving it to column2, it is not reflected, and it is seen in column3.

Not sure how many of these are feasible from an engineering perspective, but from a design point of view all of these behaviours make sense. I would additionally add a toast message saying "This card has been moved to columnname" in points 2) and 3) for position of a card.

cc @jancborchardt for any more feedback about this

jancborchardt commented 2 years ago

100% agree with @nimishavijay's analysis! :) Also regarding that it should be on by default, this is also the case with Github projects.

@juliushaertl does that help, or are there specific open questions?

mxmehl commented 2 years ago

Thanks for reving this discussion. I also share @nimishavijay's point of view.

This is exactly the one missing feature for Deck that we at the FSFE terribly miss after moving from Wekan to Deck. We would also be willing to contribute financially to get it done.

nursoda commented 1 year ago

That's SO cool! 🎉 Eager to test it upon next release.