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 { ...@@ -297,13 +297,38 @@ type TrackServicesCallback interface {
Callback(marshalData []byte, err error) 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 // TrackServices will return via a callback the list of services the
// backend keeps track of, which is formally referred to as a // backend keeps track of, which is formally referred to as a
// [message.ServiceList]. This may be passed into other bindings call which // [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 // may need context on the available services for this client. This will
// of GetPreimages in APIv0. The callback will be called every time a new service // provide services for all identities that the client tracks.
// 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.
// //
// Parameters: // Parameters:
// - cb - A TrackServicesCallback, which will be passed the marshalled // - cb - A TrackServicesCallback, which will be passed the marshalled
......
...@@ -82,34 +82,27 @@ type NotificationReport struct { ...@@ -82,34 +82,27 @@ type NotificationReport struct {
// NotificationReports. // NotificationReports.
// //
// Parameters: // Parameters:
// - e2eID - e2e object ID in the tracker
// - notificationCSV - the notification data received from the // - notificationCSV - the notification data received from the
// notifications' server. // notifications' server.
// - marshalledServices - the JSON-marshalled list of services the backend // - marshalledServices - the JSON-marshalled list of services the backend
// keeps track of. Refer to Cmix.TrackServices for information about this. This // keeps track of. Refer to Cmix.TrackServices or
// is the equivalent to preimages in APIv0. // Cmix.TrackServicesWithIdentity for information about this.
// //
// Returns: // Returns:
// - []byte - A JSON marshalled NotificationReports. Some NotificationReport's // - []byte - A JSON marshalled NotificationReports. Some NotificationReport's
// within in this structure may have their NotificationReport.ForMe // within in this structure may have their NotificationReport.ForMe
// set to false. These may be ignored. // set to false. These may be ignored.
func GetNotificationsReport(e2eId int, notificationCSV string, func GetNotificationsReport(notificationCSV string,
marshalledServices []byte) ([]byte, error) { 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{} serviceList := message.ServiceList{}
err = json.Unmarshal(marshalledServices, &serviceList) err := json.Unmarshal(marshalledServices, &serviceList)
if err != nil { if err != nil {
return nil, err return nil, err
} }
// Retrieve the services for this user
services := serviceList[*user.api.GetReceptionIdentity().ID]
// Decode notifications' server data // Decode notifications' server data
notificationList, err := notifications.DecodeNotificationsCSV(notificationCSV) notificationList, err := notifications.DecodeNotificationsCSV(notificationCSV)
if err != nil { if err != nil {
...@@ -120,6 +113,7 @@ func GetNotificationsReport(e2eId int, notificationCSV string, ...@@ -120,6 +113,7 @@ func GetNotificationsReport(e2eId int, notificationCSV string,
reportList := make([]*NotificationReport, len(notificationList)) reportList := make([]*NotificationReport, len(notificationList))
// Iterate over data provided by server // Iterate over data provided by server
for _, services := range serviceList {
for i := range notificationList { for i := range notificationList {
notifData := notificationList[i] notifData := notificationList[i]
...@@ -142,6 +136,7 @@ func GetNotificationsReport(e2eId int, notificationCSV string, ...@@ -142,6 +136,7 @@ func GetNotificationsReport(e2eId int, notificationCSV string,
} }
} }
} }
}
return json.Marshal(reportList) 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