@@ -9,6 +9,7 @@ package store
99
1010import (
1111 "context"
12+ "errors"
1213 "time"
1314
1415 "github.com/google/uuid"
@@ -226,6 +227,7 @@ type Device struct {
226227 FacebookUUID uuid.UUID
227228
228229 Initialized bool
230+ Deleted bool
229231 Identities IdentityStore
230232 Sessions SessionStore
231233 PreKeys PreKeyStore
@@ -259,20 +261,44 @@ func (device *Device) GetLID() types.JID {
259261 return device .LID
260262}
261263
264+ var ErrDeviceDeleted = errors .New ("invalid use of deleted device" )
265+
262266func (device * Device ) Save (ctx context.Context ) error {
267+ if device .Deleted {
268+ return ErrDeviceDeleted
269+ }
263270 return device .Container .PutDevice (ctx , device )
264271}
265272
266273func (device * Device ) Delete (ctx context.Context ) error {
274+ if device .Deleted {
275+ return nil
276+ }
267277 err := device .Container .DeleteDevice (ctx , device )
268278 if err != nil {
269279 return err
270280 }
271281 device .ID = nil
272282 device .LID = types .EmptyJID
283+ device .Deleted = true
284+ device .SetAllStores (& NoopStore {ErrDeviceDeleted })
273285 return nil
274286}
275287
288+ func (device * Device ) SetAllStores (store AllSessionSpecificStores ) {
289+ device .Identities = store
290+ device .Sessions = store
291+ device .PreKeys = store
292+ device .SenderKeys = store
293+ device .AppStateKeys = store
294+ device .AppState = store
295+ device .Contacts = store
296+ device .ChatSettings = store
297+ device .MsgSecrets = store
298+ device .PrivacyTokens = store
299+ device .EventBuffer = store
300+ }
301+
276302func (device * Device ) GetAltJID (ctx context.Context , jid types.JID ) (types.JID , error ) {
277303 if device == nil {
278304 return types .EmptyJID , nil
0 commit comments