Conversation
Phase 0 - Fix Coordinate Misalignment: - fb.h/fb.cpp: Remove FB_WIDTH/FB_HEIGHT defines; add font_w/font_h to fb_t populated from fbink_get_state(). Convert all color constants and function signatures from RGB565 uint16_t to 8-bit grayscale uint8_t. Remove rgb565_to_gray(). Add fb_mark_dirty/fb_flush/fb_wait_for_complete/ fb_refresh_gc16_partial for deferred refresh support. - font.h/font.cpp: Remove FONT_CHAR_W/FONT_CHAR_H defines. Add font_cell_w()/font_cell_h() getters backed by s_font_w/s_font_h initialized from fb->font_w/fb->font_h. Update all color params uint16_t -> uint8_t. Remove rgb565_to_gray(). - input.h/input.cpp: Change input_open(void) -> input_open(int fb_w, int fb_h). Add swipe and TOUCH_LONG_PRESS types to touch_type_t enum. Store fb_w/fb_h in input_ctx; use them in should_swap_axes and map_touch_point. Add long-press detection (LONG_PRESS_MS=500ms hold with minimal movement). - View files: Replace all FB_WIDTH/FB_HEIGHT/FONT_CHAR_H uses with runtime values from state->fb.width/height and font_cell_h(). Phase 1 - Scaffolding: - Delete compose_view.h/cpp and login_view.h/cpp. - Add auth_view.h/cpp: static instructions splash showing how to create login.txt, with an Exit button only. - views.h: Replace VIEW_LOGIN with VIEW_AUTH_WAIT; remove VIEW_COMPOSE. - app.h: Remove compose_reply_*/compose_root_* fields. Replace images_enabled with profile_images_enabled (default true) and embed_images_enabled (default false). Default view is now VIEW_AUTH_WAIT. - app.cpp: Update includes, view dispatch, image-cache redraw (direct draw calls instead of app_switch_view). app_ensure_auth now switches to VIEW_AUTH_WAIT on failure. Login flow uses auth_view_set_error(). - feed_view.cpp: Remove '+Post' button and compose navigation. Use profile_images_enabled/embed_images_enabled separately. - thread_view.cpp: Remove Reply button from topbar; remove all compose nav. - settings_view.cpp: Two image toggles (Profile Images, Embed Images). Logout navigates to VIEW_AUTH_WAIT. Runtime layout from fb->width/height. - paths.h/cpp: Add skeets_login_txt_path(). - config.cpp: Bump CONFIG_MAX_ENTRIES 64 -> 128. - CMakeLists.txt: Replace login_view.cpp/compose_view.cpp with auth_view.cpp. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ggles Phase 2 – Credential file login: - Replace app_password-in-config flow with login.txt (handle, password, optional pds_url/appview key=value format). On startup: try saved session tokens first; if none, look for login.txt, parse it, call createSession, save tokens, then delete the file. On error delete login.txt and display message on auth screen. - Add appview_url field to Bsky::Session and persist it in config.ini. - Remove createPost()/PostCreatedCb from AtprotoClient (unused). Phase 3 – Like & repost interaction: - Add viewer_like, viewer_repost, reposted_by fields to Bsky::Post. - Extract mViewer->mLike/mRepost in convertPostView(). - Extract FeedViewPostReasonType::REASON_REPOST in getTimeline() loop. - Add likePost, unlikePost, repostPost, unrepostPost to AtprotoClient using ATProto::PostMaster (synchronous QEventLoop pattern). - feed_view: stats line shows ♥/♡ and ⟳/⟲ based on viewer state; repost attribution line (⟳ Reposted by @handle) above author line; tapping like/repost zones does optimistic update + async API call with rollback on error; taps outside the zone navigate to thread. - thread_view: stats line reflects viewer like state (♥/♡); tapping the like zone on the root post performs like/unlike with rollback. Phase 3.5 – Dual image toggles: - thread_view: wrap avatar image_cache_lookup with profile_images bool (new parameter on draw_thread_post, sourced from state->profile_images_enabled). feed_view already complete. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…sk eviction, README update - Phase 4a: swipe detection (SWIPE_MIN_DIST=80px, SWIPE_MIN_VEL=0.2px/ms) in BTN_TOUCH up handler; stationary long-press via poll() timeout path; reset last_emit_type=TOUCH_NONE on TOUCH_DOWN - Phase 4b: TOUCH_SWIPE_UP/DOWN handling in feed_view and thread_view (half-screen scroll step per swipe) - B4: JWT refresh tracking — session_last_refresh field in app_state; proactive resumeSession when token >85 minutes old in app_ensure_auth() - B5: recursive flattenReplies() in atproto_client replaces single-level loop - B7: image_evict_disk_cache() LRU evicts oldest disk cache files on startup (50 MB cap); called from app_init() - B8: in-memory image cache upgraded to LRU — last_accessed timestamp on every entry, evict_if_full() picks oldest non-loading entry - B9: font_draw_wrapped_fallback() bounds-check before memcpy to prevent char line[512] overflow on very long words - B16: hash-collision guard in image_cache_lookup() — url stored per entry, evict and re-fetch on mismatch - Phase 6: README Getting Started / Authentication section documenting login.txt flow and appview field; removed compose/reply references Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…e constants, cleaner snprintf check Co-authored-by: Ashex <4143436+Ashex@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Implement plan outlined in implementation document
sKeets v2: implement full rewrite plan (Phases 0–6)
Mar 11, 2026
Co-authored-by: Ashex <4143436+Ashex@users.noreply.github.com>
Copilot
AI
changed the title
sKeets v2: implement full rewrite plan (Phases 0–6)
fix: remove i2c-tools submodule from fbink ExternalProject to unblock CI
Mar 11, 2026
… ninja Co-authored-by: Ashex <4143436+Ashex@users.noreply.github.com>
Copilot
AI
changed the title
fix: remove i2c-tools submodule from fbink ExternalProject to unblock CI
Fix CI build failure and update README build instructions
Mar 11, 2026
…obo static build actually uses, including i2c-tools and libevdev. That removed the failing libi2c.built step. sKeets/src/util/image.h now includes the standard header needed for size_t, which fixed the image cache compile break. sKeets/src/atproto/atproto_client.cpp was updated to match the pinned libatproto API: feed reasons are now handled as an optional variant, and like/repost calls now pass the required viaUri and viaCid arguments.
Copilot stopped work on behalf of
Ashex due to an error
March 11, 2026 10:31
Ashex
pushed a commit
that referenced
this pull request
Mar 12, 2026
* Heavy rewrite * Promote rewrite to main codebase * Finish removing legacy code and restructure * Pretty buttons * Feed with cache cleanup * Fix packaging for github ---------
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two issues are addressed: the CI build was failing due to an unreachable
i2c-toolssubmodule, and the README described aMakefileandmakecommands that don't exist in the repo.Build fix
i2c-toolsfromGIT_SUBMODULESin theExternalProject_Add(fbink_ext)call —git.kernel.orgwas returning HTTP 502, aborting the entire FBInk clone step. This submodule is only needed for I²C bus access (battery/temp sensors), unused by theKOBO=1 IMAGE=1 OPENTYPE=1build flags.README corrections
Makefilewithmake build/clean/rebuild) with a "Docker build" section pointing to./docker-build.sh-GNinja+ninja, consistent withdocker-build.shand CImake kobo-package→ninja kobo-package(the target is defined in CMake; the build uses Ninja)Original prompt
Created from Copilot CLI via the copilot delegate command.
🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.