Up to Scribe...
About
I've decided to mark test44 as the final release in this version. It seems to get the job done most of the time. And really the current developement build (i.e. test45) is starting to have too many changes to be the same version. Likely it's going to be less stable then test44 so I'll make it v1.87 and end the v1.86 run of tests here.
Final (Test44) Changes:
- Added option to mark previewed email as read after 5 seconds.
- Added option to delete any executable attachments received. This is especially good for semi computer literate users that know enough to be dangerous (i.e. save an attachment out and run it) but not enough to know it's going to a virus. Works for both Windows "PE" executables like .exe and .dll and also Linux "ELF" executable files. Also deletes common scriping formats like "*.vbs *.pif *.bat". There is no way to recover the attachment after it's deleted by this feature.
- [Linux] Fixed the main window not getting focus when clicking on the tray icon.
- During bayesian spam check, Scribe now bypasses the whitelist check if the from address is yourself. Spammers have been forging to the from address as the address they're sending to, to try and get past filters. So now Scribe does a full word probability check on these emails regardless. Muhahaha.
- Made the icons in the main list view self centering to aid in skinning. This includes the heading icons and the flags etc rendered in the list.
- [Linux] Stopped the scroll bars flickering during repainting (say on resizing).
- Fixed the red colour being greyed out in the filter condition's value menu.
- Fixed adding/removing fields in the filters folder.
- Fixed a crash when printing HTML. Now uses HTML->Text converter to display something when printing HTML, as opposed to nothing or the text version.
- Added a date field to the account preview window.
- The paths stored for the Reply and Forward XML templates are now converted (internally) to relative paths if they are under the directory Scribe is installed in. Although in the options screen they will show the fully qualified path, even though moving the folder maintains integrity.
- Fixed the sorting of the timezone menu in the Contact window.
- Fixed the size of the Replace dialog. Removed the combo boxes for the field history until I actually implement them.
- [Linux] Implemented a basic open folder dialog using the open/save file dialog and disabling the file name editbox.
- Fixed http url's with '@' symbols being interpreted as an email address when double clicking them in the text control.
- Fixed Html->Text conversion to parse tags starting with '!' properly. Also added code to ignore white text, commonly used to put invisible words into spam mail. This then throws off the bayesian filter (sometimes), however now that it doesn't 'see' those white words the filtering catches the spam easily. The only glitch is when the background is not white the text would show up, and the converter is not smart enough to handle that case (yet).
- Added load/save in XML for the CSV import field mappings.
- [WinNT4] (Speculative) Fix for glyph substitution on Windows NT.
- [WinXP] (Speculative) Fix for menubar background colour (again).
- ELF executable attachments now trigger the virus warning, and are not executed. ELF is the linux binary format, so in the (largely theoretical) situation that a Linux virus appeared in your Inbox (snicker snicker) and you were silly enough to double click it then Scribe would promptly ignore the execute request and warn about virii etc. Even now Scribe doesn't execute the file directly, rather tried to look up a suitable program to run the file with, which would fail with an executable. Although I havn't tried it for sure.
- Fixed accented chars breaking the "preview first few lines" of unread email.
- Fixed attachments getting corrupted while being sent if something else starts using the mail folder file during the send (i.e. clicking on a unopenned folder or saving some object). Yeah I know, it's bad. I've been working on adding some thread checking to the file class to made sure I don't make this mistake again. The current fix is a bit of a hack and I'll have to come back and do it properly later.
- Fixed the add contact window crashing sometimes. Cleaned up the way it interacted with the mail window, including covering some more exit cases like the mail window closing before the add contact window or the user openning a second add contact window.
- Fixed the spam word database files not getting created the first time (again).
- Relative paths for reply/forward templates.
- [Win9x/ME] Fixed mail list preview lines, and clicking on text in the compose control.
- [Linux] Fixed a few menu accelerators.
- [Linux] Added some VERY basic support for printing using CUPS.
- Fixed MIME segments with valid base64 data and plain text from being ignored (as an error). Now it returns the valid data decoded from the base64 part and ignores the plain text (which is an error).
- Changed the "live" bayesian filtering mode to mark spam as "read".
- Fixed accented chars not arriving intact in the Mozilla Address Book import. Also added an error message when Mozilla still has the file open and Scribe can't read from it.
- Fixed mbox import to cope with unix style end of line chars.
- Fixed IeHtml plugin not filling the whole preview pane.
- The attachments tab in the mail window is bolded when attachments are present.
- Updated the Italian translation.
- Fixed the mail window not accepting dropped files as attachments.
- Added cursor key support to the recipient list in the mail window.
- Delete as spam now ignores read receipts.
- Added "change charset" option to text body context menu.
- Finished the basic backend for the [Contact] Group object so that you can load and save it. Still there isn't any link in the mail window or add contact window. So it's a bit pointless until that happens. So don't be telling me what I already know.
- Fixed not being able to select "To" first time round in a filter's condition field.
- [Linux] Removed the dependency on 'libgcc_s.so.1'. That doesn't mean it won't show up in 'ldd ./scribe' because other libraries (freetype/fontconfig) may link to it. However on systems that don't have that library (Suse?) it [might] improve things. Btw it adds 24k to the uncompressed binary size.
- Fixed a crash in File -> Create Folders.
- Fixed a crash when changing folders (::OnSelect).
- [Win32] Changed the menu background colour from GetSysColor(COLOR_3DFACE) to GetSysColor(COLOR_MENU), which might improve display under some settings.
- Fixed the CSV import clearing the contents of the file it imports.
- Added a new command line option "-p<max-pages>" that prints out max-pages of the .eml file on the command line or the whole file if max-pages is 0.
- Fixed the cancel button on the account preview.
- Fixed the send and receive mail progress meters in the status panel.
- Fixed a crash after copying a message.
- Fixed a crash when starting Scribe for the first time and creating the folders.
- [Win32] Fixed the password entry boxes from not obsuring the password with '*'s.
- [Win32] Fixed scrollbar's in dialogs not appearing.
- Fixed initialization of bayesian filtering word databases on the first run.
- Updated the polish translation, incl. the menus which we're omitted in the previous release due to a bug in LgiRes.
- Fixed the SSL plugin. Code, then test, then release. Not code, release. *duh*
- Fixed the default fields for the outbox and sent folder having the "to" field instead of the "from" field.
- [Linux] Added hack to make windows remember the right position instead of offset by the size of the decoration.
- Fixed Scribe deleting a plugin's properties when it can't find the plugin. This means you don't have to re-enter all the settings when the plugin temporarily doesn't load for whatever reason (usually shared library problem). When the plugin is fixed all your settings are still there. How nice.
- [Linux] Added rudimentry keyboard support for menus. You can now Alt-Key to bring up a menu, and then use the cursor keys to move around in the menus. Then once your on the right item <space> or <enter> will activate it. Esc closes the top menu.
- [Linux] Cleaned up the focus code to always give focus to the first tab stop of a top level window thus ensuring that some form of keyboard navagatability is available.
- [Linux] Added enter key handling to the file selector's path edit box.
- Added keyboard handling on the HTML control for up, down, pageup, pagedown, home and end.
- Fixed a crash in the bayesian filtering.
- [Linux] Folder load progress is fixed (again).
- Scribe now looks in the options file folder as well as the exe location for the bayesian filter word database files.
- Added polish translation.
- Added '*'s to obscure password entry boxes.
- Fixed the HTML control's right click menu "Copy" from hanging when there is a zero width selection. I also fixed "Copy" being available to click where there is a zero width selection.
- Fixed calendar items getting saved with the wrong date when the date format is set to "yyyy/mm/dd".
- [Linux] Fixed folder d'n'd.
- Added support for HTML content using the charset set in the MIME headers. Fixed HtmlToText not using available meta tag to set the charset for conversion and added support for the charset being set by the MIME headers as well.
- Added proper multiple Scribe instance handling so that the various instances work together in harmony. By using a block of shared memory a new instance can check whether some other instance already has the options file loaded (and therefor the associated folders) and instead of asking the user which folders to load, it passes any arguments over to the running instance and exits. The windows version had half of this already, the arguments passing part. This also means that 2 separate instances can run at the same time without interferring with each other.
- Fixed setting and clearing the folder password.
- Added code to disable various controls and menus when there is no folder loaded.
- [Linux] Made the output of text double buffered to eliminate flicker. Seems to be only marginally slower, although I'd like to know if it adversely impacts performance on slow boxs.
- Fixed the display of tabs in the compose control.
- [Linux] Fixed windows showing up in the wrong place because X was ignoring my XMoveResizeWindow call until the window had mapped. I've also reduced the flicker when scrolling through messages and the content window switches between the text and HTML controls.
- Updated German translation.
- Updated Portugese translation.
- Made the Find and Replace windows translatable.
- Fixed some issues setting and clearing Admin permissions on a folder.
- Fixed quote colouring in the message window being incorrect after a selection on the same line.
- Updated all the plugin entry points to satisfy the new[ish] API. Stops you from getting a list of options when you load a plugin.
- Added handling for the lgi.conf attribute "OnClose" in the tag "scribe". It can either be "minimize" or "compact". This way you can specify different behaviour when the user exits the application. The compact action will only run when the machine itself isn't shutting down, because Windows will kill the task after 15 seconds or so and if the compact hadn't finished by then it would almost certainly screw the folders. Holding down ctrl while hitting File->Exit will override the "minimize" option and actually exit the application instead of minimizing. Also minimize is ignored when the OS is shutting down.
- Updated the Czech translation.
- Updated the Portugese translation.
- Fixed an absolutely criminal waste of cycles bug in the text editor control. Now it doesn't needlessly re-layout the text every OnPaint call. *bash head against keyboard* The funny thing is, you don't notice it until you have like a 160k of text in the control. Anyway should be much faster now. :{
- Fixed mail not loading from v1 format mail folders.
- Added translation entries for the HTML control's right click menu.
- [Linux] Fixed the tray icon under Gnome. (It doesn't allocate a reasonable size to the tray window, you have to explicitly TELL it what size you want to be).
- [Linux] Stopped pointless vertical scroll bar showing up on Editboxes.
- [Linux] Made the main window come to the top when clicking the tray icon.
- [Linux] Fixed the tray icon menu not having a "Open" item when the main window is minimized.
- [Linux] Fixed the text controls putting newlines in the clipboard when you copy text.
- [Linux] Fixed windows flickering when you move them.
- [Linux] Fixed the "Desktop" location under Gnome. (Whats with '~/.gnome-desktop' anyway???)
- [Linux] Fixed some weirdness when worker threads access the UI.
- [Linux] Fixed openning attachments with spaces in the filename.
- [Linux] Fixed Scribe ignoring the KDE's user font preferences in favour of the global settings.
- [Linux] Fixed the one pixel of gunk at the bottom of some edit boxes.
- [Linux] Fixed text selection in the HTML control.
- Fixed the contact window's timezone menu.
- [Linux] Fixed Message Boxes being way too tall for their content.
- [Linux] Added support for freedesktop.org's shared MIME database via their libshared-mime API. This should really become the one source of MIME info for all desktop's (Gnome/KDE etc). So I'm supporting shared MIME first, KDE second and finally Gnome when I get around to it. ('Cause I USE KDE, not because I have some biff with Gnome ok!)
- Fixed the entity handling for the HTML to Text function using is replying to HTML email and filtering.
- Fixed a crash in the uudecode function when a long line starting with 'begin' appears in an email that isn't actually an attachment. So it now
- [Linux] Fixed a crash when entering an email address into a contact.
- [Linux] Added "Show Hidden Files" option to the file selector dialog.
- [Linux] Fixed the Add Contact window crashing when closing it via Alt-F4.
- [Linux] Modal dialogs are now actually modal.
- [Linux] Implemented being able to drop files onto a Mail window to attach them.
- Optimized the size and I/O of mail by not writing out NULL fields. A few bytes and cycles saved.
- Fixed the address output of the vCard exporter.
- [Win32] Wrote a workaround for the Outlook object drop handler so that it does a linear search for the email address when it's not stored in the standard tags. It only searchs a small part of the address space that I've found usually contains the email. Basically I search from PROP_TAG(PT_STRING8, 0x8000) to PROP_TAG(PT_STRING8, 0x8100), or maybe It should go even higher... but that seamed to work for me. M$ are never one to make things nice and simple. Grrrrr.
- [Linux] I think I've fixed the bug that causes the menus to stop working after a while (well at least one of the causes?). Well I would call it more a work around for (what I consider) a bug in X11/Xlib, but no surprises there. *sigh* It's like 3 weeks of restarting Scribe every time I need to use the menus gets pretty irritating. As some of you no doubt are well aware. The key was getting an easy to reproduce action that would cause the bug to manifest. That ended up being compacting the folders. Which in of itself is a huge amount of code to wade through. The real breakthrough was discovering that clicking "no" on the question dialog at the start would trigger the bug. So that isolated 98% of the compact code out of the equation. From there is was easy.
- Improved the update of the message editor to update only the changed part of the screen when selecting text. This improves the display esp. on Linux, which I havn't been able to add [fast] double buffered text yet. Resulting in considerably less flicker when editing. On Windows it's a non issue because it's text output is nicely buffered. The problem is that Xft doesn't appear to be able to output background AND text in the one pass, which is the staple of flicker free drawing. I've heard it said on the Xft mailing list that there are ways to do this, but I'm skeptical is best. In the mean time... this hack will improve the situation.
- [Linux] Improved the horizontal scrolling of the edit boxes. The cursor could get stuck off screen.
- [Linux] Fixed xlib clipping to handle incomming expose regions, client rects, text clipping and application required clipping. All at once, and correctly... which wasn't easy. Solves various little painting issues around the place.
- [Linux] Added some more protection to the menus so that they can't appear under the owning window. (Don't ask, it's another lame X thing).
- [Linux] Added keyboard shortcuts to common dialog messages, 'y' = Yes, 'n' = No etc.
- Added the "send" side implementation for the Offline switch. When you hit "send" on an email in offline mode the send is triggered straight away. It waits till you switch back Online and then sends any pending messages.
- Fixed the display of HTML with a meta tag charset set. Both in normal view and "view source". Currently everything in inside < and > are displayed in iso-8859-1 in source view.
- [Linux] Fixed not being able to cancel button and menu clicks by dragging the mouse off the widget before releasing the mouse's button. This was due to a bug in X11/Xlib that I had to write a workaround for.
- [Linux] Fixed a bug that cause Scribe to fall over when clicking the "Add" button in the plugins window.
- [Linux] Fixed being able to drag a file from the attachments list in an email window to a window that accepts files (i.e. the desktop or a Konqueror window).
- [Linux] Fixed GThread (pthread_create) beginning to fail after some hours or days due to ENOMEM errors. By default pthreads doesn't clean up after itself, when a thread exits I assumed that it would be removed from the resource pool, it seems it's not unless you specifically ask for it. This would cause account connection threads to not be created and application state would get a bit screwed up. So I've fixed the root cause and also cleaned up the handling of the error if it were to happen again. This seems to have fixed the menus z-order bug as well, although I'm not 100% sure.
- Fixed a charset issue when replying with quoting.
- [Linux] Fixed programmatic setting of focus, so that input boxes get the focus first up.
- Oh yeah, added Bayesian Filtering. Currently you have you manually build the database of words every now and then using the menu option. Otherwise, just switch it into train mode and off you go.
- Fixed the signature to fallback to the primary identity when the account's signature is not specified. Minor but a bug none the less.
- Furthur refined the ESMTP login code to try all authentication types that both the client and server support, instead of dying after the first failed attempt to log in. Also if the server doesn't report which authentication types it supports then it tries all the ones the client supports, instead of failing. Also each authentication attempt is now non-fatal at the client end, allowing furthur attempts to be made.
- Made the account preview window remember it's position, and column widths.
- Added more strings to the translation file. Covering calendar UI, font selection, plugin UI.
- Updated the Portuguese translation.
- Updated the Dutch translation.
- Fixed POP connections hanging on the QUIT command, by introducing a 2 second timeout on waiting for the server's response. No point hanging around for a response that never arrives.
- Fixed some bugs in Scribe that caused the AutoGPG plugin not to decrypt incomming mail properly.
- Fixed crashes when right clicking in the trash to set mail to read when there are other types of objects selected as well.
- Fixed a crash when receiving html mail with certain types of comment endings. Could also manifest while replying and forwarding HTML messages, as it was in the HTML->Text code.
- Added checking for the "Confirm Delete" option to the various places items can be deleted from.
- Added debug trace option for outputting trace statements during sending and receiving mail to help isolate the location of crashes and hangs.
- Fixed some control identitfiers. Which makes some broken bits of UI work.
- Added support for the BLOCKQUOTE tag to the HTML control.
- Added partial support for the PRE tag in the HTML control. It does proper paragraph breaking but still mungs the whitespace with normal HTML rules instead of preserving it.
- Fixed calendar attendee objects getting saved with the wrong object id.
- Added a "Mark As Spam" filter action, which does the same thing as pressing "Delete As Spam" on the toolbar. Which does the following things:
- Marks the message read
- Adds the message's UID to the list of spam on the server so that if your leaving mail on the server the next time Scribe connects to get the mail it will automatically remove the spam and leave legitimate mail.
- Deletes any attachments to the message
- Move the spam in the folder '/Spam'
- Fixed a buffer overflow crash in the tray icon right click menu code. Triggered by new email with very a long subject or from address.
- Fixed mail being deleted from the server when the receive phase fails.
- Fixed IMAP mail failing to download.
- Scribe now removes all stored UID's of mail that is no longer on the server. This simply stops them building up in the scribe.r file.
- Fixed a bad implementation of the "PLAIN" ESMTP auth, it might work now. I don't have a server around to test with. Also the "LOGIN" auth type was rewritten and tested.
- Fixed manual mail receives not resetting the timeout till the next auto receive.
- Added explicit range checking when Scribe objects are written to disk. This will prevent bugs or memory corruption in application code from over running the area allocated in folders.mail2 for that object (which is really bad for the folders). However if memory corruption effects the storage data structures itself then it can still screw up. I'm going to add extra range / validity checking inside the storage code as well, so that when things go wrong it gets picked up a lot sooner and no more writes are attempted. Hopefully this is a step in towards make the storage code protect the folder file from corruption even when the app is crashing. This is combined with the new no delete from server until mail is safely stored policy I implemented in Test30 will go a long way to closing some of the holes where mail can get dropped.
- Object read/write code now checks more strictly for read/write errors and errors out. This should make things fail more visibly. For instance, writing a mail to a full disk (which fails) will now not cause the mail to be deleted from the server.
- Added translation entries to the resource file for all the calendar's day and month names.
- Fixed another problem that causes mail not to be downloaded. (Critical but non destructive)
- Fixed the editor's Base64->Binary converter so that it no longer puts NULL's into the body of the document.
- Fixed folders temporarily showing empty after a compact even though they contain items. (Restarting Scribe would fix the problem)
- Added a new translation to Portuguese.
- Added charset preferences to the sending options in the account settings. Currently this is limited to the charsets Scribe can send in (all the single byte ones). Technically converting to double byte charsets is easy (esp with iconv) but it's not easy to detect which multi-byte charsets can encode a given bit of utf-8. Scribe detects the charset when encoding to send by going down the list of available charsets looking for one that matches all the characters in the source document. These settings allows you to override the default order of charset detection and force Scribe to use one furthur down the list, only if it's compatible with the input data though. Eventually I might add support for encoding in multi-byte charsets, but this is unlikely in the event that new MUA's will support unicode and the need for legacy charsets is diminishing.
- Added built in mappings for koi8-r, koi8-u and koi8-ru. This means they can be used as preferences for sending. I couldn't find a unicode map for koi8-t, but if someone points one out I'll add that too.
- Fixed the sending progress to show the per item KB's including a rate. I also fixed the n or m message persisting after the mail was sent.
- Fixed the Outlook Express import to a) mark everything as read, b) set the attachment flag correctly. It also now pre-populates the destination folder with the currently selected folder.
- [Win32] Fixed mail not getting downloaded when mail is also being left on the server.
- Added CSV export for a single folder of contacts.
- Fixed the download group progress meter to count through the actual tasks, rather than through the total mail on the server. i.e. Downloading 3 of 5... Deleting 4 of 10, even when there is 50 mail on server. This is most visible when using the account preview window.
- Fixed the download mail progress meter in the status window. It now includes the download rate (KB/s) in the text as well.
- [Linux] Edit boxes scroll horizontally to keep the cursor in view.
- [Linux] Menu shortcuts now work (i.e. delete, alt-n).
- [Linux] Fixed more bitmap errors in 16 bit screens. 24->16 and 24->32 bit blt's were not using the "GetPixelSize(24)" that gets the right pixel advance for 24bit bitmaps.
- [Win32] Added some initial support for MAPI apps calling Scribe to send mail. A full implementation of the API may follow in the future. Works for simple cases.
- [Linux] Fixed more international keyboard entry issues. Right alt (meta?) key now works properly.
- [Linux] Fixed glyph substitution display. However longer iconv converted strings can still brake if the source charset is stateful. My good japanese email test now displays to perfection! All those Sylpheed screenshots... with nice japanese text everywhere.. hmmm unicode support hmmmmm. Adding more fonts to cover the missing glyphs works, last night I added "Arial Unicode MS" to my gentoo install and everything started showing up nicely.
- Optimized setting many email to read or unread so that it doesn't update the screen until it's all done. Eliminating the unread count changing 1 at a time on the folder. Also removed the flicker when this happens.
- Fixed the "Read" flag in the mail properties window.
- Mail is now set to "Read" when you reply to it.
- Optimized the display of email inline preview text by caching it's layout / glyph sub etc. I also changed it so it would display HTML only content as well (Gotta love the new "BodyAsText" DOM field!).
- Removed the global font size offset (-1) so that the fonts appear the same size as the rest of the UI. If you don't like the font size, there is an option in the appearence tab to adjust all the font sizes by some offset (-2 -> +2). Personally some KDE installs have quite different DPI settings, and 12pt font is one is quite different to 12pt in another. I'd really like to know where the scaling setting is so that I can even things out. I run "-1" in the appearence on cygwin and "+0" on my Gentoo box, and they look pretty similar.
- [Linux] Fixed the painting of the list in "Item Filter" mode.
- [Linux] Month view in the Calendar now works. And I didn't lift a finger, I must of fixed the bug while working on another issue. Cool.
- [Linux] Fixed the time drop down in the calendar window.
- [Linux] Calendar reminders now have buttons on them! Wooo.
- [Linux] Fixed a string allocation error in the wrapping + quoting that causes random garbage to be included off the end of the original mails text. (Note to self: don't hard code the size of wide chars... use sizeof)
- [Win32] Fixed a un-necessary call to GetSystemPaletteEntries that causes a crash on badly written graphics drivers. When in true or direct colour screen modes, it doesn't do anything useful anyway.
- [Win32] Moved the detection of Win9x into pre-main code, so that any code that uses it will work correctly from the first line of application code. Previously it was initialized in the GApp constructor.
- Fixed mail's losing their mark colour when being copied.
- The abort buttons on the compact now actually work! (Eventually)
- Changed the order of To/From header decoding to do rfc 2047 decoding before trying to sort out the name and email parts.
- [Win32] The options dialog now writes the default reply/forward formats out in a notepad friendly format. As that is the default text editor on most systems.
- Signatures now accept random-line and random-paragraph tags. The old functionality was misnamed random-line, when really what it did was random-paragraph. The new random-line function includes a single line.
- Fixed handling of errors in the mail download process so that if an error occurs between the download and it's storage in the mail folders the mail is NOT marked as downloaded (when leave on server is selected) and also it won't be deleted from the server (if leave on server is not selected). This hopefully should stop email getting lost in the cracks. Once the mail is safely in the folders the only thing that can harm it is file corruption, but that is a separate issue. (this fix isn't in the Linux release...)
- [Win32] Fixed text clipping.
- [Linux] Fixed hard coded width of 24 bit pixel. Now it creates a test XImage on startup, finds the real width of the pixel and caches it for use by the 24bit paint applicators. You just can't use sizeof(Pixel24) or increment a Pixel24* in any of the graphics routines.
- [Linux] Fixed crashes caused by widgets being deleted while some peice of code is waiting on the Widget to change state, i.e. WaitForExpose(), WaitForMapped() etc. Also I've addressed various sources of WaitForExpose() timeouts.
- [Linux] Fixed the preview pane not being the proper size sometimes.
- [Linux] Added code to the MIME functions to check the non "X-" version of the MIME type as well. For instance, when looking up "image/x-png" it now checks for "image/png" as well.
- [Linux] (Might've) Fixed international keyboard layout support for typing stuff into Scribe. Or at least improved it somewhat.
- [Linux] Added Xft glyph coverage support, which then makes glyph substitution work. I've tested this with some Japanese text converted by iconv. So far some of the characters now show up. (I've yet to find what is required to support Japanese input in Linux, but it's not for lack of trying. Xim?)
- [Linux] Fixed GView::Invalidate(...) to use the Repaint flag (i.e. wait until the window is repainted before returning = update NOW!). This fixes the progress meters when loading the folders.
- Made the progress meter on folder load update every 500ms instead of every 100ms. It was slowing the performance of the load too much.
- [Linux] Fixed display of bitmaps and text in 15 bit screen depth.
- [Linux] Fixed bitmap display in 24 bit screen depth. This was fixed but I broke it in the last release fixing it for cygwin's X server, which uses 24 of 24 bits, as opposed to a native X server which uses 24 of 32 bits per pixel. Hence my confusion, anyway I eventually hope to use some metric returned from the X server itself to do the depth related calculations, but for the moment it's a compile time #ifdef.
- [Linux] Fixed lots of cases where the code could get hung up dragging an object around and never get out of the drag loop. This would manifest itself in things behaving weirdly after a d'n'd operation, well generally not working.
Test27 Changes:
- [Linux] Fixed "Save As" dialog to be initialized with the name of the attachment when saving.
- Cleaned up all the URL and mailto: handlers and put them in the same place, so that the text editor and HTML control call the same OnNavigate(Uri) function. This should fix some mouse click handlers not being able to open a new email window to the address clicked.
- [Linux] Fixed the duplicate entries in the "Add Contact" window.
- [Linux] Fixed the crash when adding a contact with the "Add Contact" window.
- [Linux] Fixed scrolling along the filter conditions and actions.
- Fixed mark colours to be platform independant. Byte ordering would cause blue messages on windows to show up as red on linux.
- [Win32] Fixed the text editor to set the IME font. I've found that sometimes it picks up the correct font, and sometimes it doesn't. But to be sure it gets it right I just set it explicitly now.
- [Linux] Added iconv support, fixed extended charset support when displaying mail.
- [Linux] Fixed bitmaps not displaying on 24bit depth screens. Tested 16, 24 and 32 bits, all work ok now. I can't set any of my displays to 15 bits so I can't test that :( and 8 is not worth it.
- [Linux] Fixed the dialogs taking ages to show up on screen.
- [Linux] Faster drag'n'drop feedback.
- [Linux] Clipboard text is persisted beyond the life of the window it was copied from.
- [Linux] Sub sub menus now work.
- [Linux] Fixed the offset fonts problem.
- [Linux] Added underlined font support.
- [Linux] Fixed typing capital letters on older X11 clients.
- [Linux] Menus now cancel when you click some non-Scribe window.
- [Linux] Fixed calendar items not loading their date fields.
- [Linux] Fixed the possibility of multiple context menus being open at once. And the resulting chaos that ensues afterwards. Fixes menus not working after a while (i.e. File->Exit).
- [Linux] Removed some unnecessary repainting when various control's values and properties are set to their existing setting. i.e. if there is no change, why repaint the screen?
- [Linux] Fixed tilde (~) and numpad enter key processing.
- [Linux] Check boxes and buttons now have keyboard handlers so that the spacebar and enter activate them.
- [Linux] Fixed an off by one error when updating an area of the screen. A single pixel edge along the right and bottom wouldn't be updated.
- [Linux] Fixed the spacebar key to emit a space even when the shift button is down.
- Fixed a few buffer overruns in the mime decoder (possible crash / corruption causes). Which I found with the ever wonderful valgrind debugger on Linux.
- [Win32] Added IME composition window positioning to the GTextView3 (the editor) control. This also fixes the IME composition window font, as a side effect. IME now works at a basic level.
- [Linux] Fixed message boxes in the send/receive code crashing the connection threads, by moving them into the GUI thread.
- Fixed a crash in the send/receive threads where multiple threads would access the settings and one would eventually die. Now it the property list is thread safe for reading at least, which mostly covers the connection threads. This was the cause of the crash that would take down Scribe/Linux after several connects.
- [Linux] Some time based updates now work. (e.g. Compact progress).
- [Linux] Ported the Linux implementation to Cygwin.
- [Linux] Changed from using hard coded KDE paths to calling 'kde-config' to get the info I need for MIME <-> App lookups.
- [Linux] Fixed menus looking through the font settings every time they draw, which resulted in very painfully slow drawing.
- [Linux] Added support for reading out the current KDE font settings for the system, menu and toolbar fonts.
- Fixed alpha compositing in 16 bit.
- Fixed the "Bold Unread" checkbox saving state in the options window.
- [Linux] Fixed the checkboxes allowing you to changed their state even when disabled. Also they paint correctly when disabled too.
- [Linux] Fixed GRadioGroup passing on notifications. Child radio buttons have to send the group as the notifing control, whereas other controls (like buttons) should always send themselves.
- [Linux] Fixed the clipping of display output to the changed area of screen. This elimiates a fair bit of flicker and reduces the work load. I should probably do some simple clip region testing so that primitives don't do the xserver round trip just to be clipped anyway.
- [Linux] Fixed the account preview window hanging and then crashing when you select a bunch of actions and click "Ok".
- [Linux] Added an icon to the main Scribe window. (After much frustrating hunting around for documentation).
- [Linux] Fixed the plugin interface.
- [Linux] Fixed shift-tab so it scrolls backwards through the tab stops.
- [Linux] Fixed IDOK to be the default button.
- [Linux] Fixed enter triggering IDOK notifications and escape triggering IDCANCEL notifications by default.
- [Linux] Added code to set the initial focus to a child of a newly visible GWindow/GDialog.
- [Linux] Fixed some scroll bar rendering and interaction bugs. Made them 14 px wide instead of 16, I like UI's that don't oversize everything. Something which has been the bane of Linux since someone wrote an X11 port, to this day (ie KDE/Gnome wasting criminal numbers of pixels and the fonts! Don't get me started).
- [Linux] Added a system tray icon, with a right click menu.
- Fixed Scribe only removing one corrupted item from a folder per compact. Now it clears them all, which gets the folders back to being valid faster.
- Fixed some buffer overruns in the mail loading code. This should fix some of the crashes occuring when loading folders of mail. Particularly when the mail objects are not 100% correct.
Test23 Changes:
- Fixed a crash in the find window.
- Fixed local calendar items not showing in the calendar view.
- Added a "Stop Filtering" option to the actions of a filter. This allows you to select whether you want any more filters to be checked against the input mail or not. Handy for running multiple filters on the same mail. i.e. set colour, move to folder. But on different conditions for example. The default is to "stop filtering" as this was the behaviour in previous builds and I don't want to break anyones filtering setup, just make it more flexible. I also cleaned the code up so that all filtering runs through the same code instead of several different "ways" of filtering. Not that it should make anything run differently.
- Fixed the timezone offset being used when sending mail to always have the daylight savings offset included. (I should read the documentation more carefully perhaps.)
- Fixed handling of 0x21 extension blocks in GIF files. This fixes Scribe hanging when you go to read a message from the Incredimail client.
- Fixed a bug that could cause mail to be incorrectly downloaded. I'm not sure how this would effect an actual download as I was stepping through the code at the time I fixed it.
- Fixed the account preview not downloading mail that has already been downloaded and left on the server. Now you can re-download mail on the server.
- Fixed the account preview deleting mail when it shouldn't.
- Fixed some text not appearing in the HTML control when the Tag's text was broken by a comment.
- Fixed a nasty bug in the List class that caused the current item to be lost when deleting an item from the List. It should be moved to the next item.
- Added missing parent items to the threaded view of a folder. This ties together replies that no longer have the parent email available. This may be unstable, if you care about stability then leave threading off for the moment.
- Fixed collision handling in the Hash class. There are no known problems caused by this, but it's fixed anyway ;)
- Remove ability to overwrite folders. When the mail folders file to open already exists then I gave the user to ability to choose between overwriting the folders, or openning the existing folders or doing nothing. This however allows the user to click a button and lose lots of valuable date, sometimes not meaning to. So hence now you basically have to go out into the file manager and delete the folders by hand... something that won't happen as easily by accident.
- [Linux] Fixed the menus not displaying check marks, icons and shortcuts.
- Fixed a hang in the GIF load code (often seen when click on mail).
- Fixed the missing body when printing out email.
- Fixed a crash when clicking on mail in the main list. This only happens when the amount of text being sent to the preview window is the right number of lines to just fill the window, and so the scroll bar toggles and at some point gets removed, at which point another bit of code tried to use it.
- Fixed Scribe re-downloading all the mail on the account after you switch off "Leave on server". Grrr, it's not the first time I've fixed this either.
- Changed the preview mail on server window to have checkboxes for download and delete on each row. This allows the user to download AND delete, something which quite a few people have been complaining about ;) Previously the only options were "leave", "download" OR "delete". Now it's AND/OR. If you select multiple messages you can set the checkboxes of multiple mail items with one click. Don't forget that ctrl-a selects all as well.
- Fixed a crash on exit.
- [i.Scribe] Removed the identity UI in the account settings dialog, it's irrelevant. Also removed the "receive button" action in the connection options for the same reason.
- [i.Scribe] Fixed the [a reason for] send buttons not working.
- The Calendar UI now automatically copies the start date over to the end date when you set the end time. Before it used to set the end date to 0/0/0, which just confused users no end.
- Fixed a crash when attaching a file without an extension.
- Updated the Czech translation.
- Added a highly incorrect Japanese translation from babelfish, just for kicks ;)
- Fixed the item operation progress meter in the status window. (Not the progress of the current item, the global item level progress)
- Changed the format of the UI resource file. Now instead of using text(##) is uses a 2 letter code to describe the language: en=english, ru=russian etc.
- Added catagorization to the Contact's timezone menu.
- Added a "Work Offline" mode to the file menu that stops accounts auto-connecting.
- Rewrote the font backend (again) to help correct and speed up string display. Basically to put a string on the screen, several steps have to be taken:
- Conversion to OS usable format. (Win32: utf8 -> utf16)
- Missing glyph lookup (if relevent).
- Layout of tab characters.
- Measurement.
- Drawing.
- Fixed a crash in the list control. Shows up when you click on it when there are no items.
- Changed the send thread to buffer all it's error messages into one message box instead of prompting you everytime something isn't right. Fixed the "no recipients" error message text.
- Fixed the account preview to work properly after the first time you use it. The command list was not being deleted, so whatever commands you applied the first time would be applied on every receive after that. *duh* To work around this until you get this build just restart Scribe after previewing. I know annoying blah blah blah.
- Fixed a crash when you set a previewed account mail to "Download".
- Fixed the mail preview not enabling the "Ok" button after the mail has been listed.
- Added an option to the appearence tab to switch on/off glyph substitution. If glyph substitution is not changable, the checkbox is disabled and the support value is displayed. WinXP has built in glyph substitution and the feature is not supported on Linux yet.
- Fixed a bug when deleting items in the List<> class. This should fix LGI apps (like Scribe) crashing out at GContainers.cpp,226 (or there abouts).
- Fixed a shutdown crash caused by the order of unloading the folders when all the plugins had been unloaded. Now I've reordered it so that if any object in the folder tree was allocated by the plugin it will still be valid during the unload so it can be deleted correctly. The crash is question was in Store2.cpp, Line 145.
- Added code to automatically set the TimeZone of contacts when they send you mail. This then allows the mail window to show their local time when sending them mail.
- Fixed the automatic re-threading of incomming mail in the current folder.
- Fixed crash when the status window is open and the mail connection threads are running.
- Added error message to warn user that there is no recipient in an outgoing mail.
- Fixed the send code to skip unaddressed mail in the outbox (with a warning) and send the rest of the mail that IS addressed.
- Added sorting on the trash folder. This hasn't been implemented up until now because the trash contains all different types of objects, from mail to contacts or filters. This poses a problem, what "field" is being sorted on? It's different on every item. However I found a way to make the items sort within groups, all the mail sort together and in order, and all the contacts sort in another group, again in logical order. The code was a bit tricky though ;)
- The send/receive status count, status text and coloured log messages is back. The individual mail transfer KB progress is not implemented in the new send/receive thread code yet.
- Fixed the preview account window to be the parent of the ask password dialog. This is to stop the preview window bring pushed to the back while the password dialog is open.
- Changed the account handling to save temporary passwords. So that if you don't specify a password in the account settings, the first time you connect to that account it will prompt you for the password and if the connect is successful it saves the password in memory for furthur connects. When you close the application or go into the options the temporary password is flushed from memory. At no point is the password saved to disk. So if your concerned about security then this option is now a little easier on you.
- Fixed the preview panel leaving the contents of the previous message visible, even when that message is no longer selected.
- Added some exception handlers to track down some of the unfixed bugs listed above.
- Fixed dragging items from the search results window to a folder on the main tree view to move them. Also fixed sorting the search results by clicking on the column headings.
- Added a new DOM field "BodyAsText" to the mail object which will return a text representation of the body. If no text body is present, like in a HTML only email it does a quick and dirty conversion from HTML to text and returns that. This can now be used in the Reply/Forward format to give you something to reply to when repling to a HTML only mail. Which previously gave you nothing for the quoted text. The HTML -> Text conversion works best on material created by common email composition editors, webpages are likely to look like garbage. Users that have existing Reply/Forward formats are advised to edit there templates to use the "BodyAsText" DOM field instead of "Body". New users will have this by default.
- Added "Now" DOM field to the Scribe object.
- Fixed some GIF's with transparent regions not rendering correctly in the HTML viewer.
- Added "Title" field support to vCard import/export.
- Changed the CSV Contact import to strip return and linefeed chars from all fields except the notes. Fixed some CSV parsing as well.
- Rewrote the sending and receiving client code to use simpler methods and buffering and less memory.
- Rewrote the connection threads so that they don't need to lock any resources and so that they are far more decoupled from the main thread. Especially the receive code is now very separate from the main thread, with no locking required. This speads up the code and reduces the chance for memory contention and corruption. I know the software has not run truely stable for a long time now, and this rewrite should go some ways towards fixing that. In the short term things might get worse, but the issues should be much more repeatable and therefor easier to fix. So that evertually we'll be in a better place than where we are now. At least on paper the new threading model is safer :/
- Changed the header parsing to handle the case where "Header:Value" is used. Which is incorrect I might add, as you are required to have 1 character of white space after the ':' like this "Header: Value". Which is nicer to read anyway.
- Changed the list selection code so that it doesn't select most of the contents while scrolling and selecting at the same time.
- Added "Use Socks" checkbox option so that you can leave the Socks5 settings setup and just turn it on/off easily.
- Changed the i.Scribe build to include "sample" support for Filtering. The first filter will run as normal, and any other filters defined will be ignored. The UI shows which filters are disabled via greying them out. The user can re-order the defined filters to change the active filter. InScribe filtering is not effected by this.
- Added 'delete' key processing to the email list of the contact window to delete the selected address.
- Fixed a crash when you TAB out of the email entry popup in the contact window email list and then hit enter (which closes the window).
- Fixed a crash after deleting a recipient from an existing mail (e.g. reply to).
- Added some css properties to the HTML control: border, margin. Added rendering of borders on tags. Fixed margin calculation on DIV tags. Fixed some css font properties not appearing. Added CSS tag property processing. Fixed parsing out CSS with HTML comments around the styles.
- Made the 'search' button the default action on the find window.
- Mail recipient copy/paste added.
- Added Reply/ReplyAll/Forward on the mail's right click menu.
- Fixed some issues in the MBOX export. Lines starting with "from " at the start of the headers are skipped so that duplicate "from " lines don't happen. Instances of "from " at the start of a line in the body of a message are changed to ">from ".
- Fixed the socket error handling to cope with Windows XP's weirdo '183' return code from WSAGetLastError. I don't know what it means, but it's usually when the connection drops out so I made it a 'fatal' error. This stops Scribe getting into this infinite loop writing error strings into the log... which eventually eats all the RAM etc etc.
- Made some of the email marking colours a little less intense. This evens out the perceived brightness of the hue range.
- Fixed some crashes in various parts of the code.
- [Win9x] Fixed Scribe not being able to find the scribe.lr file. Strangly this worked fine in the debug build.
- Added reply thread colouring to the compose control. Colours lines starting with 1 or more '>' characters.
- Added a progress meter to the initial load from disk when you click on a folder. Some folders take their time. Gives you something to watch while it loads. I know I know.. it's probably better use of my time optimizing the load time, but it's mostly disk bound unless I index the fields displayed by the folder. Which is not something I want to do on the v1 code base. I'm looking at all sorts of alternatives for the v2 data store.
- Fixed the message threading code to correctly use the "In-Reply-To" header.
- Fixed Scribe's handling of double byte Windows '9x. Well it starts up ok, but there are quite a few things that don't work fully as yet. Firstly it can now find it's own resources. Also I fixed openning files, keyboard input and directory listing. Currently I don't think the IME's work with Scribe. But it's a start.
- Improved the handling of HTML mime segments charset. There are 2 charsets for a block of HTML in an email, one in the mime header and one in the HTML itself. And I've figured out what I need to do with both, or just one or the other.
- Fixed the tab size in the edit window.
- Right click menu on the column headers of the main list view now has an easy to use field list, instead of forcing you into the folder properties dialog. I will eventually remove the field configuration from the folder properties dialog because all the functionality is now handled in the main window. It looked ugly anyway.
- Fixed the error handling when writing a calendar entry to an SCP folder to write the item into the local /Calendar folder if the SCP folder is not available, propbably due to network connectivity or the server has gone down. It's better than it just disappearing into the ether. (I learn't about this one the hard way).
- Added the 'Quote' and 'Home' DOM fields.
- Changed the glyph substitution code to stop loading the system font's when it finds a glyph to fulfill a cache miss. It also now prefers various well known fonts that have better glyphs and good unicode coverage. Finally I changed it so that no fonts starting in '@' are used as they have 90� rotated glpyhs (for vertical rendering?).
- Basic(!) printing support for the calendar view. Allows printing of what you can see on the screen, i.e. week/month/year view, whichever is currently selected. Uses the font / printer specified from the file menu items on the main window.
- Better HTML layout/colouring. Fixed the control not reflowing it's contents to the new width when the scroll bar is shown. Btw I'm not going to spend much time fixing rendering of broken HTML. I run Html Tidy over the page before I even start checking for rendering bugs. There is no excuse of badly formed documents when it's so easy to get it right.
- Fixed Scribe to use Content-Type charsets for HTML as well as the body of the message. duh!
- Fixed the new O(1) charset lookup being case sensitive. :(
- Oh yeah, I fixed that 'read receipt' asking the sender as well as the recipient. duh.
- Fixed the send/preview buttons being greyed out after sending an email.
- Added CSV contact import with field mapping dialog. You know you want it!
- Fixed a memory corruption bug that caused a crash after scrolling through or clicking on messages.
- [Win 98/ME/NT/2K] Added missing glyph substitution. This replaces characters missing in the current font with the appropriate characters from another font in the system. Currently Win XP does this at an OS level, but eariler versions of window don't. Win 2k gets away with not doing substitution by having far more complete fonts. But the '9x/ME versions have really bad glyph converage in their fonts so it's hard to output text correctly. This is a new feature of LGI so it should appear in all my apps as I update them. There is some slow down associated with looking up the glyph coverage and processing strings that have missing characters. But by using a clever little lookup table I've managed to reduce that speed hit a lot. I may provide a switch to turn it off for people that have chronically slow computers. Scribe isn't as fast as it was, mostly because the unicode support requires a lot more per character processing and memory. I don't see a way to do things correctly AND still be ultra fast. Yet.
- Added folding to the iCalendar export function. This fixes fields with multiple lines and long lines.
- Fixed the Shared Calendar code blocking the main GUI thread in some cases.
- Made the Shared Calendar request/response code much more reliable via retrying failed HTTP requests. I didn't realize that Squid could screw up 60-80% of all it's requests. Web proxies are the pits.
- [Win98/ME] Added support for double byte characters systems. This should allow Scribe to boot when a double byte charset is the system default.
- Changed charset info lookup (done several times per string display/use) from O(n) to O(1) lookup time by using a hash table. This may improve performance.
- [Win9x] Ignores bogus daylight savings offset return by system API. Checks if the user has selected "Adjust for daylight savings" in their date setup and returns +0 when the daylight savings adjust is switched off, regardless of the API's official value. This of course is only the offset on the timezone.. not the timezone itself.
- Added 'copy' to HTML controls right click menu. Fixed selection painting to match the HTML controls 'HasSelection()' API. Converted nbsp's to spaces on copy.
- Added initial implementation of multi-day calendar entries. The calendar view now lists the entry in all the days that apply. This is a stepping stone to recurring entries as well.
- Fixed delete button on mail window to work all the time.
- Update the Czech translation.
- Added 'Message-ID' to outgoing replies and forwards. *Bash head against table*
- Changed the send to write the outgoing headers into the InternetHeaders field so they show up in the headers tab of mail in the sent folder.
- Fixed links that used images in the HTML control.
- Fixed images not loading in the HTML control.
- Improved the placement of images in the HTML control.
- [InScribe] Added a 'not' option to each filter condition. This allows you to test for the opposite of any of the operators. i.e. Not Equal, Not Like, Not Contains etc. Makes the whole filtering thing a bit more powerful without resorting to scripting. There doesn't seem to be an intuitive way to write complex conditions in anything other than script. I've never seen a GUI for the everyday user that works well. With InScribe your limited to either AND'ing all the conditions together or OR'ing them. If anyone has a good UI for mixing the two and grouping expressions without using plain text then let me know.
- Added fixed width font mode to the editor.
- Stopped the status window flickering when minimized. Corrected layout when not displaying text on the toolbar and when using 16x16 icons on the toolbar.
- Fixed the 'enter' key in the Contact window to save and close the form.
- [Win9x/ME] Fixed not being able to enter email address' in the contact window. I did fix this before but my code base got out of sync and I built test 8 without the fix. Sorry about the confusion.
- Made the SCP client implementation far more robust. It nows copes with lots of different network issues, with timeouts and retries. All of which now runs in the connection thread so that it doesn't lock up the interface while things happen. This was all done to make possible connecting to an SCP server over a HTTP proxy on a slow connection. So far it seems to semi-reliable. Although sometimes it'll take quite a while to load/save something. Although it does it in the background. It's kinda like some webpages... #@$%^ing slow. I don't see why future versions couldn't be async for most things, but we'll have to see. It would mean certain things in the server would probably have to change.
- [Win32] Fixed russian keyboard input for both Win9x AND Windows 2K/XP.
- Added 'Folder' DOM field to the Contact and Mail objects. This returns the current path of the object, ala '/Inbox/SomeFolder'. This is useful for filtering mail based on the group that the sender belongs to.
- [InScribe] Added drop down for the condition's value that allows the user to select a folder or colour to match with. Yes you can filter based on the colour marking of an email :D
- [InScribe] Added action menu to the mail window editor that allows you to execute a filter's actions on the current mail.
- Fixed importing vCard/iCal objects with the character ':' in free text fields.
- Properly enabled the threading. In test6 this was stuck in the 'on' position, and there is no way to turn it off.. sorry. I should check the release more carefully.
- Changed outgoing header fields encoded with rfc 2047 to use base64 when a substantial proportion of the characters will be >= 0x80. Instead of encoding in quoted printable.
- Changed the preference for russian charset detection to choose windows-1251 before iso-8859-5 because most other russian clients prefer the M$ codepage. If anyone has a strong opinion about this let me know. Personally I think the world should use iso charsets where possible. So all the other languages will default to the iso version.
- Added russian translation.
- Added outgoing "References:" and "MessageID:" headers to email to help recipient clients thread mail from Scribe.
- Added an experimental threaded view to the mail list. Don't complain if it's crusty/broken because I'm still working on it, although feedback is welcome. I might hide it in the final v1.86 if it's unfixable in the short term.
- Made Scribe save it's options out after every save. It used to do this and I think somewhere along the line I deleted that part of the code, anyway it now does that again so that things changed during a mail download are persisted even after a crash.
- Re-instated the "Remove..." button to the editor's right click menu.
- Fixed Scribe crashing when the graphics files are missing. The warning would work, but straight after it would die. At least it brings up the main window so you can shut it down gracefully.
- Fixed Scribe not being able to find it's own directory when there is an accent in the path. This caused all sorts of problems, including not being able to find it's resources. This doesn't appear to be fixed, maybe there is some other related issue, or a bug in the 'fix'. *sigh*