Actually, all existing entries in the Activity Stream are considered as
notifications, as soon as there is a descriptor for their type (in my
screenshot, we see only "notifications" that are actually activities from
AS).

I know that existing events do not implement the "StorableEvent" interface,
but all events that are currently saved in AS are de-facto "storable".

Said differently, the notion of notification is merged with the notion of
Event/Activity. The only difference is the way we display them.

2017-03-08 13:31 GMT+01:00 Thomas Mortagne <[email protected]>:

> On Wed, Mar 8, 2017 at 12:27 PM, Guillaume Delhumeau
> <[email protected]> wrote:
> > Sure but it won't work when you upgrade an old wiki with users created
> > years ago. We would still end up with thousands of unread notifications.
>
> Which notifications ? You will start getting new notifications only
> when you have new notification system, no ?
>
> >
> > 2017-03-08 12:07 GMT+01:00 Thomas Mortagne <[email protected]>:
> >
> >> On Wed, Mar 8, 2017 at 11:55 AM, Guillaume Delhumeau
> >> <[email protected]> wrote:
> >> > Hello everybody.
> >> >
> >> > *TL;DR:* Notifications are nothing but standard Events from the
> >> Observation
> >> > Manager, marked as "Storable" and stored by
> >> > the Event Stream. They can be displayed in the top bar of the wiki
> and/or
> >> > sent by e-mails periodically. Since this is
> >> > overlapping with the Watchlist features, the idea in the future is to
> >> > re-implement the watchlist using the notification
> >> > mechanism and to push the current Watchlist module to contrib. Need
> your
> >> > agreement to go in that way.
> >> >
> >> >
> >> > *Background:*
> >> >
> >> > A few weeks ago I've sent a proposal about the Notifications feature.
> >> I've
> >> > made some work since, and talked with Vincent
> >> > to define a vision.
> >> >
> >> > Let me introduce you what I've already done and what I'm going to do
> in
> >> the
> >> > following days:
> >> >
> >> > * I am going to introduce 2 interfaces: *StorableEvent* and
> >> > *TargetableEvent* (currently I have only implemented a
> >> >   *NotificationEvent* that represent both).
> >> >
> >> > * *StorableEvent*: when an event from the Observation Manager
> implements
> >> > this interface, it means this event will be
> >> >                  logged (stored) by the Event Stream.
> >> >
> >> > * *TargetableEvent*: introduce a list of "targets", which are the IDs
> of
> >> > the entities who are targeted by this event.
> >> >                    Example: when someones replies to your forum
> topic, an
> >> > event called "someone has answered to your
> >> >                    topic" is sent with the topic creator as target.
> >> >
> >> > * As I said, storable events are stored by the Event Stream, which is
> >> > currently implemented by the Activity Stream
> >> >   module. So it means a *StorableEvent* is currently stored as an
> >> > *ActivityEvent* but this remains technical and not visible
> >> >   from the outside.
> >> >
> >> > * I have introduced the role *StorableEventConverter* which convert a
> >> > *StorableEvent* to an Event from the Event Stream.
> >> >   Each application can provide its own converter (to store additional
> >> > parameters for example) but there a default one
> >> >   that is used if nothing else is defined.
> >> >   See:
> >> > https://github.com/xwiki/xwiki-platform/blob/
> >> e5a3cc7b6a5cbe82b1668d9d30fbf6a61b026046/xwiki-platform-
> >> core/xwiki-platform-eventstream/src/main/java/org/xwiki/eventstream/
> >> NotificationConverter.java#L36-L36
> >> >
> >> > * I have added the "target" field (a list of string) to the Event and
> the
> >> > *ActivityEvent* classes. I have also updated the
> >> >   hibernate mapping for *ActivityEventImpl* accordingly.
> >> >   See:
> >> > https://github.com/xwiki/xwiki-platform/blob/
> >> 81172b2dfd994ddd727efe93daf8fa446dc4abce/xwiki-platform-
> >> core/xwiki-platform-activitystream/xwiki-platform-
> >> activitystream-api/src/main/resources/activitystream.hbm.xml#L63-L63
> >> >
> >> > * I have introduced an *EventStatus* class (and *ActivityStatusImpl*)
> to
> >> > store in the wiki which notifications has been seen
> >> >   by a specified user. This is important because we want to
> distinguish
> >> new
> >> > notifications from those the user have
> >> >   marked as read. Hibernate mapping has been updated as well in the
> >> > Activity Stream module.
> >> >   See:
> >> > https://github.com/xwiki/xwiki-platform/blob/
> >> e5a3cc7b6a5cbe82b1668d9d30fbf6a61b026046/xwiki-platform-
> >> core/xwiki-platform-eventstream/src/main/java/org/
> >> xwiki/eventstream/EventStatus.java#L25-L25
> >> >   See:
> >> > https://github.com/xwiki/xwiki-platform/blob/
> >> 81172b2dfd994ddd727efe93daf8fa446dc4abce/xwiki-platform-
> >> core/xwiki-platform-activitystream/xwiki-platform-
> >> activitystream-api/src/main/resources/activitystream.hbm.xml#L69-L69
> >> >
> >> > * I am going to introduce the *StorableEventDescriptor* role. The
> >> > components will give some meta-information about a
> >> >   storable event: the pretty name of the event, the application that
> can
> >> > send it and a short text giving a description
> >> >   about the event. We need this to expose to the user the list of
> events
> >> > that she can subscribe to.
> >> >   (Right now I have implemented this as XObjects called
> >> "*NotificationType*"
> >> > which is an error)
> >> >
> >> > * I have introduced the concept of NotificationPreference. It's an
> >> XObject
> >> > stored in the user profile. When a user wants
> >> >   to subscribe to a particular type of event, this xobject is created
> >> with
> >> > the id of the event and the media used for
> >> >   the notification ('web notification', 'email' or both).
> >> >
> >> >   In the future, this preferences should handle some more precise
> >> filters.
> >> > Like: "I am interested in the notifcations
> >> >   sent by the Forum Application but only when it comes from the wiki A
> >> and
> >> > not the wiki B."
> >> >
> >> > * I have introduced the role *NotificationDisplayer*. It's a component
> >> that
> >> > generates the XDOM to display in the
> >> >   notifications menu. Each application can implement its own
> displayer,
> >> but
> >> > failback to a default one.
> >> >
> >> > * The *DefaultNotificationDisplayer* tries to render the template
> >> > 'notifications/{eventType}.vm' and failback to
> >> >   'notifications/default.vm'. It means you can create your own
> displayer
> >> > either by implementing a custom
> >> >   *NotificationDisplayer* or by creating a template in the right
> >> location.
> >> >
> >> > * The *NotificationManager* is responsible for getting the
> notifications
> >> > for the current user, according to its
> >> >   preferences.
> >> >
> >> > * I have implemented a UI which load the notification asynchronously
> and
> >> > display them in the notification menu, just
> >> >   below the watchlist options.
> >> >   See:
> >> > http://jira.xwiki.org/secure/attachment/33586/WIP-Notificati
> onsMenu.png
> >> >
> >> > * Unread notifications are displayed with a different styling that
> >> others.
> >> >
> >> > * The user has the ability to mark a notification as read.
> >> >
> >> > * I have implemented a preferences page in the user profile, which
> list
> >> all
> >> > *StorableEventDescriptor*.
> >> >   See:
> >> > http://jira.xwiki.org/secure/attachment/33587/WIP-
> >> NotificationsPreferences.png
> >> >
> >> > * As a proof of concept, I am going to make the Blog Application send
> >> some
> >> > custom events that will be displayed in the
> >> >   notifications menu.
> >> >
> >> > Problems:
> >> >
> >> > * We clearly have some overlapping of concerns with the Watchlist.
> The UI
> >> > is even very bad since the Watchlist options
> >> >   are displayed in the same "bell" menu than the notifications without
> >> > being connected together. It's confusing.
> >> >
> >> > * That is why we propose, with Vincent, to remove the Watchlist as it
> is,
> >> > and re-implement its feature using the
> >> >   notifications abilities.
> >> >
> >> > * The email sending is not implemented yet, and will not for the 9.2
> >> > release.
> >> >
> >> > * We don't have a filter to not display similar notifications. For
> >> example,
> >> > a user saving a document 10 times in 10
> >> >   minutes will generate 10 notifications. Possible flooding.
> >> >
> >> > * When a user registers, all the notifications that are stored since
> the
> >> > beginning of the wiki are unread by her. It
> >> >   does not make sense to tell her "you have 1 000 000 000 unread
> >> > notifications" so we need to store a starting date for
> >> >   each user.
> >>
> >> You already have a starting date in each profile, the profile page
> >> creation date.
> >>
> >> >
> >> > Do you see any problem with that vision?
> >> >
> >> > Thanks you,
> >> >
> >> > --
> >> > Guillaume Delhumeau ([email protected])
> >> > Research & Development Engineer at XWiki SAS
> >> > Committer on the XWiki.org project
> >>
> >>
> >>
> >> --
> >> Thomas Mortagne
> >>
> >
> >
> >
> > --
> > Guillaume Delhumeau ([email protected])
> > Research & Development Engineer at XWiki SAS
> > Committer on the XWiki.org project
>
>
>
> --
> Thomas Mortagne
>



-- 
Guillaume Delhumeau ([email protected])
Research & Development Engineer at XWiki SAS
Committer on the XWiki.org project

Reply via email to