Repository navigation
Conversation
The composer sheet gets the web's clock button. It opens "Submit at" with the system date and time picker in the phone's timezone, and Commit becomes Schedule commit. Scheduled commits are listed on their own screen, reached from "Scheduled commits →" as on the web, where one still waiting can be edited or canceled. Account gets the web's Timezone section between Color and Pastéis mode. NativePHP doesn't tell PHP the phone's timezone, so App\Devnull\Timezone reads it from where /etc/localtime links, as the C library does. Day markers now count days in the phone's timezone, and tapping the focused commit's time says when it was made in yours. Needs the timezone, scheduling and scheduled-commit API PRs on devnull. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
NativePHP/mobile-air#566 adds the phone's timezone to Device.GetInfo on iOS and Android. Timezone::phone() now reads it from there first and only follows /etc/localtime when the device info doesn't carry it, as with builds from before that change. Android gets a timezone this way, since it has no /etc/localtime. Device.GetInfo does more than read the zone (on Android it reads memory info and the WebView version), and the notifications page asks for the phone's timezone twice a row. So Timezone is now bound once and keeps the answer for a minute before asking again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
simonhamp
force-pushed
the
feat/scheduling
branch
from
October 21, 2026 13:49
1e30777 to
8c3ce95
Compare
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.
Brings the web's scheduled commits and timezone setting to the app.
It needs three devnull API PRs: nunomaduro/dev-null.sh#669 (timezone on
/me), #670 (scheduling) and #671 (listing, editing and canceling). Until they merge, the new parts get a 404 from dev-null.sh and show devnull's error, and the timezone section stays unset.Scheduling
The composer sheet gets the web's clock button, at the start of the counter's row. It opens "Submit at" under the field with the system date and time picker (
native:date-picker, compact on iOS) in the phone's timezone, limited to the next 30 days, with the web's lines on what scheduling means and a "Scheduled commits →" link. The bar's check becomes Schedule commit and waits for a time. As on the web, a/featureor/bugdraft can't be scheduled: scheduling, a command stays text, and an issue draft has no clock. A time the phone's timezone skips, like 01:30 on the night the clocks go forward, gets the web's message. Once devnull has it, the sheet closes with the web's toast and the draft is cleared. Quotes have no clock, as on the web."Scheduled commits →" opens a new screen, pushed in the tab it was opened from, laid out like the web's page: its intro, "Times in …", then each one with its status, time, body, poll options and image count. One still waiting has Edit and Cancel. Edit opens a sheet with its body and time, which saves both. The web has no edit, so this uses the new
PUTfrom #671. A submitted one says what became of it and opens its commit.Timezone
Account gets the web's Timezone section between Color and Pastéis mode: the timezone chosen (or
null), the phone's, Choose timezone (a sheet with a search field, listing the timezones at the phone's offset until you type, then up to 50 matches by offset), "Use … from this phone", Unset, and Save timezone.App\Devnull\Timezoneasks NativePHP for the phone's timezone first. NativePHP/mobile-air#566 (draft) adds it toDevice.GetInfoon iOS and Android. Native builds without that change don't send it, so then it reads the zone the way the C library does, from where/etc/localtimelinks (…/zoneinfo/Europe/Lisbon). That fallback works on the simulator. On a real iPhone it goes through/var/db/timezone/localtime, which I couldn't try, and Android has no/etc/localtimeat all. When neither tells, the chosen timezone or UTC stands in. Until #566 is incombined/dev-null-appand the lock moves to it, the app always takes the fallback.Timezoneis bound once and keeps the phone's timezone for a minute before asking again.Device.GetInfodoes more than read the zone (on Android it reads memory info and the WebView version), and the Notifications page asks for the zone twice a row.What uses it, matching the web:
Worth checking
sheetPosting,DraftsIssues::canDraftIssue()returns false while scheduling, and scheduled bodies open their links through the sameopenLink()as a feed. Main already takes one-character commits (Commit::MinLengthis 1), and scheduling and the edit sheet useCommit::fits(), so one character can be scheduled too.TestCasebinds aTimezonewith no localtime (so UTC unless a test's fake bridge sends a timezone inDevice.GetInfo), andphoneIn('Europe/Lisbon')intests/Pest.phpputs the phone somewhere through localtime.Testing
1,153 tests pass (
php artisan test --compact) after the rebase, and Pint is clean. The simulator checks below were done before the rebase.Checked on an iOS 27 simulator against the three API branches merged together, served through a tunnel.
local-dev. The phone's timezone was read asAtlantic/Canaryfrom the simulator's/etc/localtime.commits:submit-scheduled, and canceling it then got the 409 toast and a refreshed list showing "Submitted for review" with a link to the pending commit.Asia/Tokyoon Account and saved it, then tapped a commit's time: it showed in Tokyo time. Unset, it showed in Canary time.Not tried: a real iPhone (the
/etc/localtimeread goes through one more link there) or Android. TheDevice.GetInfopath is covered by tests with a fake bridge but hasn't run in a build yet.Screenshots live on the
scheduling-screenshotsbranch; delete it after merging.🤖 Generated with Claude Code