Short: Unofficial native Telegram chat client Uploader: michele.dipace@kaffeine.net (Michele Dipace) Author: Michele Dipace Type: comm/tcp Version: 0.0.96 Replaces: comm/tcp/TelegramAmiga-MOS.lha Architecture: ppc-morphos Requires: MorphOS 3.x with its TCP/IP stack WHAT IS THIS? ------------- Unofficial Telegram Amiga: it uses the Telegram API and is part of the Telegram ecosystem, but it is not made by Telegram. Telegram Amiga brings real, live Telegram chat to the Amiga -- not through a gateway, a proxy service or a web wrapper, but by speaking Telegram's own MTProto protocol natively, from scratch, on your machine. You sign in to your normal Telegram account, your chat list appears, and you talk to people (and they talk back) on hardware that may well be older than they are. Everything is built in: RSA, Diffie-Hellman, AES, SHA and the SRP two- factor login are implemented inside the program. Zero external dependencies -- no MUI, no ixemul.library, no AmiSSL, no TCP helper beyond your system's own bsdsocket stack. One program, two faces, one engine and one saved login: TelegramAmiga - the native Intuition/GadTools GUI: chat list with real profile-picture avatars, message bubbles, scrollbars, mouse wheel, context menus. This package ships its icon. The same binary also runs a full-screen text/console client from a Shell -- the manual gives the command line. WHAT CAN I ACTUALLY DO WITH IT? ------------------------------- Read and send messages in private chats, groups and channels. Download a received file (right-click -> Download) or send one from disk, up to 250 MiB on this build, including files over 10 MiB. Photos appear immediately as blurred previews, refine from a bounded download and reuse decoded pixels from disk when reopened. Click one for a larger progressive viewer, or disable inline loading on a slower machine and open only the images you choose. Forward one message to Saved Messages in a click, or choose another destination through chat search. Use the pinned Saved Messages chat as a cloud transfer drawer between the Amiga and your phone or PC. Reply to a specific message (right-click it). Edit or delete your own messages. See real delivery state: one tick = sent, two blue ticks = read, updating live. See who is typing. Search for chats. Send messages from your desk at work and find the conversation already synced when you get home to the Amiga -- and the other way round. Message times follow your Amiga clock. Unread badges and your chat order survive restarts. The window remembers where you left it, and can open on its own screen if you prefer a dedicated page for chatting. GETTING STARTED --------------- 1. Copy this drawer to a WRITABLE volume (not from the archive directly). 2. Double-click TelegramAmiga (or TelegramAmiga-TUI on very low-end setups). 3. First run walks you through the normal Telegram login: phone number, the code Telegram sends you, and your cloud password if you use two-factor. That is all -- next time it goes straight to your chats. The login is stored in telegram-auth.bin next to the program. Treat that file like a house key: NEVER copy it around or share it -- anyone who has it has your Telegram session. Full EN and IT manuals are in the archive, including per-platform notes and troubleshooting. WHAT IS NEW IN 0.0.96 --------------------- FIXED - Typing in the window keeps up with the keys on a stock A1200. Since 0.0.8 only machines running AfA OS redrew just the text field after each key; everywhere else every key redrew the whole window, which on a 14 MHz 68EC020 took about three seconds a letter. Every system now redraws the field alone while its height stays the same, the way the blinking cursor already did, and copies only that strip to the screen. While the keys are flowing, a new message, someone typing or a photo step waits for a two-second pause before it redraws the window, but only where such a redraw measured over 300 ms; fast systems keep showing them at once. - A drawer copied from a fast machine no longer opens a stock A1200 with inline photos. Turning inline photos or emoji on or off saved that choice for good, even when it only matched what the machine picks by itself, and the choice travelled with the drawer. Such a choice is now saved as "auto", so each machine applies its own default; a choice against the default is still kept and travels as before. A file written by an older version keeps its choice until it is changed once. - A download that cannot fit is refused before its first byte, with the sizes: "Need 4097 KB, only 2130 KB free in RAM:". A 4 MB file into RAM: on a stock A1200 with the window open used to stop at 2.3 MB, minutes in, and the part it had was removed. On the RAM disk the room is the free memory, since an older ram-handler always reports itself full; a volume that reports no room at all is left to try, as it may simply not know. When a write fails on a full volume, the window and the text client now say "RAM: is full, stopped at 2240 KB" instead of "Could not write to RAM:". - The window opens at once, on the cached chat list, with "Connecting to Telegram..." in the status bar, and connects from there. It used to connect first and open only afterwards: on a stock A1200 with a stalled link that meant two and a half minutes of nothing, which from Workbench looked like a program that does not start. When the connection fails, the status bar says why, for example "Offline: cannot reach Telegram"; the reason used to go to a console that a Workbench launch does not have. - Chats hidden from the list stay hidden when the window cannot connect. The offline list read the chat cache directly and showed them again. - Avatars no longer hold the window back on a slow machine. On a 68k below the 68040 the first paint shows initials and the avatars are built afterwards, one per idle moment, four at a time on screen; elsewhere a paint builds them for up to 300 ms and leaves the rest for later. Each processed 32x32 avatar is kept next to its JPEG (avatars/*.rgb), so the next start skips the decode that cost about four seconds an avatar on a stock A1200 and kept its window away for a minute. - The context menu follows the pointer on a stock A1200. Opening it and moving to another item redrew the whole window, about three seconds each time, so the highlight trailed far behind and the right item was hard to pick. Both now redraw only the menu's own box. - Typing and menus no longer stall while avatars arrive on a slow machine. An avatar is built only after two seconds without input and with no menu or popup open, and then only the chat list is redrawn; one full redraw follows when all of them are done. On a 68k below the 68040 each avatar is built at 20x20, the size the chat list shows, with the JPEG decoded at 1/8 (block averages, no IDCT) and 400 colour lookups instead of 1024. The nearest-colour search behind avatars, photos and emoji now runs in the part of the program the 68k builds compile at -O2, with a table of squares instead of multiplications, and picks exactly the same pens. On a stock A1200 an avatar took 4.5 s: 2.5 s to decode, 1.6 s for colours. - Emoji keep their colours on a paletted screen such as a 32- or 64-colour AGA Workbench, where the yellow faces came out brown. The emoji artwork uses 228 colours, mostly anti-aliased shades, and they were requested one by one in palette order until the screen ran out of pens, so the main yellow got whatever brown was left. Now the shades are grouped by tint and weighed by the pixels they cover; the heaviest groups claim pens of their own before the avatars do; and every colour then takes the screen pen nearest in tint, read from the real palette, or a checkerboard of two pens where that mix comes much closer. With --gui-live-debug the log says how many pens the screen had free and what the main colours became. Truecolour screens are unchanged. - Changing the Workbench screen mode or colours no longer stalls while the window is open. Intuition must close the Workbench screen for that, and could not while our window stayed on it, so the prefs program kept asking to close all windows. The window now closes when the system warns that the Workbench is about to close, and opens again on the new screen when it is back; the chats and the connection stay as they were. When another window still holds the reset back (a Shell, for one), the window stays closed while the prefs program names it, and opens again once the reset has gone through or been cancelled: coming back at once only made the prefs program try again and again. The window also closes as soon as the warning arrives, without first running a click still queued behind it: on a stalled link such a click kept the reset waiting for minutes. OS4 and AROS warn through Intuition, MorphOS through its screennotify.library. On AROS Intuition says at once when another window keeps the Workbench open, so there the window comes straight back. On AmigaOS 3 the warning needs screennotify.library from Aminet (util/libs/ScreenNotify10) in LIBS:; without it nothing changes, and the own screen (Settings > Use own screen) avoids the problem. - A window dragged down to its smallest size is remembered too. The size is saved without the borders, and the floor for a saved size was the window's own 320x200 minimum, which the inside of the smallest window never reaches. - A link that has gone dead no longer holds the window for minutes. On AmigaOS 3 and 4 opening a connection had no time limit of its own and waited for the TCP stack to give up, over a minute (one poll on a stock A1200 took 84 s); it now stops after 15 s, or the longer limit a step already sets (MorphOS and AROS had one already). Every network wait runs in one-second steps, and once it has lasted two seconds a click on the close gadget or a Workbench reset warning ends it, so the window closes or makes way at once (a Ctrl+C break signal ends it too). When polls lose the connection twice or more in a row, the next one waits longer, from 5 s doubling up to a minute, which leaves the window usable in between. - Typing in a busy chat on a stock A1200 no longer stalls behind long repaints. Laying out the conversation measured each line again at every character added, and every measured piece went through a byte-by-byte search for emoji first: with one chat open, a repaint on a cycle-exact A1200 took 6 s and now takes 0.9 s, with the same line breaks (checked against the old way on generated texts). The renderer is also built -O2 on the 68020 lane, its self-tests passing on a 68020. While typing, a repaint asked for by a new message or a typing notice now waits for a pause as long as the last repaint took, up to 10 s, instead of 2 s, so a short pause no longer hands the keyboard to it. With --gui-live-debug, a repaint of a second or more and a key that took a fifth of a second to show each leave a line saying how much text was measured and drawn. - A repaint in a long chat measures only what changed. Each message keeps the height worked out for it, with a key of everything that height depends on (its text and parts, the column width, the font and the emoji setting), so a repaint no longer wraps every loaded message again, twice: in a busy group on a stock A1200 that was some 8500 measurements for 70 texts drawn. And when someone in the open chat starts or stops typing, only the chat header is redrawn; in a busy group that happens every few seconds, and each time it cost a whole repaint. - A window that opens again, after a Workbench reset, from its AppIcon or on switching to or from the own screen, now shows what it will do. Its first frame was drawn from the window that had closed, and only then were the text field and the scroll positions reset: the field still looked active and the status bar still said "Type - ENTER sends, ESC cancels", yet typing no longer reached the field, and a Q or ESC typed into it closed the program. The chat list and the conversation showed one scroll position and took clicks for another, so a click could land on a different chat or message from the one under the pointer. Now the field shows "Write a message..." or the text not yet sent, which ENTER picks up again; the status bar shows the usual keys; an emoji picker left open is closed; and the open chat stays in view in the list. - What you type on the login screen (phone number, code, password) sits in the middle of its field. With emoji on, a line is as tall as an emoji and the text was placed from the top of that taller line, which left it four pixels low in the field; it is now centred the way the message field already was. - A message bubble has as much room above its text as below its time, and the time sits just under the text. With emoji on, every line is as tall as an emoji: the first line started on the bubble's top edge, which left small letters a few pixels from it, and the time sat at the foot of another emoji-tall row, with a wide empty band above it. The padding now takes into account the room the taller line already gives, and the time row is as tall as its letters, so bubbles are also shorter with emoji on. Without emoji the text no longer touches the top edge either. - Message times on a machine whose clock nobody set, such as a stock A1200 or A600 without a battery clock, show the time of day instead of 00:00. Times follow the Workbench clock, and such a clock starts on 1 January 1978: every message older than the last boot fell before that date, which the C library turns into midnight. When the clock is further off than any time zone could be, the times now come from Telegram's clock with the time zone set in the Locale preferences, without summer time. - On a 16-bit Workbench under AmigaOS 4 the message bubbles, the chat column and the text field have their own background colour. The window asked for its colours with the default precision, which lets the system hand out an existing pen that is merely close, and there the window and the surface colours both got the same pen: everything drawn on the surface vanished into the window. On a screen with more than 256 colours, where pens are plentiful, the window's colours, the tints behind the initials and the soft corners are now asked for exactly; screens with a palette keep sharing pens as before. With --gui-live-debug the log names the pens the window, the surface and the selection got. ADDED - "Settings > Show avatars" turns the profile pictures in the chat list and the chat header on and off. Off, the coloured initials stay, and nothing is downloaded, decoded or matched to the palette for them: on a stock A1200 each picture cost over a second, and one kept on another datacenter could first cost a minute-long key exchange with it. Like the inline photos and the emoji, it starts off on native AGA/ECS/OCS screens and on 68k CPUs below a 68040, on elsewhere, and a choice from the menu is saved in data/telegram-avatars.txt (one equal to the machine's own default is saved as "auto"). - A package for the plain 68000 (A500, A600, A1000, A2000, CDTV): the text client alone, built to load in about 1.5 MB, so it runs with about 2 MB of free fast RAM. It goes to GitHub and, as TelegramAmiga-68000.lha, to Aminet. The first login is made on a faster Amiga or in an emulator, as its manual explains, and telegram-auth.bin and the data drawer are then copied over. A tester's A600 (68000, 2 MB chip and 4 MB fast, network on a PCMCIA card) runs it. CHANGED - The window quits with Amiga+Q or its close gadget, as Amiga programs do, and the status bar now says so, as does the line the program prints in the Shell when the window opens. A plain Q quit too while the text field was not active, so a message typed before clicking into the field closed the program at its first q, and so did ESC one press after the ESC that cancels typing; neither quits any longer. On the login screen ESC still gives up the login, as the screen says. - The AROS ARM64 package goes to Aminet too, as TelegramAmiga-ARM64.lha in comm/tcp. Aminet's list of architectures has no ARM entry, so its readme says "other", as other ARM AROS programs there do, and the file name and the Requires line say what it is: AROS aarch64 on a Raspberry Pi 4, 400 or 5. The 0.0.95 package went up on 2026-10-08 as the first one; from the next release on it replaces itself like the other five. A COMMUNITY PROJECT ------------------- MIT licensed, non-commercial, written for the love of the platform. Bug reports and wishes are very welcome -- testers on real hardware (A1200s, A4000s, Pegasos, Sam, FPGA machines) are what moves this project forward. The icon is our own design. Carlo Spadoni optimised it for each system, put it on a standard drawer for the drawer icon, and let me ship his versions. Source + issues: https://github.com/kaffeine1/telegram-amiga Development diary: https://androidlab.it/en/telegram-amiga-mtproto-client-development-diary/