Commit Graph
6514 Commits
Author SHA1 Message Date
shum 3b95ce55d7 plan: draw every iOS screen at one size 2026-08-27 10:28:26 +00:00
shum fc58bff91a plan: give the badges flow named lanes and clear routing 2026-08-27 10:28:26 +00:00
shum bd3c9cd01d plan: lay out badges flow as a left-to-right tree 2026-08-27 10:28:26 +00:00
shum c14f3138d4 plan: add arrowheads and separate overlapping connectors 2026-08-27 10:28:26 +00:00
shum a770fa6fd4 plan: draw badges flow as a tree with labelled transitions 2026-08-27 10:28:26 +00:00
shum 394c299c9f plan: stack badges alternatives under their parent screens 2026-08-27 10:28:26 +00:00
shum 64279ff668 plan: add badges site landing page 2026-08-27 10:28:26 +00:00
shum 9e7038397e plan: shorten badges flow return connector 2026-08-27 10:28:26 +00:00
shum 043de3490e plan: real badge art, site idiom and initial screen 2026-08-27 10:28:26 +00:00
shum 4ca5e34610 plan: expand badges flow diagram to every scenario 2026-08-27 10:28:26 +00:00
shum 78ad447e62 plan: badges flow diagram for app and web 2026-08-27 10:28:26 +00:00
shum 69261ce89d plan: record b5 sweeper scheduling gap for b7 2026-08-27 10:28:26 +00:00
shum 12829a42d0 core: bound badge throttle map to actual failures 2026-08-27 10:28:26 +00:00
shum f4331ea84d core: rename cli command type to avoid protocol clash 2026-08-27 10:28:26 +00:00
shum 5de54a6a73 core: badge codes operator subcommand 2026-08-27 10:28:26 +00:00
shum a16695326c core: badge service rpc dispatcher 2026-08-27 10:28:26 +00:00
shum 412e5dfb48 core: badge issuer key and signing 2026-08-27 10:28:26 +00:00
shum 0c04c0ac99 test: verify advance boundary independently of its own formula 2026-08-27 10:28:26 +00:00
shum f284120410 core: fix ledger month boundary drift 2026-08-27 10:28:26 +00:00
shum 3ca33fd185 core: consolidate supporter badge test groups 2026-08-27 10:28:26 +00:00
shum a876e8a99e core: badge redemption codes 2026-08-27 10:28:26 +00:00
shum 43583dd9b5 plan: record b1 store vocabulary findings 2026-08-27 10:28:26 +00:00
shum f85c7eee2b core: badge ledger transitions 2026-08-27 10:28:26 +00:00
shum 6f272acef7 core: badge service store layer 2026-08-27 10:28:26 +00:00
shum baa18653ff plan: fix ambiguous build command 2026-08-27 10:28:26 +00:00
shum 74dc4bed59 plan: record a6 ini duplicate and clock findings 2026-08-27 10:28:26 +00:00
shum 1cb6390ce0 core: badge service config file 2026-08-27 10:28:26 +00:00
shum f36e93de46 plan: record a4 error blast radius for b6 2026-08-27 10:28:26 +00:00
shum 89e1095842 core: guard badge offer totals and item status encoding 2026-08-27 10:28:26 +00:00
shum 552eec32ea core: badge catalog pricing and seeding 2026-08-27 10:28:26 +00:00
shum 2726826903 core: badge service dependencies 2026-08-27 10:28:26 +00:00
shum 0335c3903a core: badge service web order schema 2026-08-27 10:28:26 +00:00
shum 704b5b1c7f core: regenerate postgres schema dump 2026-08-27 10:28:26 +00:00
shum 400d12a647 core: json instances for badge protocol types 2026-08-27 10:28:26 +00:00
shum 2d37be9474 plan: record a2 id type findings 2026-08-27 09:11:32 +00:00
shum 754aec1809 plan: record a1 postgres dump and lint gaps 2026-08-27 09:11:32 +00:00
shum 1b9b6faadb core: register badge migration, strict tables 2026-08-27 09:11:32 +00:00
shum 3cf7c2cb11 ui: remove badge store purchase action 2026-08-27 09:11:26 +00:00
shum 3c11e3254f plan: badges web checkout and code redemption 2026-08-27 09:11:26 +00:00
spaced4ndy 7d54a5b960 Merge branch 'master' into badges 2026-08-27 12:14:25 +04:00
EvgenyandEvgeny @ SimpleX Chat 1c7bc1aed4 core: refactor badge types (#7387)
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-08-27 08:02:46 +01:00
Evgeny Poberezkin f2856c1be1 website: fix image 2026-08-27 08:01:18 +01:00
Evgeny Poberezkin 78332d0c73 Merge branch 'master' into badges 2026-08-27 07:59:57 +01:00
EvgenyandEvgeny @ SimpleX Chat 3923cb0f2a website: update livestream page (#7422)
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-08-26 18:33:44 +01:00
EvgenyandEvgeny @ SimpleX Chat 10adabf5f7 ui: show role (if exists) and remove "new" in open channel/group alerts (#7417)
* ui: show role (if exists) and remove "new" in open channel/group alerts

* restore removed strings

* info color

* docs

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-08-26 11:43:36 +01:00
Evgeny Poberezkin 4e1d14a10a website: update livestream page 2026-08-26 10:55:57 +01:00
EvgenyandEvgeny @ SimpleX Chat 315b3f932d website: livestream page (#7420)
* website: livestream page

* update livestream page

* fix footer

* footer years

* add link

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-08-26 08:45:22 +01:00
Evgeny c14770ce51 core: fix test for aborting connection switching (pin to previous version) (#7418) 2026-08-25 13:13:16 +01:00
EvgenyandEvgeny @ SimpleX Chat 17cdef1692 core: include channel link and name when forwarding messages (#7409)
* core: include channel link and name when forwarding messages

* wip

* simplify

* add member ID

* refactor

* refactor

* refactor

* update api types

* store forward source group type

* rename

* api types

* simpler layout

* layout, translations

* refactor ios

* public

* simpler

* refactor kotlin

* padding

* padding

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-08-24 21:36:57 +01:00
Narasimha-scandsh 1196d362ee desktop: animate GIFs and animated WebP (#7365)
* desktop: add bounded animated image decoder

Skia's Codec is already on the desktop classpath through skiko and decodes
both GIF and animated WebP. The frames come from a file somebody else
composed, so the decoder is bounded before it allocates: the raster is
measured in bytes with the sides multiplied as Long, each side is capped
separately so an extreme aspect ratio cannot slip under the byte budget, and
the encoded size is checked before the bytes are copied into native memory.
Anything outside the bounds, or any failure, keeps the still image the chat
already renders.

Nothing calls this yet.

* desktop: animate GIFs in chat items and full screen

Both views drew the first frame only. The full screen view also decoded its
still on every recomposition, which an animation recomposes once per frame,
so that decode is remembered against the data it comes from.

The chat list preview stays a still image: it is a 36dp box that the desktop
layout keeps on screen the whole time, so animating it would hold a raster and
spend a frame of work per listed chat, without pause.

Removes the two markers left for this work.

* desktop: don't decode animation frames that cannot be seen

With media blur on, a blurred image is only revealed while the mouse is over
it, so every frame was decoded, uploaded and then blurred away again for
nobody - and the blur is a render effect re-run per frame. Frames now decode
only while the image can be seen, which also stops motion showing through a
blur that is there to hide it.

Passing the blur state to the view is why the shared signature changes; coil
drives its own animation on Android, so there is nothing to pause there.

* docs: move animated images plan to plans/

* docs: drop file path references from animated images plan

* docs: correct animated images plan against the code

* desktop: correct animated image comments

* desktop: reduce animated image comments

* desktop: correct and bound animated image decoding

* docs: correct animated images plan against measurements

* desktop: fuse the animation prior frame decision

* docs: cover desktop animated images in spec and product

* desktop: drop the unused animated image component

* desktop: return the animation frame instead of its state

* docs: correct the animated images documentation

* desktop: don't decode animations under the full screen viewer

* desktop: bound the frames an animation rebuilds

* desktop: pause animations under any full screen modal

* desktop: stop animations that alternate expensive frames

* desktop: read what playing a frame needs only once

* desktop: close the codec of an animation outside the bounds

* desktop: wait out what an animation frame cost to decode

* docs: correct animated images claims against the code

* desktop: bound the frame count where the others are bounded

* desktop: don't wait out a stall an animation frame did not spend

* desktop: say what the slow frame constants stand for

* desktop: don't decode animations behind a minimised window

* desktop: make the animation frame wait testable

* desktop: bound the file size where the others are bounded

* desktop: pin the frame wait clamp in its test

* desktop: keep the frame wait clamp private

* desktop: reduce animated image comments

---------

Co-authored-by: sh <github.shum@liber.li>
2026-08-21 20:30:11 +01:00