Skip to content
Snippets Groups Projects
Commit e42c8421 authored by Josh Brooks's avatar Josh Brooks
Browse files

Add TrackServicesWithIdentity to fix offline issue with notifications

parent 6bfab444
No related branches found
No related tags found
2 merge requests!510Release,!442Add documentation
......@@ -297,13 +297,38 @@ type TrackServicesCallback interface {
Callback(marshalData []byte, err error)
}
// TrackServicesWithIdentity will return via a callback the list of services the
// backend keeps track of for the provided identity. This may be passed into
// other bindings call which may need context on the available services for this
// single identity. This will only return services for the given identity.
//
// Parameters:
// - e2eID - e2e object ID in the tracker.
// - cb - A TrackServicesCallback, which will be passed the marshalled
// message.ServiceList.
func (c *Cmix) TrackServicesWithIdentity(e2eId int,
cb TrackServicesCallback) error {
// Retrieve the user from the tracker
user, err := e2eTrackerSingleton.get(e2eId)
if err != nil {
return err
}
receptionId := user.api.GetReceptionIdentity().ID
c.api.GetCmix().TrackServices(func(list message.ServiceList) {
res := make(message.ServiceList)
res[*receptionId] = list[*receptionId]
cb.Callback(json.Marshal(res))
})
return nil
}
// TrackServices will return via a callback the list of services the
// backend keeps track of, which is formally referred to as a
// [message.ServiceList]. This may be passed into other bindings call which
// may need context on the available services for this client. This is the equivalent
// of GetPreimages in APIv0. The callback will be called every time a new service
// is added or an existing service is deleted. This serves as a way for
// the caller to have the most up-to-date list of existing services.
// may need context on the available services for this client. This will
// provide services for all identities that the client tracks.
//
// Parameters:
// - cb - A TrackServicesCallback, which will be passed the marshalled
......
......@@ -82,34 +82,27 @@ type NotificationReport struct {
// NotificationReports.
//
// Parameters:
// - e2eID - e2e object ID in the tracker
// - notificationCSV - the notification data received from the
// notifications' server.
// - marshalledServices - the JSON-marshalled list of services the backend
// keeps track of. Refer to Cmix.TrackServices for information about this. This
// is the equivalent to preimages in APIv0.
// keeps track of. Refer to Cmix.TrackServices or
// Cmix.TrackServicesWithIdentity for information about this.
//
// Returns:
// - []byte - A JSON marshalled NotificationReports. Some NotificationReport's
// within in this structure may have their NotificationReport.ForMe
// set to false. These may be ignored.
func GetNotificationsReport(e2eId int, notificationCSV string,
func GetNotificationsReport(notificationCSV string,
marshalledServices []byte) ([]byte, error) {
// Retrieve user
user, err := e2eTrackerSingleton.get(e2eId)
if err != nil {
return nil, err
}
// If services are retrieved using TrackServicesWithIdentity, this
// should return a single list.
serviceList := message.ServiceList{}
err = json.Unmarshal(marshalledServices, &serviceList)
err := json.Unmarshal(marshalledServices, &serviceList)
if err != nil {
return nil, err
}
// Retrieve the services for this user
services := serviceList[*user.api.GetReceptionIdentity().ID]
// Decode notifications' server data
notificationList, err := notifications.DecodeNotificationsCSV(notificationCSV)
if err != nil {
......@@ -120,6 +113,7 @@ func GetNotificationsReport(e2eId int, notificationCSV string,
reportList := make([]*NotificationReport, len(notificationList))
// Iterate over data provided by server
for _, services := range serviceList {
for i := range notificationList {
notifData := notificationList[i]
......@@ -142,6 +136,7 @@ func GetNotificationsReport(e2eId int, notificationCSV string,
}
}
}
}
return json.Marshal(reportList)
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment