Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Contents synchronisation / Live update for changes #256

Closed
2 tasks
9662 opened this issue Jul 11, 2017 · 29 comments · Fixed by #4273
Closed
2 tasks

Contents synchronisation / Live update for changes #256

9662 opened this issue Jul 11, 2017 · 29 comments · Fixed by #4273

Comments

@9662
Copy link

9662 commented Jul 11, 2017

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:

  • changes are pushed to other clients; or
  • other clients are notified of changes to the board (they can then pull the actual changes, perhaps manually, or F5-refresh).

Actual behaviour

Different users have inconsistent views of the Deck state.

Current status

  • Clarify UX
  • Lay out plan for live update mechanism and possible integration with notify_push
@juliushaertl
Copy link
Member

@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
Copy link
Author

9662 commented Jul 12, 2017

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
Copy link
Contributor

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
Copy link
Author

9662 commented Jul 12, 2017

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.”

@juliushaertl juliushaertl added this to the Backlog milestone Nov 13, 2017
@juliushaertl juliushaertl removed this from the Backlog milestone Oct 25, 2018
@UkeFan
Copy link

UkeFan commented Nov 12, 2018

Yes! That would be gorgeous!

@juliushaertl juliushaertl changed the title Contents synchronisation Contents synchronisation / Live update for changes Dec 4, 2018
@bsherwoodofdaptiv
Copy link

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 stale bot added the stale label Feb 16, 2019
@nextcloud nextcloud deleted a comment from stale bot Feb 17, 2019
@stale stale bot removed the stale label Feb 17, 2019
@stale

This comment has been minimized.

@stale stale bot added the stale label Apr 18, 2019
@putt1ck
Copy link

putt1ck commented May 7, 2019

Even just a refresh button would be neat

@bsherwoodofdaptiv
Copy link

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
Copy link

putt1ck commented May 8, 2019

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

@juliushaertl
Copy link
Member

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
Copy link

Blockligne commented Jan 23, 2020

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 !!!

@juliushaertl
Copy link
Member

First steps have been made to provide a server API in Nextcloud that allows pushing changes from the backend to connected frontend sessions in nextcloud/server#17173

Once nextcloud/push#27 is ready we can look into how we can integrate those push capabilities into deck.

@desperateCoder
Copy link

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?

@juliushaertl
Copy link
Member

That would be pretty awesome indeed 😉

@tobiasKaminsky
Copy link
Member

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

@jakobroehrl jakobroehrl added this to the 1.1.0 milestone Apr 28, 2020
@juliushaertl juliushaertl modified the milestones: ⭐ 1.1.0, 💥 1.2.0 Oct 2, 2020
@juliushaertl juliushaertl removed this from the 1.2.0 milestone Nov 10, 2020
@bnabled
Copy link

bnabled commented Jan 11, 2021

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

  • As a deck user I want to see live updates on changes in the board in order to be able to follow user actions of other users when in a meeting.
  • As a user, I want to be able to easily switch on and off live updating and be aware of the setting in order to make sure I can edit without interuption.
  • As a deck user, I want to be able to edit changes without the board updating in order to make sure my changes are not lost.
  • As a developer, I want to solve live updating without a need to rewrite the backend in order to provide a fast solution.

@listenerri

This comment has been minimized.

@jfreak53
Copy link

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

@gbytedev
Copy link

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?

@juliushaertl
Copy link
Member

juliushaertl commented Mar 2, 2022

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 #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
Copy link

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
Copy link

gbytedev commented Mar 2, 2022

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
Copy link

nursoda commented Mar 2, 2022

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
Copy link

bnabled commented Mar 3, 2022

My two cents:

  • I think auto-update of the board can have a toggle, but my default would be that it is on.
  • Card properties should be synchronized atomically (i.e. position, title, other information) as much as possible. In that way editing multiple properties is less of a problem.
  • Finally, on editing a 'heavier' property (i.e. notes) the update can lock that property when 'opened' and 'save/close' it afterwards, toggling an update to other clients. But this would be an advanced option.

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
Copy link
Member

nimishavijay commented Mar 7, 2022

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:

  • changes in title, description, or other free text fields show whatever has been last updated. Similarly for due dates as well. So if 2 users are simultaneously editing any of these fields, the user who sets the field first will be overwritten.
    The description section has a little avatar indicator if someone else is editing the description at the moment, so that could help.
    image
  • for tags, assignees, cover images, tasks lists and attachments the results are shown immediately.

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
Copy link
Member

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
Copy link

mxmehl commented Mar 10, 2022

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
Copy link

nursoda commented Feb 21, 2023

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Archived in project
Development

Successfully merging a pull request may close this issue.