slidge-whatsapp 0.3.1__cp311-cp311-manylinux_2_36_aarch64.whl → 0.3.4__cp311-cp311-manylinux_2_36_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of slidge-whatsapp might be problematic. Click here for more details.

Files changed (74) hide show
  1. slidge_whatsapp/generated/_whatsapp.cpython-311-aarch64-linux-gnu.h +178 -178
  2. slidge_whatsapp/generated/_whatsapp.cpython-311-aarch64-linux-gnu.so +0 -0
  3. slidge_whatsapp/generated/build.py +145 -145
  4. slidge_whatsapp/generated/go.py +1 -1
  5. slidge_whatsapp/generated/whatsapp.c +1517 -1517
  6. slidge_whatsapp/generated/whatsapp.go +1151 -1151
  7. slidge_whatsapp/generated/whatsapp.py +1175 -1175
  8. slidge_whatsapp/generated/whatsapp_go.h +178 -178
  9. slidge_whatsapp/go.mod +9 -9
  10. slidge_whatsapp/go.sum +18 -18
  11. slidge_whatsapp/vendor/go.mau.fi/libsignal/session/SessionCipher.go +7 -2
  12. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/module.go +2 -1
  13. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/upgradetable.go +3 -0
  14. slidge_whatsapp/vendor/go.mau.fi/util/exsync/syncmap.go +48 -7
  15. slidge_whatsapp/vendor/go.mau.fi/util/exsync/syncset.go +13 -0
  16. slidge_whatsapp/vendor/go.mau.fi/util/jsontime/helpers.go +16 -5
  17. slidge_whatsapp/vendor/go.mau.fi/util/jsontime/integer.go +27 -12
  18. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/encode.go +39 -28
  19. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate.go +17 -2
  20. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/armadillomessage.go +2 -1
  21. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/internals.go +18 -6
  22. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/message.go +40 -16
  23. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/pair.go +24 -21
  24. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/prekeys.go +21 -0
  25. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.go +3213 -2851
  26. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.proto +108 -74
  27. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waStatusAttributions/WAStatusAttributions.pb.go +7 -3
  28. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waStatusAttributions/WAStatusAttributions.proto +1 -0
  29. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.pb.go +7 -3
  30. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.proto +1 -0
  31. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.pb.go +35 -23
  32. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.proto +5 -3
  33. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/receipt.go +47 -16
  34. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/retry.go +4 -10
  35. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/send.go +28 -42
  36. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/sendfb.go +33 -32
  37. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/clientpayload.go +1 -1
  38. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/noop.go +5 -1
  39. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sessioncache.go +125 -0
  40. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/signal.go +8 -0
  41. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/store.go +34 -11
  42. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/store.go +5 -3
  43. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/jid.go +24 -9
  44. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/user.go +12 -1
  45. slidge_whatsapp/vendor/golang.org/x/crypto/curve25519/curve25519.go +7 -4
  46. slidge_whatsapp/vendor/golang.org/x/net/http2/config.go +11 -6
  47. slidge_whatsapp/vendor/golang.org/x/net/http2/config_go125.go +15 -0
  48. slidge_whatsapp/vendor/golang.org/x/net/http2/config_go126.go +15 -0
  49. slidge_whatsapp/vendor/golang.org/x/net/http2/frame.go +24 -1
  50. slidge_whatsapp/vendor/golang.org/x/net/http2/http2.go +0 -1
  51. slidge_whatsapp/vendor/golang.org/x/net/http2/server.go +35 -26
  52. slidge_whatsapp/vendor/golang.org/x/net/http2/transport.go +4 -2
  53. slidge_whatsapp/vendor/golang.org/x/net/http2/writesched.go +2 -0
  54. slidge_whatsapp/vendor/golang.org/x/net/http2/{writesched_priority.go → writesched_priority_rfc7540.go} +52 -52
  55. slidge_whatsapp/vendor/golang.org/x/net/http2/writesched_priority_rfc9128.go +209 -0
  56. slidge_whatsapp/vendor/golang.org/x/net/http2/writesched_roundrobin.go +1 -1
  57. slidge_whatsapp/vendor/golang.org/x/net/internal/httpcommon/request.go +2 -2
  58. slidge_whatsapp/vendor/golang.org/x/net/internal/socks/socks.go +1 -1
  59. slidge_whatsapp/vendor/golang.org/x/sys/unix/affinity_linux.go +9 -0
  60. slidge_whatsapp/vendor/golang.org/x/sys/unix/fdset.go +1 -3
  61. slidge_whatsapp/vendor/golang.org/x/sys/unix/ifreq_linux.go +1 -3
  62. slidge_whatsapp/vendor/golang.org/x/sys/unix/mkall.sh +1 -0
  63. slidge_whatsapp/vendor/golang.org/x/sys/unix/syscall_linux.go +1 -3
  64. slidge_whatsapp/vendor/golang.org/x/sys/unix/syscall_netbsd.go +17 -0
  65. slidge_whatsapp/vendor/golang.org/x/sys/windows/syscall_windows.go +2 -0
  66. slidge_whatsapp/vendor/golang.org/x/sys/windows/types_windows.go +16 -0
  67. slidge_whatsapp/vendor/golang.org/x/sys/windows/zsyscall_windows.go +18 -0
  68. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/core.go +2 -9
  69. slidge_whatsapp/vendor/modules.txt +10 -10
  70. {slidge_whatsapp-0.3.1.dist-info → slidge_whatsapp-0.3.4.dist-info}/METADATA +1 -1
  71. {slidge_whatsapp-0.3.1.dist-info → slidge_whatsapp-0.3.4.dist-info}/RECORD +74 -70
  72. {slidge_whatsapp-0.3.1.dist-info → slidge_whatsapp-0.3.4.dist-info}/WHEEL +0 -0
  73. {slidge_whatsapp-0.3.1.dist-info → slidge_whatsapp-0.3.4.dist-info}/entry_points.txt +0 -0
  74. {slidge_whatsapp-0.3.1.dist-info → slidge_whatsapp-0.3.4.dist-info}/licenses/LICENSE +0 -0
