<feed xmlns='http://www.w3.org/2005/Atom'>
<title>android/rsend, branch 0.1.1</title>
<subtitle>[no description]</subtitle>
<link rel='alternate' type='text/html' href='http://git.0xlena.dev/android/rsend/'/>
<entry>
<title>app: release 0.1.1</title>
<updated>2026-07-01T00:00:00+00:00</updated>
<author>
<name>Lena</name>
<email>lena@omega</email>
</author>
<published>2026-07-01T00:00:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.0xlena.dev/android/rsend/commit/?id=48a9af712d13ac885d8945df29e88c291dfc07f6'/>
<id>48a9af712d13ac885d8945df29e88c291dfc07f6</id>
<content type='text'>
versionCode 2. Empty-path and config-corruption fixes, rsync process
cleanup on stopped syncs, keygen error reporting, and the store icon.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
versionCode 2. Empty-path and config-corruption fixes, rsync process
cleanup on stopped syncs, keygen error reporting, and the store icon.
</pre>
</div>
</content>
</entry>
<entry>
<title>metadata: add the fastlane store icon</title>
<updated>2026-07-01T00:00:00+00:00</updated>
<author>
<name>Lena</name>
<email>lena@omega</email>
</author>
<published>2026-07-01T00:00:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.0xlena.dev/android/rsend/commit/?id=6cbbfba9fd19caa1b204b536c4d4d12f0b9a0226'/>
<id>6cbbfba9fd19caa1b204b536c4d4d12f0b9a0226</id>
<content type='text'>
The app ships only an adaptive vector launcher icon, which F-Droid
cannot render, so the store listing showed no icon. Ship a 512x512
raster of the same mark where F-Droid looks for it (fastlane images/
icon.png).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The app ships only an adaptive vector launcher icon, which F-Droid
cannot render, so the store listing showed no icon. Ship a 512x512
raster of the same mark where F-Droid looks for it (fastlane images/
icon.png).
</pre>
</div>
</content>
</entry>
<entry>
<title>ci: remove unused testsshd</title>
<updated>2026-07-01T00:00:00+00:00</updated>
<author>
<name>Lena</name>
<email>lena@omega</email>
</author>
<published>2026-07-01T00:00:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.0xlena.dev/android/rsend/commit/?id=04fede70866f209a8cb9dfe8736872fc25009336'/>
<id>04fede70866f209a8cb9dfe8736872fc25009336</id>
<content type='text'>
Nothing referenced it: the rsh tests run their own in-process SSH
server (sshserver_test.go), which testsshd largely duplicated.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Nothing referenced it: the rsh tests run their own in-process SSH
server (sshserver_test.go), which testsshd largely duplicated.
</pre>
</div>
</content>
</entry>
<entry>
<title>ci: make release.sh idempotent</title>
<updated>2026-07-01T00:00:00+00:00</updated>
<author>
<name>Lena</name>
<email>lena@omega</email>
</author>
<published>2026-07-01T00:00:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.0xlena.dev/android/rsend/commit/?id=fb3199b4a993be16804129111c0bb35cc39a70f3'/>
<id>fb3199b4a993be16804129111c0bb35cc39a70f3</id>
<content type='text'>
Re-running on the same tag died creating a release that already
existed. Reuse the tag's release when present, replace a stale asset
before uploading, and parse API responses with python3 instead of sed.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Re-running on the same tag died creating a release that already
existed. Reuse the tag's release when present, replace a stale asset
before uploading, and parse API responses with python3 instead of sed.
</pre>
</div>
</content>
</entry>
<entry>
<title>ci: fail when gradle pins drift from versions</title>
<updated>2026-07-01T00:00:00+00:00</updated>
<author>
<name>Lena</name>
<email>lena@omega</email>
</author>
<published>2026-07-01T00:00:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.0xlena.dev/android/rsend/commit/?id=80a4a209d63e55ff09c7f31b59358bfe56b055b4'/>
<id>80a4a209d63e55ff09c7f31b59358bfe56b055b4</id>
<content type='text'>
The gradle files and go.mod repeat pins from versions because gradle
cannot source a shell file. Compare them in ci/test.sh so a bump that
misses a copy fails loud instead of silently building with the old
version.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The gradle files and go.mod repeat pins from versions because gradle
cannot source a shell file. Compare them in ci/test.sh so a bump that
misses a copy fails loud instead of silently building with the old
version.
</pre>
</div>
</content>
</entry>
<entry>
<title>ci: pin the exact JDK release</title>
<updated>2026-07-01T00:00:00+00:00</updated>
<author>
<name>Lena</name>
<email>lena@omega</email>
</author>
<published>2026-07-01T00:00:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.0xlena.dev/android/rsend/commit/?id=f8253eace9d231b276024dd66406d890c1d954e1'/>
<id>f8253eace9d231b276024dd66406d890c1d954e1</id>
<content type='text'>
The Adoptium "latest 17 GA" endpoint floats while versions promises
never to float. Pin the full Temurin build and fetch it by version.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The Adoptium "latest 17 GA" endpoint floats while versions promises
never to float. Pin the full Temurin build and fetch it by version.
</pre>
</div>
</content>
</entry>
<entry>
<title>app: anchor the picker start path at the storage root</title>
<updated>2026-07-01T00:00:00+00:00</updated>
<author>
<name>Lena</name>
<email>lena@omega</email>
</author>
<published>2026-07-01T00:00:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.0xlena.dev/android/rsend/commit/?id=2c867cf95341daed1509e3cc48fec9de72cfe2f2'/>
<id>2c867cf95341daed1509e3cc48fec9de72cfe2f2</id>
<content type='text'>
The containment check was a bare prefix match, so a sibling such as
/storage/emulated/0-evil passed for a root of /storage/emulated/0.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The containment check was a bare prefix match, so a sibling such as
/storage/emulated/0-evil passed for a root of /storage/emulated/0.
</pre>
</div>
</content>
</entry>
<entry>
<title>app: write config atomically</title>
<updated>2026-07-01T00:00:00+00:00</updated>
<author>
<name>Lena</name>
<email>lena@omega</email>
</author>
<published>2026-07-01T00:00:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.0xlena.dev/android/rsend/commit/?id=d804eb4399850fe828462b3a1832a4c9df1541f8'/>
<id>d804eb4399850fe828462b3a1832a4c9df1541f8</id>
<content type='text'>
A crash mid-write corrupted config.json, and every later load then
threw on parse, crash-looping the app until its data was cleared,
losing the key and pinned host. Write to a temp file and rename.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
A crash mid-write corrupted config.json, and every later load then
threw on parse, crash-looping the app until its data was cleared,
losing the key and pinned host. Write to a temp file and rename.
</pre>
</div>
</content>
</entry>
<entry>
<title>app: kill rsync when a sync is stopped</title>
<updated>2026-07-01T00:00:00+00:00</updated>
<author>
<name>Lena</name>
<email>lena@omega</email>
</author>
<published>2026-07-01T00:00:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.0xlena.dev/android/rsend/commit/?id=d2745c0cca84ea006fa44edb4d9bbebffd35d917'/>
<id>d2745c0cca84ea006fa44edb4d9bbebffd35d917</id>
<content type='text'>
A stopped worker (schedule replaced, constraints lost) left rsync
running detached until its own network timeout, including a window
where a WiFi-only sync kept pushing on another network. A watchdog
coroutine destroys the process on cancellation, which also closes its
pipes and unblocks the log reader; the worker rethrows cancellation
instead of logging it as a folder error.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
A stopped worker (schedule replaced, constraints lost) left rsync
running detached until its own network timeout, including a window
where a WiFi-only sync kept pushing on another network. A watchdog
coroutine destroys the process on cancellation, which also closes its
pipes and unblocks the log reader; the worker rethrows cancellation
instead of logging it as a folder error.
</pre>
</div>
</content>
</entry>
<entry>
<title>app: refuse folder mappings with empty paths</title>
<updated>2026-07-01T00:00:00+00:00</updated>
<author>
<name>Lena</name>
<email>lena@omega</email>
</author>
<published>2026-07-01T00:00:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.0xlena.dev/android/rsend/commit/?id=f3889d4fb5659c94f4ec957219bebada8d1a67fb'/>
<id>f3889d4fb5659c94f4ec957219bebada8d1a67fb</id>
<content type='text'>
The trailing-slash fix-up turns an empty local path into /, so a blank
folder row would rsync the entire filesystem; an empty remote path
pushes into the rrsync root. Reject both when saving a folder, skip and
log them at run time in case the config was edited by hand, and log why
a sync was skipped when the app is not configured yet.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The trailing-slash fix-up turns an empty local path into /, so a blank
folder row would rsync the entire filesystem; an empty remote path
pushes into the rrsync root. Reject both when saving a folder, skip and
log them at run time in case the config was edited by hand, and log why
a sync was skipped when the app is not configured yet.
</pre>
</div>
</content>
</entry>
</feed>
