forked from Silverfish/proton-bridge
GODT-1351: Cache and update of space bytes in user object.
This commit is contained in:
@ -32,6 +32,7 @@ type Client interface {
|
||||
AuthDelete(context.Context) error
|
||||
AddAuthRefreshHandler(AuthRefreshHandler)
|
||||
|
||||
GetUser(ctx context.Context) (*User, error)
|
||||
CurrentUser(ctx context.Context) (*User, error)
|
||||
UpdateUser(ctx context.Context) (*User, error)
|
||||
Unlock(ctx context.Context, passphrase []byte) (err error)
|
||||
|
||||
@ -40,7 +40,7 @@ type Event struct {
|
||||
// Changes applied to labels.
|
||||
Labels []*EventLabel
|
||||
// Current user status.
|
||||
User User
|
||||
User *User
|
||||
// Changes to addresses.
|
||||
Addresses []*EventAddress
|
||||
// Messages to show to the user.
|
||||
@ -198,17 +198,32 @@ func (c *client) getEvent(ctx context.Context, eventID string, numberOfMergedEve
|
||||
// mergeEvents combines an old events and a new events object.
|
||||
// This is not as simple as just blindly joining the two because some things should only be taken from the new events.
|
||||
func mergeEvents(eventsOld *Event, eventsNew *Event) (mergedEvents *Event) {
|
||||
mergedEvents = &Event{
|
||||
return &Event{
|
||||
EventID: eventsNew.EventID,
|
||||
Refresh: eventsOld.Refresh | eventsNew.Refresh,
|
||||
More: eventsNew.More,
|
||||
Messages: append(eventsOld.Messages, eventsNew.Messages...),
|
||||
MessageCounts: append(eventsOld.MessageCounts, eventsNew.MessageCounts...),
|
||||
Labels: append(eventsOld.Labels, eventsNew.Labels...),
|
||||
User: eventsNew.User,
|
||||
User: mergeUserEvents(eventsOld.User, eventsNew.User),
|
||||
Addresses: append(eventsOld.Addresses, eventsNew.Addresses...),
|
||||
Notices: append(eventsOld.Notices, eventsNew.Notices...),
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func mergeUserEvents(userOld, userNew *User) *User {
|
||||
if userNew == nil {
|
||||
return userOld
|
||||
}
|
||||
|
||||
if userOld != nil {
|
||||
if userNew.MaxSpace == nil {
|
||||
userNew.MaxSpace = userOld.MaxSpace
|
||||
}
|
||||
if userNew.UsedSpace == nil {
|
||||
userNew.UsedSpace = userOld.UsedSpace
|
||||
}
|
||||
}
|
||||
|
||||
return userNew
|
||||
}
|
||||
|
||||
@ -221,10 +221,11 @@ var (
|
||||
},
|
||||
},
|
||||
},
|
||||
User: User{
|
||||
User: &User{
|
||||
ID: "userID1",
|
||||
Name: "user",
|
||||
UsedSpace: 23456,
|
||||
UsedSpace: &usedSpace,
|
||||
MaxSpace: &maxSpace,
|
||||
},
|
||||
Addresses: []*EventAddress{
|
||||
{
|
||||
@ -464,7 +465,8 @@ const (
|
||||
"User": {
|
||||
"ID": "userID1",
|
||||
"Name": "user",
|
||||
"UsedSpace": 12345
|
||||
"UsedSpace": 12345,
|
||||
"MaxSpace": 12345678
|
||||
},
|
||||
"Addresses": [
|
||||
{
|
||||
|
||||
@ -362,6 +362,21 @@ func (mr *MockClientMockRecorder) GetPublicKeysForEmail(arg0, arg1 interface{})
|
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPublicKeysForEmail", reflect.TypeOf((*MockClient)(nil).GetPublicKeysForEmail), arg0, arg1)
|
||||
}
|
||||
|
||||
// GetUser mocks base method.
|
||||
func (m *MockClient) GetUser(arg0 context.Context) (*pmapi.User, error) {
|
||||
m.ctrl.T.Helper()
|
||||
ret := m.ctrl.Call(m, "GetUser", arg0)
|
||||
ret0, _ := ret[0].(*pmapi.User)
|
||||
ret1, _ := ret[1].(error)
|
||||
return ret0, ret1
|
||||
}
|
||||
|
||||
// GetUser indicates an expected call of GetUser.
|
||||
func (mr *MockClientMockRecorder) GetUser(arg0 interface{}) *gomock.Call {
|
||||
mr.mock.ctrl.T.Helper()
|
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetUser", reflect.TypeOf((*MockClient)(nil).GetUser), arg0)
|
||||
}
|
||||
|
||||
// GetUserKeyRing mocks base method.
|
||||
func (m *MockClient) GetUserKeyRing() (*crypto.KeyRing, error) {
|
||||
m.ctrl.T.Helper()
|
||||
|
||||
@ -3,10 +3,10 @@
|
||||
"User": {
|
||||
"ID": "MJLke8kWh1BBvG95JBIrZvzpgsZ94hNNgjNHVyhXMiv4g9cn6SgvqiIFR5cigpml2LD_iUk_3DkV29oojTt3eA==",
|
||||
"Name": "jason",
|
||||
"UsedSpace": 96691332,
|
||||
"UsedSpace": 23456,
|
||||
"Currency": "USD",
|
||||
"Credit": 0,
|
||||
"MaxSpace": 10737418240,
|
||||
"MaxSpace": 12345678,
|
||||
"MaxUpload": 26214400,
|
||||
"Role": 2,
|
||||
"Private": 1,
|
||||
|
||||
@ -63,10 +63,10 @@ const (
|
||||
type User struct {
|
||||
ID string
|
||||
Name string
|
||||
UsedSpace int64
|
||||
UsedSpace *int64
|
||||
Currency string
|
||||
Credit int
|
||||
MaxSpace int64
|
||||
MaxSpace *int64
|
||||
MaxUpload int64
|
||||
Role int
|
||||
Private int
|
||||
@ -85,7 +85,7 @@ type User struct {
|
||||
}
|
||||
}
|
||||
|
||||
func (c *client) getUser(ctx context.Context) (user *User, err error) {
|
||||
func (c *client) GetUser(ctx context.Context) (user *User, err error) {
|
||||
var res struct {
|
||||
User *User
|
||||
}
|
||||
@ -114,7 +114,7 @@ func (c *client) unlockUser(passphrase []byte) (err error) {
|
||||
|
||||
// UpdateUser retrieves details about user and loads its addresses.
|
||||
func (c *client) UpdateUser(ctx context.Context) (*User, error) {
|
||||
user, err := c.getUser(ctx)
|
||||
user, err := c.GetUser(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@ -28,19 +28,24 @@ import (
|
||||
r "github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
var testCurrentUser = &User{
|
||||
ID: "MJLke8kWh1BBvG95JBIrZvzpgsZ94hNNgjNHVyhXMiv4g9cn6SgvqiIFR5cigpml2LD_iUk_3DkV29oojTt3eA==",
|
||||
Name: "jason",
|
||||
UsedSpace: 96691332,
|
||||
Currency: "USD",
|
||||
Role: 2,
|
||||
Subscribed: 1,
|
||||
Services: 1,
|
||||
MaxSpace: 10737418240,
|
||||
MaxUpload: 26214400,
|
||||
Private: 1,
|
||||
Keys: *loadPMKeys(readTestFile("keyring_userKey_JSON", false)),
|
||||
}
|
||||
var (
|
||||
usedSpace = int64(23456)
|
||||
maxSpace = int64(12345678)
|
||||
|
||||
testCurrentUser = &User{
|
||||
ID: "MJLke8kWh1BBvG95JBIrZvzpgsZ94hNNgjNHVyhXMiv4g9cn6SgvqiIFR5cigpml2LD_iUk_3DkV29oojTt3eA==",
|
||||
Name: "jason",
|
||||
UsedSpace: &usedSpace,
|
||||
Currency: "USD",
|
||||
Role: 2,
|
||||
Subscribed: 1,
|
||||
Services: 1,
|
||||
MaxSpace: &maxSpace,
|
||||
MaxUpload: 26214400,
|
||||
Private: 1,
|
||||
Keys: *loadPMKeys(readTestFile("keyring_userKey_JSON", false)),
|
||||
}
|
||||
)
|
||||
|
||||
func routeGetUsers(tb testing.TB, w http.ResponseWriter, req *http.Request) string {
|
||||
r.NoError(tb, checkMethodAndPath(req, "GET", "/users"))
|
||||
|
||||
Reference in New Issue
Block a user