@@ -351,15 +351,94 @@ extern long long int Slice_whatsapp_Receipt_subslice(long long int handle, GoInt
351
351
  extern void Slice_whatsapp_Receipt_set(long long int handle, GoInt _idx, long long int _vl);
352
352
  extern void Slice_whatsapp_Receipt_append(long long int handle, long long int _vl);
353
353
 
354
- // --- wrapping struct: whatsapp.Call ---
354
+ // --- wrapping struct: whatsapp.Avatar ---
355
355
  //
356
- extern long long int whatsapp_Call_CTor();
357
- extern long long int whatsapp_Call_State_Get(long long int handle);
358
- extern void whatsapp_Call_State_Set(long long int handle, long long int val);
359
- extern char* whatsapp_Call_JID_Get(long long int handle);
360
- extern void whatsapp_Call_JID_Set(long long int handle, char* val);
361
- extern long long int whatsapp_Call_Timestamp_Get(long long int handle);
362
- extern void whatsapp_Call_Timestamp_Set(long long int handle, long long int val);
356
+ extern long long int whatsapp_Avatar_CTor();
357
+ extern char* whatsapp_Avatar_ID_Get(long long int handle);
358
+ extern void whatsapp_Avatar_ID_Set(long long int handle, char* val);
359
+ extern char* whatsapp_Avatar_URL_Get(long long int handle);
360
+ extern void whatsapp_Avatar_URL_Set(long long int handle, char* val);
361
+
362
+ // --- wrapping struct: whatsapp.Gateway ---
363
+ //
364
+ extern long long int whatsapp_Gateway_CTor();
365
+ extern char* whatsapp_Gateway_DBPath_Get(long long int handle);
366
+ extern void whatsapp_Gateway_DBPath_Set(long long int handle, char* val);
367
+ extern char* whatsapp_Gateway_Name_Get(long long int handle);
368
+ extern void whatsapp_Gateway_Name_Set(long long int handle, char* val);
369
+ extern char* whatsapp_Gateway_LogLevel_Get(long long int handle);
370
+ extern void whatsapp_Gateway_LogLevel_Set(long long int handle, char* val);
371
+ extern char* whatsapp_Gateway_TempDir_Get(long long int handle);
372
+ extern void whatsapp_Gateway_TempDir_Set(long long int handle, char* val);
373
+ extern char* whatsapp_Gateway_Init(long long int _handle);
374
+ extern long long int whatsapp_Gateway_NewSession(long long int _handle, long long int device);
375
+ extern char* whatsapp_Gateway_CleanupSession(long long int _handle, long long int device);
376
+
377
+ // --- wrapping struct: whatsapp.Message ---
378
+ //
379
+ extern long long int whatsapp_Message_CTor();
380
+ extern long long int whatsapp_Message_Kind_Get(long long int handle);
381
+ extern void whatsapp_Message_Kind_Set(long long int handle, long long int val);
382
+ extern char* whatsapp_Message_ID_Get(long long int handle);
383
+ extern void whatsapp_Message_ID_Set(long long int handle, char* val);
384
+ extern char* whatsapp_Message_JID_Get(long long int handle);
385
+ extern void whatsapp_Message_JID_Set(long long int handle, char* val);
386
+ extern char* whatsapp_Message_GroupJID_Get(long long int handle);
387
+ extern void whatsapp_Message_GroupJID_Set(long long int handle, char* val);
388
+ extern char* whatsapp_Message_OriginJID_Get(long long int handle);
389
+ extern void whatsapp_Message_OriginJID_Set(long long int handle, char* val);
390
+ extern char* whatsapp_Message_Body_Get(long long int handle);
391
+ extern void whatsapp_Message_Body_Set(long long int handle, char* val);
392
+ extern long long int whatsapp_Message_Timestamp_Get(long long int handle);
393
+ extern void whatsapp_Message_Timestamp_Set(long long int handle, long long int val);
394
+ extern char whatsapp_Message_IsCarbon_Get(long long int handle);
395
+ extern void whatsapp_Message_IsCarbon_Set(long long int handle, char val);
396
+ extern char whatsapp_Message_IsForwarded_Get(long long int handle);
397
+ extern void whatsapp_Message_IsForwarded_Set(long long int handle, char val);
398
+ extern char* whatsapp_Message_ReplyID_Get(long long int handle);
399
+ extern void whatsapp_Message_ReplyID_Set(long long int handle, char* val);
400
+ extern char* whatsapp_Message_ReplyBody_Get(long long int handle);
401
+ extern void whatsapp_Message_ReplyBody_Set(long long int handle, char* val);
402
+ extern long long int whatsapp_Message_Attachments_Get(long long int handle);
403
+ extern void whatsapp_Message_Attachments_Set(long long int handle, long long int val);
404
+ extern long long int whatsapp_Message_Preview_Get(long long int handle);
405
+ extern void whatsapp_Message_Preview_Set(long long int handle, long long int val);
406
+ extern long long int whatsapp_Message_Location_Get(long long int handle);
407
+ extern void whatsapp_Message_Location_Set(long long int handle, long long int val);
408
+ extern long long int whatsapp_Message_Poll_Get(long long int handle);
409
+ extern void whatsapp_Message_Poll_Set(long long int handle, long long int val);
410
+ extern long long int whatsapp_Message_Album_Get(long long int handle);
411
+ extern void whatsapp_Message_Album_Set(long long int handle, long long int val);
412
+ extern long long int whatsapp_Message_GroupInvite_Get(long long int handle);
413
+ extern void whatsapp_Message_GroupInvite_Set(long long int handle, long long int val);
414
+ extern long long int whatsapp_Message_MentionJIDs_Get(long long int handle);
415
+ extern void whatsapp_Message_MentionJIDs_Set(long long int handle, long long int val);
416
+ extern long long int whatsapp_Message_Receipts_Get(long long int handle);
417
+ extern void whatsapp_Message_Receipts_Set(long long int handle, long long int val);
418
+ extern long long int whatsapp_Message_Reactions_Get(long long int handle);
419
+ extern void whatsapp_Message_Reactions_Set(long long int handle, long long int val);
420
+ extern char whatsapp_Message_IsHistory_Get(long long int handle);
421
+ extern void whatsapp_Message_IsHistory_Set(long long int handle, char val);
422
+
423
+ // --- wrapping struct: whatsapp.Presence ---
424
+ //
425
+ extern long long int whatsapp_Presence_CTor();
426
+ extern char* whatsapp_Presence_JID_Get(long long int handle);
427
+ extern void whatsapp_Presence_JID_Set(long long int handle, char* val);
428
+ extern long long int whatsapp_Presence_Kind_Get(long long int handle);
429
+ extern void whatsapp_Presence_Kind_Set(long long int handle, long long int val);
430
+ extern long long int whatsapp_Presence_LastSeen_Get(long long int handle);
431
+ extern void whatsapp_Presence_LastSeen_Set(long long int handle, long long int val);
432
+
433
+ // --- wrapping struct: whatsapp.ChatState ---
434
+ //
435
+ extern long long int whatsapp_ChatState_CTor();
436
+ extern long long int whatsapp_ChatState_Kind_Get(long long int handle);
437
+ extern void whatsapp_ChatState_Kind_Set(long long int handle, long long int val);
438
+ extern char* whatsapp_ChatState_JID_Get(long long int handle);
439
+ extern void whatsapp_ChatState_JID_Set(long long int handle, char* val);
440
+ extern char* whatsapp_ChatState_GroupJID_Get(long long int handle);
441
+ extern void whatsapp_ChatState_GroupJID_Set(long long int handle, char* val);
363
442
 
364
443
  // --- wrapping struct: whatsapp.Contact ---
365
444
  //
@@ -369,6 +448,55 @@ extern void whatsapp_Contact_JID_Set(long long int handle, char* val);
369
448
  extern char* whatsapp_Contact_Name_Get(long long int handle);
370
449
  extern void whatsapp_Contact_Name_Set(long long int handle, char* val);
371
450
 
451
+ // --- wrapping struct: whatsapp.GroupSubject ---
452
+ //
453
+ extern long long int whatsapp_GroupSubject_CTor();
454
+ extern char* whatsapp_GroupSubject_Subject_Get(long long int handle);
455
+ extern void whatsapp_GroupSubject_Subject_Set(long long int handle, char* val);
456
+ extern long long int whatsapp_GroupSubject_SetAt_Get(long long int handle);
457
+ extern void whatsapp_GroupSubject_SetAt_Set(long long int handle, long long int val);
458
+ extern char* whatsapp_GroupSubject_SetBy_Get(long long int handle);
459
+ extern void whatsapp_GroupSubject_SetBy_Set(long long int handle, char* val);
460
+
461
+ // --- wrapping struct: whatsapp.PollOption ---
462
+ //
463
+ extern long long int whatsapp_PollOption_CTor();
464
+ extern char* whatsapp_PollOption_Title_Get(long long int handle);
465
+ extern void whatsapp_PollOption_Title_Set(long long int handle, char* val);
466
+
467
+ // --- wrapping struct: whatsapp.Album ---
468
+ //
469
+ extern long long int whatsapp_Album_CTor();
470
+ extern char whatsapp_Album_IsAlbum_Get(long long int handle);
471
+ extern void whatsapp_Album_IsAlbum_Set(long long int handle, char val);
472
+ extern long long int whatsapp_Album_ImageCount_Get(long long int handle);
473
+ extern void whatsapp_Album_ImageCount_Set(long long int handle, long long int val);
474
+ extern long long int whatsapp_Album_VideoCount_Get(long long int handle);
475
+ extern void whatsapp_Album_VideoCount_Set(long long int handle, long long int val);
476
+
477
+ // --- wrapping struct: whatsapp.Attachment ---
478
+ //
479
+ extern long long int whatsapp_Attachment_CTor();
480
+ extern char* whatsapp_Attachment_MIME_Get(long long int handle);
481
+ extern void whatsapp_Attachment_MIME_Set(long long int handle, char* val);
482
+ extern char* whatsapp_Attachment_Filename_Get(long long int handle);
483
+ extern void whatsapp_Attachment_Filename_Set(long long int handle, char* val);
484
+ extern char* whatsapp_Attachment_Caption_Get(long long int handle);
485
+ extern void whatsapp_Attachment_Caption_Set(long long int handle, char* val);
486
+ extern long long int whatsapp_Attachment_Data_Get(long long int handle);
487
+ extern void whatsapp_Attachment_Data_Set(long long int handle, long long int val);
488
+ extern long long int whatsapp_Attachment_GetSpec(long long int _handle, long long int ctx);
489
+
490
+ // --- wrapping struct: whatsapp.Call ---
491
+ //
492
+ extern long long int whatsapp_Call_CTor();
493
+ extern long long int whatsapp_Call_State_Get(long long int handle);
494
+ extern void whatsapp_Call_State_Set(long long int handle, long long int val);
495
+ extern char* whatsapp_Call_JID_Get(long long int handle);
496
+ extern void whatsapp_Call_JID_Set(long long int handle, char* val);
497
+ extern long long int whatsapp_Call_Timestamp_Get(long long int handle);
498
+ extern void whatsapp_Call_Timestamp_Set(long long int handle, long long int val);
499
+
372
500
  // --- wrapping struct: whatsapp.Group ---
373
501
  //
374
502
  extern long long int whatsapp_Group_CTor();
@@ -385,24 +513,6 @@ extern void whatsapp_Group_Participants_Set(long long int handle, long long int
385
513
  extern char* whatsapp_Group_InviteCode_Get(long long int handle);
386
514
  extern void whatsapp_Group_InviteCode_Set(long long int handle, char* val);
387
515
 
388
- // --- wrapping struct: whatsapp.GroupParticipant ---
389
- //
390
- extern long long int whatsapp_GroupParticipant_CTor();
391
- extern char* whatsapp_GroupParticipant_JID_Get(long long int handle);
392
- extern void whatsapp_GroupParticipant_JID_Set(long long int handle, char* val);
393
- extern char* whatsapp_GroupParticipant_Nickname_Get(long long int handle);
394
- extern void whatsapp_GroupParticipant_Nickname_Set(long long int handle, char* val);
395
- extern long long int whatsapp_GroupParticipant_Affiliation_Get(long long int handle);
396
- extern void whatsapp_GroupParticipant_Affiliation_Set(long long int handle, long long int val);
397
- extern long long int whatsapp_GroupParticipant_Action_Get(long long int handle);
398
- extern void whatsapp_GroupParticipant_Action_Set(long long int handle, long long int val);
399
-
400
- // --- wrapping struct: whatsapp.LoggedOut ---
401
- //
402
- extern long long int whatsapp_LoggedOut_CTor();
403
- extern char* whatsapp_LoggedOut_Reason_Get(long long int handle);
404
- extern void whatsapp_LoggedOut_Reason_Set(long long int handle, char* val);
405
-
406
516
  // --- wrapping struct: whatsapp.Poll ---
407
517
  //
408
518
  extern long long int whatsapp_Poll_CTor();
@@ -411,16 +521,6 @@ extern void whatsapp_Poll_Title_Set(long long int handle, char* val);
411
521
  extern long long int whatsapp_Poll_Options_Get(long long int handle);
412
522
  extern void whatsapp_Poll_Options_Set(long long int handle, long long int val);
413
523
 
414
- // --- wrapping struct: whatsapp.Presence ---
415
- //
416
- extern long long int whatsapp_Presence_CTor();
417
- extern char* whatsapp_Presence_JID_Get(long long int handle);
418
- extern void whatsapp_Presence_JID_Set(long long int handle, char* val);
419
- extern long long int whatsapp_Presence_Kind_Get(long long int handle);
420
- extern void whatsapp_Presence_Kind_Set(long long int handle, long long int val);
421
- extern long long int whatsapp_Presence_LastSeen_Get(long long int handle);
422
- extern void whatsapp_Presence_LastSeen_Set(long long int handle, long long int val);
423
-
424
524
  // --- wrapping struct: whatsapp.Receipt ---
425
525
  //
426
526
  extern long long int whatsapp_Receipt_CTor();
@@ -437,18 +537,30 @@ extern void whatsapp_Receipt_Timestamp_Set(long long int handle, long long int v
437
537
  extern char whatsapp_Receipt_IsCarbon_Get(long long int handle);
438
538
  extern void whatsapp_Receipt_IsCarbon_Set(long long int handle, char val);
439
539
 
440
- // --- wrapping struct: whatsapp.Attachment ---
540
+ // --- wrapping struct: whatsapp.Session ---
441
541
  //
442
- extern long long int whatsapp_Attachment_CTor();
443
- extern char* whatsapp_Attachment_MIME_Get(long long int handle);
444
- extern void whatsapp_Attachment_MIME_Set(long long int handle, char* val);
445
- extern char* whatsapp_Attachment_Filename_Get(long long int handle);
446
- extern void whatsapp_Attachment_Filename_Set(long long int handle, char* val);
447
- extern char* whatsapp_Attachment_Caption_Get(long long int handle);
448
- extern void whatsapp_Attachment_Caption_Set(long long int handle, char* val);
449
- extern long long int whatsapp_Attachment_Data_Get(long long int handle);
450
- extern void whatsapp_Attachment_Data_Set(long long int handle, long long int val);
451
- extern long long int whatsapp_Attachment_GetSpec(long long int _handle, long long int ctx);
542
+ extern long long int whatsapp_Session_CTor();
543
+ extern char* whatsapp_Session_Login(long long int _handle);
544
+ extern char* whatsapp_Session_Logout(long long int _handle);
545
+ extern char* whatsapp_Session_Disconnect(long long int _handle);
546
+ extern char* whatsapp_Session_PairPhone(long long int _handle, char* phone);
547
+ extern char* whatsapp_Session_SendMessage(long long int _handle, long long int message);
548
+ extern char* whatsapp_Session_GenerateMessageID(long long int _handle);
549
+ extern char* whatsapp_Session_SendChatState(long long int _handle, long long int state);
550
+ extern char* whatsapp_Session_SendReceipt(long long int _handle, long long int receipt);
551
+ extern char* whatsapp_Session_SendPresence(long long int _handle, long long int presence, char* statusMessage);
552
+ extern long long int whatsapp_Session_GetContacts(long long int _handle, char refresh);
553
+ extern long long int whatsapp_Session_GetGroups(long long int _handle);
554
+ extern long long int whatsapp_Session_CreateGroup(long long int _handle, char* name, long long int participants);
555
+ extern char* whatsapp_Session_LeaveGroup(long long int _handle, char* resourceID);
556
+ extern long long int whatsapp_Session_GetAvatar(long long int _handle, char* resourceID, char* avatarID);
557
+ extern char* whatsapp_Session_SetAvatar(long long int _handle, char* resourceID, long long int avatar);
558
+ extern char* whatsapp_Session_SetGroupName(long long int _handle, char* resourceID, char* name);
559
+ extern char* whatsapp_Session_SetGroupTopic(long long int _handle, char* resourceID, char* topic);
560
+ extern long long int whatsapp_Session_UpdateGroupParticipants(long long int _handle, char* resourceID, long long int participants);
561
+ extern long long int whatsapp_Session_FindContact(long long int _handle, char* phone);
562
+ extern char* whatsapp_Session_RequestMessageHistory(long long int _handle, char* resourceID, long long int oldestMessage);
563
+ extern void whatsapp_Session_SetEventHandler(long long int _handle, PyObject* h, char goRun);
452
564
 
453
565
  // --- wrapping struct: whatsapp.Connect ---
454
566
  //
@@ -484,110 +596,24 @@ extern void whatsapp_EventPayload_Group_Set(long long int handle, long long int
484
596
  extern long long int whatsapp_EventPayload_Call_Get(long long int handle);
485
597
  extern void whatsapp_EventPayload_Call_Set(long long int handle, long long int val);
486
598
 
487
- // --- wrapping struct: whatsapp.Gateway ---
488
- //
489
- extern long long int whatsapp_Gateway_CTor();
490
- extern char* whatsapp_Gateway_DBPath_Get(long long int handle);
491
- extern void whatsapp_Gateway_DBPath_Set(long long int handle, char* val);
492
- extern char* whatsapp_Gateway_Name_Get(long long int handle);
493
- extern void whatsapp_Gateway_Name_Set(long long int handle, char* val);
494
- extern char* whatsapp_Gateway_LogLevel_Get(long long int handle);
495
- extern void whatsapp_Gateway_LogLevel_Set(long long int handle, char* val);
496
- extern char* whatsapp_Gateway_TempDir_Get(long long int handle);
497
- extern void whatsapp_Gateway_TempDir_Set(long long int handle, char* val);
498
- extern char* whatsapp_Gateway_Init(long long int _handle);
499
- extern long long int whatsapp_Gateway_NewSession(long long int _handle, long long int device);
500
- extern char* whatsapp_Gateway_CleanupSession(long long int _handle, long long int device);
501
-
502
- // --- wrapping struct: whatsapp.GroupSubject ---
503
- //
504
- extern long long int whatsapp_GroupSubject_CTor();
505
- extern char* whatsapp_GroupSubject_Subject_Get(long long int handle);
506
- extern void whatsapp_GroupSubject_Subject_Set(long long int handle, char* val);
507
- extern long long int whatsapp_GroupSubject_SetAt_Get(long long int handle);
508
- extern void whatsapp_GroupSubject_SetAt_Set(long long int handle, long long int val);
509
- extern char* whatsapp_GroupSubject_SetBy_Get(long long int handle);
510
- extern void whatsapp_GroupSubject_SetBy_Set(long long int handle, char* val);
511
-
512
- // --- wrapping struct: whatsapp.Message ---
513
- //
514
- extern long long int whatsapp_Message_CTor();
515
- extern long long int whatsapp_Message_Kind_Get(long long int handle);
516
- extern void whatsapp_Message_Kind_Set(long long int handle, long long int val);
517
- extern char* whatsapp_Message_ID_Get(long long int handle);
518
- extern void whatsapp_Message_ID_Set(long long int handle, char* val);
519
- extern char* whatsapp_Message_JID_Get(long long int handle);
520
- extern void whatsapp_Message_JID_Set(long long int handle, char* val);
521
- extern char* whatsapp_Message_GroupJID_Get(long long int handle);
522
- extern void whatsapp_Message_GroupJID_Set(long long int handle, char* val);
523
- extern char* whatsapp_Message_OriginJID_Get(long long int handle);
524
- extern void whatsapp_Message_OriginJID_Set(long long int handle, char* val);
525
- extern char* whatsapp_Message_Body_Get(long long int handle);
526
- extern void whatsapp_Message_Body_Set(long long int handle, char* val);
527
- extern long long int whatsapp_Message_Timestamp_Get(long long int handle);
528
- extern void whatsapp_Message_Timestamp_Set(long long int handle, long long int val);
529
- extern char whatsapp_Message_IsCarbon_Get(long long int handle);
530
- extern void whatsapp_Message_IsCarbon_Set(long long int handle, char val);
531
- extern char whatsapp_Message_IsForwarded_Get(long long int handle);
532
- extern void whatsapp_Message_IsForwarded_Set(long long int handle, char val);
533
- extern char* whatsapp_Message_ReplyID_Get(long long int handle);
534
- extern void whatsapp_Message_ReplyID_Set(long long int handle, char* val);
535
- extern char* whatsapp_Message_ReplyBody_Get(long long int handle);
536
- extern void whatsapp_Message_ReplyBody_Set(long long int handle, char* val);
537
- extern long long int whatsapp_Message_Attachments_Get(long long int handle);
538
- extern void whatsapp_Message_Attachments_Set(long long int handle, long long int val);
539
- extern long long int whatsapp_Message_Preview_Get(long long int handle);
540
- extern void whatsapp_Message_Preview_Set(long long int handle, long long int val);
541
- extern long long int whatsapp_Message_Location_Get(long long int handle);
542
- extern void whatsapp_Message_Location_Set(long long int handle, long long int val);
543
- extern long long int whatsapp_Message_Poll_Get(long long int handle);
544
- extern void whatsapp_Message_Poll_Set(long long int handle, long long int val);
545
- extern long long int whatsapp_Message_Album_Get(long long int handle);
546
- extern void whatsapp_Message_Album_Set(long long int handle, long long int val);
547
- extern long long int whatsapp_Message_GroupInvite_Get(long long int handle);
548
- extern void whatsapp_Message_GroupInvite_Set(long long int handle, long long int val);
549
- extern long long int whatsapp_Message_MentionJIDs_Get(long long int handle);
550
- extern void whatsapp_Message_MentionJIDs_Set(long long int handle, long long int val);
551
- extern long long int whatsapp_Message_Receipts_Get(long long int handle);
552
- extern void whatsapp_Message_Receipts_Set(long long int handle, long long int val);
553
- extern long long int whatsapp_Message_Reactions_Get(long long int handle);
554
- extern void whatsapp_Message_Reactions_Set(long long int handle, long long int val);
555
- extern char whatsapp_Message_IsHistory_Get(long long int handle);
556
- extern void whatsapp_Message_IsHistory_Set(long long int handle, char val);
557
-
558
- // --- wrapping struct: whatsapp.PollOption ---
559
- //
560
- extern long long int whatsapp_PollOption_CTor();
561
- extern char* whatsapp_PollOption_Title_Get(long long int handle);
562
- extern void whatsapp_PollOption_Title_Set(long long int handle, char* val);
563
-
564
- // --- wrapping struct: whatsapp.Album ---
565
- //
566
- extern long long int whatsapp_Album_CTor();
567
- extern char whatsapp_Album_IsAlbum_Get(long long int handle);
568
- extern void whatsapp_Album_IsAlbum_Set(long long int handle, char val);
569
- extern long long int whatsapp_Album_ImageCount_Get(long long int handle);
570
- extern void whatsapp_Album_ImageCount_Set(long long int handle, long long int val);
571
- extern long long int whatsapp_Album_VideoCount_Get(long long int handle);
572
- extern void whatsapp_Album_VideoCount_Set(long long int handle, long long int val);
573
-
574
- // --- wrapping struct: whatsapp.Avatar ---
599
+ // --- wrapping struct: whatsapp.GroupParticipant ---
575
600
  //
576
- extern long long int whatsapp_Avatar_CTor();
577
- extern char* whatsapp_Avatar_ID_Get(long long int handle);
578
- extern void whatsapp_Avatar_ID_Set(long long int handle, char* val);
579
- extern char* whatsapp_Avatar_URL_Get(long long int handle);
580
- extern void whatsapp_Avatar_URL_Set(long long int handle, char* val);
601
+ extern long long int whatsapp_GroupParticipant_CTor();
602
+ extern char* whatsapp_GroupParticipant_JID_Get(long long int handle);
603
+ extern void whatsapp_GroupParticipant_JID_Set(long long int handle, char* val);
604
+ extern char* whatsapp_GroupParticipant_Nickname_Get(long long int handle);
605
+ extern void whatsapp_GroupParticipant_Nickname_Set(long long int handle, char* val);
606
+ extern long long int whatsapp_GroupParticipant_Affiliation_Get(long long int handle);
607
+ extern void whatsapp_GroupParticipant_Affiliation_Set(long long int handle, long long int val);
608
+ extern long long int whatsapp_GroupParticipant_Action_Get(long long int handle);
609
+ extern void whatsapp_GroupParticipant_Action_Set(long long int handle, long long int val);
581
610
 
582
- // --- wrapping struct: whatsapp.ChatState ---
611
+ // --- wrapping struct: whatsapp.LinkedDevice ---
583
612
  //
584
- extern long long int whatsapp_ChatState_CTor();
585
- extern long long int whatsapp_ChatState_Kind_Get(long long int handle);
586
- extern void whatsapp_ChatState_Kind_Set(long long int handle, long long int val);
587
- extern char* whatsapp_ChatState_JID_Get(long long int handle);
588
- extern void whatsapp_ChatState_JID_Set(long long int handle, char* val);
589
- extern char* whatsapp_ChatState_GroupJID_Get(long long int handle);
590
- extern void whatsapp_ChatState_GroupJID_Set(long long int handle, char* val);
613
+ extern long long int whatsapp_LinkedDevice_CTor();
614
+ extern char* whatsapp_LinkedDevice_ID_Get(long long int handle);
615
+ extern void whatsapp_LinkedDevice_ID_Set(long long int handle, char* val);
616
+ extern long long int whatsapp_LinkedDevice_JID(long long int _handle);
591
617
 
592
618
  // --- wrapping struct: whatsapp.Location ---
593
619
  //
@@ -607,12 +633,11 @@ extern void whatsapp_Location_Address_Set(long long int handle, char* val);
607
633
  extern char* whatsapp_Location_URL_Get(long long int handle);
608
634
  extern void whatsapp_Location_URL_Set(long long int handle, char* val);
609
635
 
610
- // --- wrapping struct: whatsapp.LinkedDevice ---
636
+ // --- wrapping struct: whatsapp.LoggedOut ---
611
637
  //
612
- extern long long int whatsapp_LinkedDevice_CTor();
613
- extern char* whatsapp_LinkedDevice_ID_Get(long long int handle);
614
- extern void whatsapp_LinkedDevice_ID_Set(long long int handle, char* val);
615
- extern long long int whatsapp_LinkedDevice_JID(long long int _handle);
638
+ extern long long int whatsapp_LoggedOut_CTor();
639
+ extern char* whatsapp_LoggedOut_Reason_Get(long long int handle);
640
+ extern void whatsapp_LoggedOut_Reason_Set(long long int handle, char* val);
616
641
 
617
642
  // --- wrapping struct: whatsapp.Preview ---
618
643
  //
@@ -627,31 +652,6 @@ extern char* whatsapp_Preview_Description_Get(long long int handle);
627
652
  extern void whatsapp_Preview_Description_Set(long long int handle, char* val);
628
653
  extern long long int whatsapp_Preview_Thumbnail_Get(long long int handle);
629
654
  extern void whatsapp_Preview_Thumbnail_Set(long long int handle, long long int val);
630
-
631
- // --- wrapping struct: whatsapp.Session ---
632
- //
633
- extern long long int whatsapp_Session_CTor();
634
- extern char* whatsapp_Session_Login(long long int _handle);
635
- extern char* whatsapp_Session_Logout(long long int _handle);
636
- extern char* whatsapp_Session_Disconnect(long long int _handle);
637
- extern char* whatsapp_Session_PairPhone(long long int _handle, char* phone);
638
- extern char* whatsapp_Session_SendMessage(long long int _handle, long long int message);
639
- extern char* whatsapp_Session_GenerateMessageID(long long int _handle);
640
- extern char* whatsapp_Session_SendChatState(long long int _handle, long long int state);
641
- extern char* whatsapp_Session_SendReceipt(long long int _handle, long long int receipt);
642
- extern char* whatsapp_Session_SendPresence(long long int _handle, long long int presence, char* statusMessage);
643
- extern long long int whatsapp_Session_GetContacts(long long int _handle, char refresh);
644
- extern long long int whatsapp_Session_GetGroups(long long int _handle);
645
- extern long long int whatsapp_Session_CreateGroup(long long int _handle, char* name, long long int participants);
646
- extern char* whatsapp_Session_LeaveGroup(long long int _handle, char* resourceID);
647
- extern long long int whatsapp_Session_GetAvatar(long long int _handle, char* resourceID, char* avatarID);
648
- extern char* whatsapp_Session_SetAvatar(long long int _handle, char* resourceID, long long int avatar);
649
- extern char* whatsapp_Session_SetGroupName(long long int _handle, char* resourceID, char* name);
650
- extern char* whatsapp_Session_SetGroupTopic(long long int _handle, char* resourceID, char* topic);
651
- extern long long int whatsapp_Session_UpdateGroupParticipants(long long int _handle, char* resourceID, long long int participants);
652
- extern long long int whatsapp_Session_FindContact(long long int _handle, char* phone);
653
- extern char* whatsapp_Session_RequestMessageHistory(long long int _handle, char* resourceID, long long int oldestMessage);
654
- extern void whatsapp_Session_SetEventHandler(long long int _handle, PyObject* h, char goRun);
655
655
  extern long long int whatsapp_NewGateway();
656
656
  extern char whatsapp_IsAnonymousJID(char* id);
657
657
 
slidge_whatsapp/go.mod CHANGED
@@ -9,9 +9,9 @@ require (
9
9
  github.com/go-python/gopy v0.4.11-0.20241206185020-5f285b890023
10
10
  github.com/h2non/filetype v1.1.3
11
11
  github.com/mattn/go-sqlite3 v1.14.32
12
- go.mau.fi/libsignal v0.2.0
13
- go.mau.fi/whatsmeow v0.0.0-20251003154939-d562355c4d82
14
- golang.org/x/image v0.31.0
12
+ go.mau.fi/libsignal v0.2.1
13
+ go.mau.fi/whatsmeow v0.0.0-20251016095441-02c50743e601
14
+ golang.org/x/image v0.32.0
15
15
  )
16
16
 
17
17
  require (
@@ -27,11 +27,11 @@ require (
27
27
  github.com/petermattis/goid v0.0.0-20250904145737-900bdf8bb490 // indirect
28
28
  github.com/rs/zerolog v1.34.0 // indirect
29
29
  github.com/vektah/gqlparser/v2 v2.5.30 // indirect
30
- go.mau.fi/util v0.9.1 // indirect
31
- golang.org/x/crypto v0.42.0 // indirect
32
- golang.org/x/exp v0.0.0-20251002181428-27f1f14c8bb9 // indirect
33
- golang.org/x/net v0.44.0 // indirect
34
- golang.org/x/sys v0.36.0 // indirect
35
- golang.org/x/text v0.29.0 // indirect
30
+ go.mau.fi/util v0.9.2 // indirect
31
+ golang.org/x/crypto v0.43.0 // indirect
32
+ golang.org/x/exp v0.0.0-20251017212417-90e834f514db // indirect
33
+ golang.org/x/net v0.46.0 // indirect
34
+ golang.org/x/sys v0.37.0 // indirect
35
+ golang.org/x/text v0.30.0 // indirect
36
36
  google.golang.org/protobuf v1.36.10 // indirect
37
37
  )
slidge_whatsapp/go.sum CHANGED
@@ -53,27 +53,27 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu
53
53
  github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
54
54
  github.com/vektah/gqlparser/v2 v2.5.30 h1:EqLwGAFLIzt1wpx1IPpY67DwUujF1OfzgEyDsLrN6kE=
55
55
  github.com/vektah/gqlparser/v2 v2.5.30/go.mod h1:D1/VCZtV3LPnQrcPBeR/q5jkSQIPti0uYCP/RI0gIeo=
56
- go.mau.fi/libsignal v0.2.0 h1:oRXj3OHhEJq51BFEM8/50UZblmWiTYH93hsNTPcbk90=
57
- go.mau.fi/libsignal v0.2.0/go.mod h1:tvjoDsMejgT38CXTXwqaYu8itBiY8O2Mb6biWvZBb9k=
58
- go.mau.fi/util v0.9.1 h1:A+XKHRsjKkFi2qOm4RriR1HqY2hoOXNS3WFHaC89r2Y=
59
- go.mau.fi/util v0.9.1/go.mod h1:M0bM9SyaOWJniaHs9hxEzz91r5ql6gYq6o1q5O1SsjQ=
60
- go.mau.fi/whatsmeow v0.0.0-20251003154939-d562355c4d82 h1:sLwBH2Q70EoOt8uCZb1gCKGwp2hdZG+ObqpXHWJ4sNk=
61
- go.mau.fi/whatsmeow v0.0.0-20251003154939-d562355c4d82/go.mod h1:dvltpCF0rOHbbur25DHbQ3Ovi747z2Pm11S2M7p1T74=
62
- golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI=
63
- golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8=
64
- golang.org/x/exp v0.0.0-20251002181428-27f1f14c8bb9 h1:TQwNpfvNkxAVlItJf6Cr5JTsVZoC/Sj7K3OZv2Pc14A=
65
- golang.org/x/exp v0.0.0-20251002181428-27f1f14c8bb9/go.mod h1:TwQYMMnGpvZyc+JpB/UAuTNIsVJifOlSkrZkhcvpVUk=
66
- golang.org/x/image v0.31.0 h1:mLChjE2MV6g1S7oqbXC0/UcKijjm5fnJLUYKIYrLESA=
67
- golang.org/x/image v0.31.0/go.mod h1:R9ec5Lcp96v9FTF+ajwaH3uGxPH4fKfHHAVbUILxghA=
68
- golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I=
69
- golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY=
56
+ go.mau.fi/libsignal v0.2.1 h1:vRZG4EzTn70XY6Oh/pVKrQGuMHBkAWlGRC22/85m9L0=
57
+ go.mau.fi/libsignal v0.2.1/go.mod h1:iVvjrHyfQqWajOUaMEsIfo3IqgVMrhWcPiiEzk7NgoU=
58
+ go.mau.fi/util v0.9.2 h1:+S4Z03iCsGqU2WY8X2gySFsFjaLlUHFRDVCYvVwynKM=
59
+ go.mau.fi/util v0.9.2/go.mod h1:055elBBCJSdhRsmub7ci9hXZPgGr1U6dYg44cSgRgoU=
60
+ go.mau.fi/whatsmeow v0.0.0-20251016095441-02c50743e601 h1:6tytDOaqizeBVG3OdEojIiJtZXY3DWMvFKNkjbxq4tI=
61
+ go.mau.fi/whatsmeow v0.0.0-20251016095441-02c50743e601/go.mod h1:VJq+D05Fe5EroZxs2StEYD/AsWJO2aQ7Niucz7lCvao=
62
+ golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04=
63
+ golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0=
64
+ golang.org/x/exp v0.0.0-20251017212417-90e834f514db h1:by6IehL4BH5k3e3SJmcoNbOobMey2SLpAF79iPOEBvw=
65
+ golang.org/x/exp v0.0.0-20251017212417-90e834f514db/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70=
66
+ golang.org/x/image v0.32.0 h1:6lZQWq75h7L5IWNk0r+SCpUJ6tUVd3v4ZHnbRKLkUDQ=
67
+ golang.org/x/image v0.32.0/go.mod h1:/R37rrQmKXtO6tYXAjtDLwQgFLHmhW+V6ayXlxzP2Pc=
68
+ golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4=
69
+ golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210=
70
70
  golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
71
71
  golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
72
72
  golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
73
- golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
74
- golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
75
- golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
76
- golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
73
+ golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
74
+ golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
75
+ golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k=
76
+ golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM=
77
77
  google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
78
78
  google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
79
79
  gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
@@ -2,6 +2,7 @@ package session
2
2
 
3
3
  import (
4
4
  "context"
5
+ "errors"
5
6
  "fmt"
6
7
 
7
8
  "go.mau.fi/libsignal/cipher"
@@ -253,12 +254,16 @@ func (d *Cipher) DecryptWithRecord(ctx context.Context, sessionRecord *record.Se
253
254
 
254
255
  // If we received an error using the current session state, loop
255
256
  // through all previous states.
256
- if err != nil {
257
+ if errors.Is(err, signalerror.ErrOldCounter) {
258
+ return nil, nil, err
259
+ } else if err != nil {
257
260
  logger.Warning(err)
258
261
  for i, state := range previousStates {
259
262
  // Try decrypting the message with previous states
260
263
  plaintext, messageKeys, err = d.DecryptWithState(ctx, state, ciphertext)
261
- if err != nil {
264
+ if errors.Is(err, signalerror.ErrOldCounter) {
265
+ return nil, nil, err
266
+ } else if err != nil {
262
267
  continue
263
268
  }
264
269
 
@@ -114,5 +114,6 @@
114
114
  // whole file is limited to that dialect.
115
115
  //
116
116
  // If the filter ends with `(lines commented)`, then ALL lines chosen
117
- // by the filter will be uncommented.
117
+ // by the filter will be uncommented. The `--` comment prefix must be
118
+ // at the beginning of the line with no whitespace ahead of it.
118
119
  package dbutil
@@ -173,6 +173,9 @@ func (db *Database) filterSQLUpgrade(lines [][]byte) (string, error) {
173
173
  }
174
174
  if dialect == db.Dialect {
175
175
  if uncomment {
176
+ if !bytes.HasPrefix(lines[i], []byte("--")) {
177
+ return "", fmt.Errorf("line %d isn't commented even though the dialect filter claimed it is (-- must be at beginning of line)", i+1)
178
+ }
176
179
  output = append(output, bytes.TrimPrefix(lines[i], []byte("--")))
177
180
  } else {
178
181
  output = append(output, lines[i])
@@ -6,7 +6,11 @@
6
6
 
7
7
  package exsync
8
8
 
9
- import "sync"
9
+ import (
10
+ "iter"
11
+ "maps"
12
+ "sync"
13
+ )
10
14
 
11
15
  // Map is a simple map with a built-in mutex.
12
16
  type Map[Key comparable, Value any] struct {
@@ -15,8 +19,13 @@ type Map[Key comparable, Value any] struct {
15
19
  }
16
20
 
17
21
  func NewMap[Key comparable, Value any]() *Map[Key, Value] {
22
+ return NewMapWithData(make(map[Key]Value))
23
+ }
24
+
25
+ // NewMapWithData constructs a Map with the given map as data. Accessing the map directly after passing it here is not safe.
26
+ func NewMapWithData[Key comparable, Value any](data map[Key]Value) *Map[Key, Value] {
18
27
  return &Map[Key, Value]{
19
- data: make(map[Key]Value),
28
+ data: data,
20
29
  }
21
30
  }
22
31
 
@@ -77,18 +86,50 @@ func (sm *Map[Key, Value]) GetOrSet(key Key, value Value) (actual Value, wasGet
77
86
  return
78
87
  }
79
88
 
89
+ // Clear removes all items from the map.
90
+ func (sm *Map[Key, Value]) Clear() {
91
+ sm.lock.Lock()
92
+ clear(sm.data)
93
+ sm.lock.Unlock()
94
+ }
95
+
96
+ // Len returns the number of items in the map.
97
+ func (sm *Map[Key, Value]) Len() int {
98
+ sm.lock.RLock()
99
+ l := len(sm.data)
100
+ sm.lock.RUnlock()
101
+ return l
102
+ }
103
+
104
+ // CopyFrom copies all key/value pairs from the given map into this map, overriding any existing keys.
105
+ // Keys present in this map but not in the given map are not removed.
106
+ func (sm *Map[Key, Value]) CopyFrom(other map[Key]Value) {
107
+ sm.lock.Lock()
108
+ maps.Copy(sm.data, other)
109
+ sm.lock.Unlock()
110
+ }
111
+
80
112
  // Clone returns a copy of the map.
81
113
  func (sm *Map[Key, Value]) Clone() *Map[Key, Value] {
82
- return &Map[Key, Value]{data: sm.CopyData()}
114
+ return NewMapWithData(sm.CopyData())
83
115
  }
84
116
 
85
117
  // CopyData returns a copy of the data in the map as a normal (non-atomic) map.
86
118
  func (sm *Map[Key, Value]) CopyData() map[Key]Value {
87
119
  sm.lock.RLock()
88
- copied := make(map[Key]Value, len(sm.data))
89
- for key, value := range sm.data {
90
- copied[key] = value
91
- }
120
+ copied := maps.Clone(sm.data)
92
121
  sm.lock.RUnlock()
93
122
  return copied
94
123
  }
124
+
125
+ func (sm *Map[Key, Value]) Iter() iter.Seq2[Key, Value] {
126
+ return func(yield func(Key, Value) bool) {
127
+ sm.lock.RLock()
128
+ defer sm.lock.RUnlock()
129
+ for k, v := range sm.data {
130
+ if !yield(k, v) {
131
+ return
132
+ }
133
+ }
134
+ }
135
+ }
@@ -7,6 +7,7 @@
7
7
  package exsync
8
8
 
9
9
  import (
10
+ "iter"
10
11
  "sync"
11
12
  )
12
13
 
@@ -134,3 +135,15 @@ func (s *Set[T]) AsList() []T {
134
135
  s.l.RUnlock()
135
136
  return list
136
137
  }
138
+
139
+ func (s *Set[T]) Iter() iter.Seq[T] {
140
+ return func(yield func(T) bool) {
141
+ s.l.RLock()
142
+ defer s.l.RUnlock()
143
+ for item := range s.m {
144
+ if !yield(item) {
145
+ return
146
+ }
147
+ }
148
+ }
149
+ }