tspivey version 4.86: Modified sapiSpeaker.speak to not speak synchronously when CurrentTweet was pressed. hllf version 4.85: Fixed bug where the keystroke to bring up the public timeline did nothing but put the user into the retweets buffer. hllf version 4.84: Fixed Qwitter start-up failure if log-in cridentials are incorrect or no config file exists. Q version 4.83: Fixed favorites buffer, fixed deleting favorites, fixed follow dialog, updated version strings. Q version 4.82: Cleaned up the inheritence paterns of buffers. Q version 4.81: Built a new storage session and a companion buffer which will replace the current sql buffers. Added new shove dependency that you'll be needing to install. Q version 4.80: Fixed a broken import in new_tweet dialog. Q version 4.79: Renamed globals to global_vars because of a name conflict. duh. Many code cleanups especially in dialogs. Q version 4.78: Split the twitter session into its own folder for later work. Upgraded hotkey sessions to take an interface object as an argument to call functions on. Fixed a possible case which would keep the twitter session from initializing. Bram version 4.77: Implemented retweet functionality. If the retweet text isn't changed, the retweet will be posted using the new retweet feature, otherwise it will be a normal update, this is a Twitter limitation. Q version 4.76: Write templates after saving config. duh. Q version 4.75: Fixed an error preventing shutdown in hotkey sessions. Redesigned configuration dialog to work better with sessions. Haden version 4.74: When porting the friends and followers functions out of twitter_helper, I broke friends and followers buffers so that they did not update. It has been fixed. Moved the thread that checks for savedsearches out of qwitter.pyw and into session\twitter.py so that it is called when that session is registered. Q version 4.73: Remove a spurious tab character from the individual buffer's creation. fixes remarkably many things. Q version 4.72: configuration sessions should handle showing their configuration dialogs. Also fixed a bug in db.SyncTable where table names with apostrophes would break when reopening buffers. Haden version 4.71: Removed twitter_helper.py. The speech controls in the export dialog should theorettically disappear when wav is not the selected file format. Haden version 4.70: Fixed friends and followers buffers not populating. Fixed calls to globals.TwitterApi in twitter_helper as it's not used with sessions. Haden version 4.69: You guys needed the list_manager.py file. Here it is. Haden version 4.68: Expanded on sessions for when there is more than one. Added report_spam option to unfollow dialog. Added an unfavoritePost keystroke, currently alt+shift+win+f. Added the retweets buffer. Removed a few unnecessary files. Q version 4.67: Fixed a variety of problems preventing individual buffers from working. Now, when sessions register buffers, they default to setting the buffer's .session to that session which is much more logical. Q version 4.66: Fix html entities from showing up, should fix on old posts, too, theoretically. hllf version 4.65: Fixed windows-alt-up and down arrow for following converssations that were broken in the recent session implementation. Q version 4.64: Actually add a required file, more debuggage. Q version 4.63: Got rid of calls to twitter_helper from interface.py. No real need for this middleware, the twitter session will takeover what the API can't handle directly. Q version 4.62: Adapt most code to use sessions. For now, qwitter.pyw hackishly starts one and only one twitter session and gets things configured with config, keys, etc. I eventually want sessions to be able to handle loading these sorts of things themselves and for them to be dynamically settable, I.E. set two twitter sessions to start automatically. This revision really really really will introduce loads of bugs, please report them! Q version 4.61: Improved buffer-handling session. Modified a few bits in interface.py to allow it to take buffer args more places. Got the hotkey system working well. Q version 4.60: sessions/buffers.py no longer calls RegisterDefaultBuffers (more trouble than it was worth). Fleshed out the twitter session. Debugged the hotkey session, it might actually work now. Q version 4.59: Updated trends buffer, optimized some code referring to trends in interface.py hllf version 4.58: And now fixed filters that were also broken recently. hllf version 4.57: Fixed searches that were broken in one of the recent updates. Q version 4.56: Wrote the sessions management library, sessions.py. Removed a few unnecessary imports from buffers, cleaned up a few buffers a bit. Q version 4.55: Updated interface.py and output.py, removing much legacy code which makes reference to buffers by index. Several modifications to work with modernized interface.py. Fixed dismissable buffers shutdown method to actually play sounds again. Switch several buffers over to getting their information from their .session, currently sessions are set to globals although this will obviously change. Q version 4.54: Ported all buffers over to accept only keyword arguments in their constructors for far cleaner code. Many misc cleanups. Internationalized a few more dynamic strings. Q version 4.53: Finished the twitter session. All buffers sessions will now call RegisterDefaultBuffers on themselves when being constructed so override this or just pass them a list of preconstructed buffers with the buffers keyword. Q version 4.52: Debugged and expanded upon sessions. Made the beginnings of what should become the overall twitter session. The configuration session needs to actually access config, same with keymap but the template is there, finally. Q version 4.51: Finished, at least in theory, the global hotkey session. Made a generic buffer-handling session instead of integrating buffers directly with sessions. All yet untested. Miahtech version 4.50: a bit of refining to the readme. Added a section in trouble shooting about changing sound system if it doesn't work on system, cleaned up a couple wording choices to be more clear and concise. Q version 4.49: Remove a few things from UI that don't currently work, exclude a dll that was breaking builds on xp if built with a later OS thanks @tspivey, few last tweeks. Q version 4.48: Clean up some html in the readme. Improved conversation following code, it doesn't quite suck as bad anymore and works better with different screen readers. hllf version 4.47: When a search or individual timeline buffer is created, Qwitter will now announce if the Twitter API returned no items to display. This way, the user no longer has to wait indefinitely on an empty buffer, wondering if there are no results or whether the Twitter API is just being slow. Chris N version 4.46: Updated URL shortening section in Readme.html. Q version 4.45: In buffers which are secretly lists of users, the delete keystroke will now, quite logically, bring up the unfollow dialog. hllf version 4.44: If user clicks okay in a new reply dialog even though message length exceeds max allowed, the new reply dialog is now called once again, instead of a new tweet dialog. This maintains consistency and eliminates the @username suddenly appearing out of nowhere at the beginning of the message. hllf version 4.43: The "Jump to Post" dialog box now pre-populates the edit field with the number of the current post, making it easier for a user to perform jumps relative to the current position. hllf version 4.42: Moved URL shortening into its own package called shorteners. Currently have module support for bit.ly and added support for j.mp (gains the user two extra characters). Added a configuration option under the miscellaneous tab for having the user select preferred shortener service. Should now be very easy to introduce new shortening services like tinyurl, etc. hllf version 4.41: A few more minor tweaks to dialogs. hllf version 4.40: Loads of code clean-up of dialogs for new tweets, replies, and DMs. Created a new class for new message dialogs. Removed lots of duplicate code and consolidated. Window titles now consistent across all new message dialogs. Fixed a few minor bugs. New reply window title now reflects correct amount of remaining characters. First attempt at isolating code to shorten URLs; still lots to do. hllf version 4.39: Fixed bug where device notifications were always being turned on when following someone, even if the notifications checkbox was unchecked. hllf version 4.38: Fixed bug introduced in version 4.35 where dismissing a buffer played the "dismiss buffer" sound twice; removed redundant code. Justin version 4.37: Add the commands for working with favorites to section 2.3 of the readme. Bram version 4.36: Favorite a tweet with win+alt+f. Bram version 4.35: Let all dismissable buffers make a sound when dismissed, fix short URL replacement in some cases. hllf version 4.34: Fixed bug where search buffers weren't being properly shut down when dismissed. Q version 4.33: Optimized the startup process. Should be a bit quicker now. Bram version 4.32: Added favorites buffer with standard keystroke ctrl+win+alt+f, made the delete command really call custom deletion logic in specific buffers Delete unfavorites a tweet in the favorites buffer. Some buffer code cleanup. Q version 4.31: Re-comment something important! Q version 4.30: Beginnings of work on the user management dialog. This should be your one-stop shop for fiddling with users, from viewing their profile to following, blocking, reporting as spam, viewing individual timelines, etc. I intend to make it tabbed. Justin version 4.29: Add the new delete command to the readme, along with other random clarifications here and there. Q version 4.28: Added a general mechanism for handling post deletes. If deleting a post you sent, this will also delete it from the site. Does not currently delete tweets from the database but it should be trivial to implement this in future. Chris N version 4.27: Added URL shortening explanation to Readme. Justin version 4.26: Actually write content about the braille and templates tabs in the readme and uncomment those sections. Bram version 4.25: Templates in config dialog will be saved to templates.conf now. Bram version 4.24: Fixed check so braillers actually know when they're able to braille something Q version 4.23: Remove a logging statement that was causing pointless issues. Q version 4.22: Final tweeks to get a beta done. Workaround for paths.py which seems to work for GetAppDir, unsure if this breaks unicode compatibility. Chris N version 4.21: Updated dialogs/new_dm.py to match changes for new_tweet from version 4.14. Justin version 4.20: Added information on the new alt+win+up command to the readme. Q version 4.19: Added a way to trace up conversations, alt+win+up. Doesn't work on branching conversations yet. Justin version 4.18: Commented out the parts of the readme dealing with the braille tab because nothing's written there yet, and the templates tab because it doesn't do anything yet. Q version 4.17: Fix friends buffer. Q version 4.16: Add a checkbox to the follow dialog to allow toggling of mobile updates for the follow. Justin version 4.15: Finally documented the tabbed layout of the config dialog. Someone who actually uses qwitter's braille support needs to fill in that section. Sean Version 4.14: modified New Tweet's shorten URL so that single-URL tweets are shortened without needing to choose from a list of 1 items. Todo the rest. Chris N version 4.13: fixed some broken tags in doc/Readme.html. Chris N version 4.12: Removed bit.ly information from options dialog at Q's request. Added shorten button to New DM dialog. Chris N version 4.11: Added ability to shorten URLs using bit.ly. This requires a bit.ly Login and API Key. I've set up a qwitter account and included them as defaults in confspec. Users can view/change information in Options dialog. If URL isn't automatically detected, user can select URL and click button. Justin version 4.10: Added mailing list and wiki to technical support section. Decided to add myself so there wouldn't be only one individual listed for support. Q version 4.09: Improve handling of quotes in table names, this fixes searching for quoted phrases. Include the pygettext tool, along with a batch script I wrote to run it on qwitter. Justin version 4.08: Documentation updates: rewind, friends/followers of others, and added a note to the tech support section about the conflict with the McTwit scripts. Added important readme things to the ToDo list so I don't forget again. Q version 4.07: Fix filtered trends buffers/add GetHashTags to filtereds. hllf version 4.06: Individual timelines were broken; fixed by correcting an error in the PostExists and AddPost functions in sql.py. Q version 4.05: Fixed many filter-related issues. Q version 4.04: Improved handling of cancelation of various dialogs. Q version 4.03: Added ability to list other user's followers and friends. currently control+win+shift+left/right bracket. Enjoy. Q version 4.02: Better conversation handling: deal with nonexistent posts better. Q version 4.01: Make a stab at semigracefully deleting corrupted config files so we can start/reconfigure if it eats itself. Q version 4.00: Fixed a bug where GetUsername was breaking in friends/followers. ... And the one you've all been waiting for... Basic rewind support. To check to see what a tweet is in reply to, use win+alt+down arrow, better keystroke suggestions? Q version 3.99: Actually include more than the damned changelog... Q version 3.98: Remove unnecessary import in qwitter.pyw, modernize trends buffer, code cleanups. Q version 3.97: Lots and lots more i18nifying of strings for captions and other strings that will need translating. Fixed filters in twitter buffers at least, need to redo PostIndex in sql-based ones as it's broked. tspivey version 3.96: Added unicode patch from @pvagner to support unicode pathnames. Modified db.NewConnection to use os.path.join. hllf version 3.95: Friends and followers buffers now announce the number of items retrieved when buffer is initialized. hllf version 3.94: Set a new config parameter called "friendsInterval" to set the check interval for friends and followers buffers. Removed hard coding of the 1200 interval in users.py. hllf version 3.93: Fixed bug where friends and followers were updating at retrieve interval instead of the hard-coded 20 minutes. This ultimately should be changed to not be a hard-coded value. hllf version 3.92: Modified the GetAllFollowers and GetAllFriends functions to use the new cursor-based pagination system in the API instead of the old page-based pagination system. With the change, followers and friends can pull down 100 users per API call and use far fewer total calls than the old mechanism. hllf version 3.91: Fixed a couple of bugs with the friends and followers buffers. hllf version 3.90: Individual timeline buffers now report new posts. For now I set them to play the same sound for a new search result, but maybe a new sound would make more sense. hllf version 3.89: Friends and followers buffers now announce when they have populated, in addition to telling the user to "Please wait..." hllf version 3.88: Friends and followers buffers now play the new buffer sound when created. hllf version 3.87: Fixed bug where message indicating no new posts in mentions buffer was not being announced upon a forced update. Q version 3.86: Lots more i18n work. Renamed some files. Filters are apparently broken, now, good job me. Q version 3.85: Made lots of strings translatable throughout the application. More to do. hllf version 3.84: Fixed db compatibility with old database, so refreshes on sent buffer of old db does not do a one-time retrieve of 200 tweets. Q version 3.83: Fixed replying in friends/followers, searching in trends, and the browse dialog in lots of places. Removed some more logging. tspivey version 3.82: added files required to hopefully work without requiring VC runtimes. hllf version 3.81: Fixed a few bugs with updating searches , introduced in the previous version. hllf version 3.80: Fixed bug where sent buffer pulled down new tweets with every update. Wrote new function that determines whether a post exists in the database or not by looking only at message ID. hllf version 3.79: Fixed the bug where sent DMs always appeared below sent tweets in the sent buffer, regardless of when they were sent. When an update is now performed on the sent buffer, the retrieved sent tweets and sent DMs are sorted according to timestamp and placed into the buffer in that order. hllf version 3.78: Shelved the code for moving sent DMs into DM buffer till after Q finishes the conversation interface and database expansion. Q version 3.77: Cleanup of code broken by mutable database schema. Q version 3.76: Add the current tweet's screen name to the list urls dialog again. Alastair Version 3.75: Fixed List urls, but it still needs the tweet's sender to be added. Q version 3.74: Modernize a bit of search and individual buffers so they don't break with expanding fields. Q version 3.73: Initial work on a conversations system. Worked out some of the kinks in the database field expantion procedure, it seems to work now. Added an in_reply_to_id field to the database in certain buffers. Converted loads of legacy code to use new methods to gain their information. Start on the conversation builder object, it will be large and difficult and need to retrieve conversation elements from database and web, and self-regulate to make sure it doesn't eat up a load of API calls. hllf version 3.72: Accidentaly removed sent DMs saying, "direct to..." That is now back. hllf version 3.71: Moved sent DMs from sent buffer to DM buffer. Received and sent DMs are now sorted by message ID in DM buffer, so they show up in correct linear time order. Justin version 3.70: Some documentation updates, still need to rewrite section on config dialog. Forgot to update changelog in previous commit. hllf version 3.69: Slight revision to ProcessSentDirects function in sent.py to make it smaller. Added new comtypes dependency to dependencies.txt. Added to todo.txt. Haden version 3.68: New exporter and templates tab committed. Neither fully function. The comtypes package, added to dependencies, is needed for exporting to wav files. Changed setup.py so that it adds templates.confspec when building qwitter.to hllf version 3.67: New sent direct messages added to the database will once again say "direct to " as they used to prior to v3.17. The downloading of sent direct messages now obey the retrieve count sent in the config, as opposed to always downloading 200. tspivey version 3.66: attempted to fix dialogs so focus will always return to wherever we were when we spawned Q version 3.65: Minor tweeks around the program including an attempt to make .data be sorted by time on sql-backed buffers. hllf version 3.64: Rewrote SecondsToString function in misc.py. Now much smaller and cleaner. hllf version 3.63: Cleaned up interface.py. Created a new misc.py file to hold miscellaneous functions. Placed a new SecondsToString function in misc.py. hllf version 3.62: Fixed the copy-to-clipboard feature, first broken in version 3.41. Alastair version 3.61: Fixed Jaws braille, the aargument to BrailleString needed to be quoted. sean version 3.60: Corrected the spelling of "left" in the API remaining announcement introduced in 3.59. is there no function to return time remaining as a string? hllf version 3.59: API calls remaining now indicate the total hourly limit as well as the amount of time (in hours, minutes, and seconds) until the next reset. For example, "You have 118 API calls left. They will reset to 150 calls in 27 minutes, 19 seconds." tspivey version 3.58: fixed html_entities.StripChars to handle entities of the form ’ by replacing with their unicode chars. hllf version 3.57: Added a "Mute Status" option to the "Sounds" tab of the config dialog. User can now set mute status either via ctrl-windows-m or via configuration dialog. hllf version 3.56: Added a "mute all but receive" muting option. The options now are mute off (no muting), mute receive (only receive sounds are muted), mute all but receive (mute all sounds except for new tweet, new reply, new dm, and new search result), and full mute (mute everything). Q version 3.55: Now filters match on *all* fields of posts! Q version 3.54: Update buffers to use new mute system. Q version 3.53: Fix a few things with mute... Q version 3.52: Make mute mode a 3-way toggle: no mute, receive mute AKA current mute mode, and full mute AKA no sounds at all. Q version 3.51: Another fix to individual buffers... Q version 3.50: Insure the individual buffers actually respect their retrieveCounts... Q version 3.49: Corrected not being able to view tweets in all buffers. Haden version 3.48: I messed up changelog. Fixing. Haden version 3.47: I sent a broken speech.py last commit, fixed. Haden version 3.46: Moved speech tab. Start on a templates tab of config. It currently does nothing. Q version 3.45: Allow configurable amount of posts in individual buffers. Make the new-style filters stack infinitely. Haden version 3.44: A fix to config.py. Q version 3.43: One more file... Q version 3.42: Include forgotten templates.confspec :( Q version 3.41: Substantially redo the templates system, it's based out of templates.confspec for adding new templates. Will need to update documentation on altering messages or hopefully eventually write dialog. Two ways of using templates system, examine both usage in interface.py retweet and in buffer/twitter.py FormatPost for details. Q version 3.40: Make filtered buffers case-insensetive, could make this configurable I suppose. Added a GetMessage function to buffers/twitter.py which I'll begin utilizing before I eventually switch to the new post objects. Q version 3.39: Rewrite and fix lots of the exporter. Snappier, better organized although exporting buffers still takes *way* too long. I will need to start writing functions to handle ranges... Added a GetMyDocumentsDir function to paths.py for later use in the exporter. Q version 3.38: Fixed braille, upgraded output, allowed for setting No braille output, moved braille tab. Haden version 3.37: Added necessary functions for braille.py. They may not work. Let me know if you have errors. mattc version 3.36: Added System Access support to braille.py. Q version 3.35: added braille.py which I modeled after speech.py. needs the actual functions to be plugged in. Q version 3.34: Setup file optimizations, no longer require admin. Q version 3.33: Fix GetHashTags in filtered buffers, report how many saved searches are being loaded. Haden version 3.32: Smashing the buggies. Haden version 3.31: Updated readme and todo. Q version 3.30: Fix filtered buffers to work with GetMentions and the like. Q version 3.29: Allow individual timelines to respect the retrieve count. Minor tweeks to insure a better building experience. Q version 3.28: Updated documentation, fixed followers and friends buffers. Added classic mode sound system if the beta's broken, select on sounds tab. Haden version 3.27: One more small change to the configuration dialog. Haden version 3.26: We can now export to .txt format successfully. Q version 3.25: Fix filters to actually work using the new method. They're stackable and monitor their sources and amazing. Also fixed new replies to be spoken as mentions. Q version 3.24: Renamed some buffers. Q version 3.23: New database startup code, not yet used. Lots of work on buffers, index-based props finally actually work. Tell me if this changes how quickly posts are actually read. Fixed individual buffers. Fixing .index means jumping to posts should work again without the odd behavior it used to exhibit. Justin version 3.22: Updated the readme to document new commands. Q version 3.21: Switch the sound subsystem to use events to play to get around audio not being to play from other than main thread, if your sounds were suddenly getting cut off before this might fix this. Many tweaks to buffers including a new function, GetPosts, which accepts a min and max, and returns all posts between and including min and max. Gave buffers their own shutdown method. Remove Borris's soundpack as it's in Soundpack Central. Work on rewriting filters, currently incomplete. Haden version 3.20: More work on the configuration dialog. We're getting closer. Added required dependencies. Q version 3.19: Switch back to using pyaudiere without the evil Jaws difficulties. Fix a weird little thing that was breaking individual dialogs. Theoretically updated public timeline to use new framework. Haden version 3.18: Fixed a bug that did not allow you to unfollow someone. Q version 3.17: Switched most buffers over to using an event-driven update system. For details, look at buffer/buffer.py's __init__ and Update functions. Added necessary pydispatcher dependency. Medium buffer cleanup, removing unnecessary code and refactoring internals to standardize the buffers some. Work on filtered buffers, although I intend to fully rewrite these with the new event system, stacking them should at least work again. Optomize the database shutdown routine to only vacuum the database if required. Thread off the twitter startup/authorization process for a more snappy startup. Make sure the login failure dialog is in focus. Bit more logging all around. Added signals.py to define signals for the event system. Haden version 3.16: Commented out the export keystroke and other things from qwitter.confspec and keymap.confspec. Haden version 3.15: Enjoy the use of the cancel button in the config dialog. A start on an optional GUI. Small update to notification_area.py for when we have a qwitter.ico file. Q version 3.14: Created an InitializeTwitter function in twitter_helper.py to handle all our initializing and auth checking and the like. Inform user on login failure. Welcome message, bit more work on the notification area icon. Haden version 3.13: Fixed the title of the configuration dialog. Alastair version 3.12: made paths.py and config.py work correctly under linux. Haden Version 3.11: Switched to using sc.SizedPanel for the pages of the config dialog. It still has some bugs though not as many. Alastair version 3.10: Add xml to dictionary parsing for later soundpacks support. Q version 3.09: Replaced the next/previous post code in the sql buffer class to not rely on the id column to always be in order, instead ordering the column itself and finding the next post with a > or < id. Tell me if this slows us down any. Added forgotten dialogs/twitter_individual.py which gives us our nice little new individual dialog. Q version 3.08: Created a dialog to determine which person to obtain individual timeline buffers on and added it. Fixed GetMentions to not return an @ before usernames, adapted code that had excluded said @. Q version 3.07: Finished splitting dialogs out into separate files. Only left the config dialog in dialogs.py for Haden. Tell me if any dialogs, (other than the configuration dialog), don't work? Q version 3.06: Revamp the direct message dialog. It was incorrectly limiting characters, and the title wasn't updating if you changed the username. Q version 3.05: Begin splitting dialogs off into separate package, most are still currently broken. Haden Version 3.04: We have a new configuration dialog. It uses wx.Notebook. This means that it has multiple tabs. There are several errors however. See bugs.txt for more details. Also, work on the exporter, finally fixed the new/view tweet dialog, and a start at a system tray icon. We need someone to create a qwitter.ico file which is an icon for the system tray thing to work. Q version 3.03: Fix forcing updates in replies and trends. Q version 3.02: Modify the buffer updater so that it's fully self-contained and can be threaded. Threaded it off to prevent freezing when update is taking ages. Updated tweets and search buffers to respect the readNum config option. Wrote a GetColumns function which I will utilize in the feaux ORM. Started building post objects, sql-backed posts should provide read/write access to their properties and the reading part will actually work, still need to work on the writing sql... Removed some unnecessary logging. Q version 3.01: If updates fail, now, all the dialogs come back up! Q version 3.00: Fix a possible bug with searching. Make a stab at bringing dialogs back up when posting fails. Q version 2.99: Make sure that viewing a tweet doesn't break in trends/elsewhere where we can't get a screen name to associate with a tweet. Q version 2.98: More work on the twitters session, going to need to change twitter_helper.py/globals.TwitterApi over to this system, anyone have ideas how we can turn sessions into folders? Alastair version 2.97: Fixed searching. Q version 2.96: Sessions will now take over most of the functions that buffers.py handled. Ported the twitter buffers over to the session system. Q version 2.95: Modernize keyboard.py slightly. It will need some rewriting as sessions are activated. Beginnings of sessions. Fixed searching for real. Q version 2.94: If posting an update fails, bring it back up. Won't work for replies/dm's yet because of structure. downgraded twitterapi, still broken? Q version 2.93: Polished up buffer/sql.py to prevent any possible errors, log better, etc. Updated twitterapi from git hub, report problems. I believe this update should enable ssl, someone confirm. Q version 2.92: Update documentation, few cleanings. Readying for an alpha or something. Tyler version 2.91: Switched to using os.path.getsize in setup.displayInfo because it's a dedicated function for getting the file size. No point using os.stat, which gives more info than we really need. Q version 2.90: Integrate the stub of internationalization support, I suspect we'll need this for our $time stuff at the very least. Q version 2.89: If replying to a tweet you have sent, reply to the first username mentioned in that tweet if thare are any, and if the new config value, replyToSelf is left to its default, False. Clean up and improve GetMentions to strip any yuck chars off the ends, tell me if I've missed any. Q version 2.88: Fixed string templates for messages. Q version 2.87: Fixed dismissing filters to not murder the buffers next to them. Q version 2.86: Removed unnecessary code from copy to clipboard in search buffers. Strip out last of the storage.py system, deleted the file. Filtered buffers now dismiss in a jiffy, as do searches. replaced each buffer vacuuming the database during its shutdown sequence with a single vacuum on app shutdown. Added an index property on buffers which maps to get/set index, ported interface.py to use. Fixed a few functions, mainly shutdowns, weren't being called because of MIxeD cAsE. Added more logging. Write the config after setting current buffer. Fixed to fail more cleanly when a buffer index can't be obtained. Added and utilized a shutdown method in db.py. Fixed saved searches not actually getting saved. Haden version 2.85: Use propper string templating for search templates. Q version 2.84: Use proper string templating for our templates. Haden version 2.83: Changed statuses.friends_timeline to statuses.home_timeline in tweets.py. This will soon replace status.friends_timeline, so I went ahead and did it. Fixed some bugs in the update system. We now get to the part where qwitter exits. At this point, the update system is exitted to and therefore we are at a stop. A function needs to be written to restart qwitter. Q version 2.82: Fix GetHashTags if there *aren't actually hashtags in the current message. Beginnings of my buffer-side GetUrls code. Stub of the exporter. Added things to todo. Tyler version 2.81: Fixed clearBuffer, as per @hadenpike's instructions. Haden version 2.80: When calling a search dialog, it now uses a new function called GetHashTags in twitter.py to check for hash tags. Now other functions can use it. It requires an index parameter. Also added retweet checkbox to new tweet dialog. This is only visible when calling view tweet. If checked, the tweet is passed to the retweet function. Temporary fix for title bar not displaying number of chars in post. Q version 2.79: Announce if in mute mode on application initialization. Haden version 2.78: I broke search buffers earlier, fixing. Q version 2.77: Made a stab at forcing wx to write its log to the AppData dir so as to avoid having bad things happen with initial tracebacks on secure NT systems. Wrote a conventions.txt file outlining some of the most common code conventions we utilize for new programmers on the project. Feel free to update as necessary. Q version 2.76: Fixed up my breakages in interface.py, made all the New* functions cleaner. Q version 2.75: Further modernized interface.py. Upgraded buffers.GetBufferIndex to take 0 args, returning the index of the current buffer. Added more logging. Haden version 2.74: Introducing the new and improved new tweet dialog. Haden version 2.73: Documented how to modify templates in the readme. Added a keystroke reference section to the readme. It's currently a table listing the function name, the keystroke to call it, and a description of that key. Strip parenthesis off of URL's/screen names when bringing the URL choice dialog into focus. The twitter search dialog now behaves more like the follow dialog, E.G, if the current tweet contains hash tags, they appear in the combo box. Use down arrow to get to them. The search buffer can now use all of the replacement variables for templates that are available to other templates. Q version 2.72: Yet more modernization of interface.py, navigating through tweets should theoretically now be faster, I'd like real-world impressions of this. Modified buffers.RemoveBuffer to not explicitly set to the previous buffer index, let the DismissBuffer code or whatever handle it. Made the shutdownthreads in buffers daemonic just in case we want to die quickly so as not to hang around during system shutdown and whatnot. Afraid this may bring back zomby saved searches, will have to research another fix. Modernized the List URLs code. Fixed a possible bug where Qwitter might choke when DM'ing someone with odd characters in their screen name. Q version 2.71: Updated more of interface.py to bring in line with new convention. Fixed direct messages not being able to take unicode characters. Dismiss buffer now indicates what buffer it cannot dismiss. Q version 2.70: Fixed individual timelines in cases where a since_id wasn't provided. Allow the friends/followers fetching functions in twitter_helper.py to accept a username to return information on, if none given, default to the current user's screenname. Haden Version 2.69: Made qwitter strip the most common punctuation marks off of the end of URL's and screen_names. Q version 2.68: Initial work towards the "fetch more" system. Modernized some more of interface.py, but stuff still doesn't all work like I'd like it to. More work on the updater system. Q version 2.67: Let's make those unicodes, not str's, that way they don't break on non-ascii stuff, eh? Q version 2.66: Fix bug where posts with only numbers would break things. Miahtech version 2.65: fixed bug with replying to dm's with ctrl+win+r; Haden came up with fix, I just committed Q version 2.64: More update work, still not done. Remove unneeded dirs. Various other little improvements, change paths.py to retrieve the current file's path correctly. Tyler Version 2.63: Fixed syntax error in src/svn.py: there was a ) without a matching (. Tyler version 2.62: Added configobj, py2exe, and wxpython to dependencies directory. Haden version 2.61: Removed unneeded files from dependencies. Haden version 2.60: Rebuilt dependencies directory. Q version 2.59: Re-add some necessary files for installer. Q version 2.58: Add important forgotten files that svn didn't pick up on. Bad svn. Q version 2.57: Attempt svn rebuild, all old changes lost. Please rebuild dependencies directory. Tyler version 2.56: Deleted dialogs.py.old, replaced text of broken dialogs.py with text of that file. Silly me, I didn't think of that when I was committing the previous revision. :) Tyler version 2.55: Whoops, forgot to commit dialogs.py.old. Tyler version 2.54: Include old copy of dialogs.py--rename dialogs.py.old->dialogs.py. Haden version 2.53: Include pysvn in dependencies directory. Q version 2.52: Include forgotten updater.py -- the guts of the updater system. Q version 2.51: Fix broken filters. Initial work on the updater, not currently working but committed because I must sleep. Update setup.py to let uac know that the app needs admin rights. Q version 2.50: Attempt to have searches dismiss faster. Q version 2.49: Make searches no longer update, counting on the buffer to handle it to remove search freezing. Q version 2.48: Correctly added new buffers to buffer package. Created single-user timeline buffer and bound to control+win+i. Made table syncing not break on weird table names. Q version 2.47: Removed lots of legacy code that used storage.py and updated with buffer-using code. Yummy. Still more required before we can get rid of storage.py for good. Q version 2.46: Fix a syntax error, write code to sync up database tables, or, at least, add new columns to them. Q version 2.45: Removed full caching of followers and friends, let the buffers do their jobs, now. Wrote a simple API to the tweetblocker service for later antispam work. Threaded off buffer shutdowns for yet more snappyness. Small sql buffer cleanups, version updating, code cleanup. Q version 2.44: Consolidate a lot of code from friends and followers into a new, improved, shiny users buffer class. Clean up spelling of a few messages in interface.py. Update the dismissing buffer code so old buffers don't get to hang around anymore. Q version 2.43: Make a stab at killing some memory leakage by defining data as a prop which accesses the database tables on sql buffers. Q version 2.42: Updated both followers and friends buffers to work as sql-backed buffers that don't suck terribly. Haden version 2.41: Fixed a syntax error in setup.py. Also added statuses.retweet_to_me to twitter_helper.py in preparation of the retweet API. Q version 2.40: Removed a bug where saved searches weren't properly handled on shutdown. Threaded off dismissing of saved searches so a laggy API doesn't slow us down. Minor tweaks to qwitter.confspec for a friendlier experience. Small edits to setup.py to make it a bit nicer. jhsw version 2.39: Added AutomaticallyRT checkbox to config dialog. Haden version 2.38: You can now change whether qwitter automatically rt's tweets or whether the text is placed in the new tweet dialog. To toggle this, change the value of AutomaticallyRT in qwitter.conf. Haden version 2.37: Switched device notifications from a yes/no dialog to toggle. Added a key to check how many API calls you have left this hour. Currently control+win+a. Also, organized and updated twitter_helper.py. Haden version 2.36: Fixed a bug that was causing a runtime error. Haden version 2.35: You can now update your profile from within qwitter. Currently control+shift+win+p. Haden version 2.34: You can now turn device updates on and off for a user. Currently control+shift+win+d. Q version 2.33: Made the database code less likely to choke on odd table names. Stab at modernizing the followers buffer. Q version 2.32: Switched back to the old sound subsystem to prevent errors and issues with restarting jaws. Bloody Freedom Scientific. Haden version 2.31: By default, the dm dialog defaults to the edit field, unless no user name was found in the focussed tweet, in which case, it defaults to the dm who field. Q version 2.29: Fixed a bug introduced by Haden which rendered dm dialog box titles uninformative. Haden version 2.29: Now when calling the direct message dialog, you have an option to enter the screen name of the person you want to dm. The user name of the focussed tweet is already prefilled in the box. Q version 2.28: When dismissing a buffer, try to go to the index where the tweet in that filter was in its parent buffer. Also, don't drop back to tweets by default, instead, try staying in current buffer on dismissal. Fix saved searches initializing. Q version 2.27: Try to make this dialog so the tweets can be completely viewwed! Q version 2.26: Update confspec file to reflect replacement with oggs. Update setup.py to work with numpy. Q version 2.25: Replace all .wav's with .ogg's thanks to using the new sound subsystem. Dramatic installer size shrinkage. Q version 2.24: Rewrite sound.py to use a single audio thread. Include numpy in dependencies. Note I built it from svn snapshot so poke me if it's broken. Tyler version 2.23: Added support for removing "_svn" from sound packs list in dialogs.configurationDialog.updateValuesFromConfig Q version 2.22: Switch to using pyaudiere instead of wxpython for sound output. This opens up being able to play oggs, panning, etc. Download required, information in dependencies.txt. Q version 2.21: Thread off posting dm's, retweets, and replies to make them snappier. Q version 2.20: Spurious saved searches don't pop up anymore. Nifty. Haden version 2.19: Screen names can now be spoken instead of the users name when reading tweets. This can be achieved by changing the following line in qwitter.conf. tweetTemplate = "$when, $name posted $message" Change $name to $screen_name. I'm planning to attach this to a hotkey as soon as I can find one. Tyler version 2.18: Consolidate some statements in keyboard.py--when accessing the i array in InitializeHotKeys, convert the "key" value to lowercase in the same statement as it's assigned a value from either i[3:] or i[4:]. Q version 2.17: Thread off the saved search loader so we don't get that yuck lagtime on startup. Q version 2.16: Added jump to post dialog, control+win+j. Thanks, @brucetola. Added a help message for the portable option to the command line option parser. Added logging to the public timeline buffer for if it busts. Q version 2.15: Updated readme/other such things to ready for release. Haden version 2.14: Just a small change to fix https support. Tyler version 2.13: Made some changes to notes in dependencies.txt. 1) pysqlite3 not required under Python 2.6. 2) Gave wxpython website for dl of v2.8.10.1 (MSWin32 unicode tested and working here under py2.6). 3) Wrote "download required" next to configobj as it is no longer provided in the dependencies folder. Q version 2.12: Force new tables to not allow duplicates. Filters update correctly now. Q version 2.11: Add more logging for when this is released and stuff breaks in various ways. Add config option, autoReadNum, which, when set to False, tells speech not to automatically say how many new posts came in. Wiw. Somehow, magically fix things with filters except now they don't update. Q version 2.10: Sanitize db tablenames in a nice, clean, consistent way. Log when sounds don't work so we can let soundpack creators know. Have CreateSavedSearch return the id of the saved search. Close pesky still-open database cursors. Play nicer with unicode searches. Haden version 2.09: Added two controls to configuration dialog to control SAPI speech and volume. Also added https to qwitters supported links. Q version 2.08: Make indexes announce starting from 1 at the top. Fixed saved searches to kill themselves correctly. Caught a possible bug with table creation -- why isn't db.TableExists() working? Q version 2.07: Utilize twitter's saved searches buffer to save persistent searches. Load saved searches on start. Add end flag to buffer shutdown to indicate if the app is ending. Q version 2.06: Added GetMentions to the twitter buffer to get all @people from a tweet. Made Qwitter remember and restore the buffer you were in at program exit. Added methods in twitter_helper.py to list, add, and remove favorites. Added more sounds. Multithreaded dismissing of buffers so it's speedy mcspeederson. Q version 2.05: Fixed stacking filters. Added new calls to sounds. Q version 2.04: Made updating filters work. Still need to get stacking worked out Q version 2.03: Update readme. Add message once config is complete. Don't let filters with #'s in them break sqlite. Q version 2.02: Add public timeline. control+win+p. Q version 2.01: Finally make the search buffer a twitter buffer. Put update hooks into all update functions. Cleanup shutdown sequence. Q version 2.00: Optimized filters dramatically. Enabled filter stacking. Forced retweet warning to interrupt on speak. Fixed db.CreateCursor to always return a usable cursor, even if not optimally storing and whatnot. Store old buffers to shutdown later if necessary. Force trends, followers, and friends to not respawn themselves. Added a GetBufferByName function to the buffers library for easier finding of buffers. Many small tweeks and code changes. I expect many, many bugs. jhsw version 1.99: Implemented DM safe mode which, when enabled, disables retweets in the Direct Messages buffer. Also, when the reply hotkey is used in the Direct Messages buffer, a direct message is sent instead of a public reply. Q version 1.98: Fixed inclusive filters, shrink dialogs. Q version 1.97: Added basic filters. Currently control+win+shift+f to apply filter, then decide if want all posts except those with your term in it, the default, or only to return the posts including your term. use the checkbox. Q version 1.96: Added Clear buffer keystroke: control+win+shift+delete. Added RemovePost function in buffers. Q version 1.95: Made all edit boxes the size of the display! Added checkbox to toggle if searches are saved in-db. Note you have to re-initiate the search to see the old results. Q version 1.94: Groundwork for persistent search/trends data. Make most buffers sql-backed. Q version 1.93: Load password in config dialog for ease-of-use. Make sure sound pack is selected in combo box in config dialog. Q version 1.92: Add any users mentioned in a message to a follow edit combo now. Note that you have to hit down arrow twice to see all of them. How to fix? Q version 1.91: Remove unnecessary imports from various files of buffer package. Alastair version 1.90: Split buffer.py into a buffer package. Q version 1.89: Fix the URL handle dialog to handle links preceded by a dash, without, as it used to do, dropping them in the trash. Thanks, @brucetola Q version 1.88: from log import logging somehow got deleted from twitter_helper.py. Fixed. Q version 1.87: Fix on flaky indexes being set for trends and searches. Also make sure the search dialog's in focus. Q version 1.86: Stab at fixing followers/friends lists. Fix clear method to reset the data list, which means showing all trends, and make sure the ListUrls dialog is visible on launch. Q version 1.85: Update version, make sent dm's respect retrieveCount, minor tweaks. Q version 1.84: Remove logging, update readme, fix database code, deactivate loading from library.zip for perhaps simpler autoupdate in future. Q version 1.83: Remove old database code that's no longer used such as DestroyCursor and SyncDatabase. Q version 1.82: Direct all buffers to download config['client']['retrieveCount'] as the only reason we didn't before is the old API didn't support. Rewrote the db.NewConnection function with guidance from http://www.yeraze.com/2009/01/python-sqlite-multiple-threads/ in practical terms this should theoretically mean no more threading issues with the db. fix GetAppDir in paths.py to reliably return the application's directory instead of "." Q version 1.81: Make a stab at a long-standing (since 0.1) bug that would randomly cause some dialogs to be out of focus when launched. Thanks, @tspivey, for the idea. Activate some more logging in new places in order to track down a strange bug. Add the Go Tweeting! soundpack, thanks @pitermach. Q version 1.80: A few cleanups with the new friend/follower buffers. Q version 1.79: Add buffers with friends and followers. control+win+left bracket for friends, right bracket for followers. Q version 1.78: Update readme. Q version 1.77: Add mute command. Q version 1.76: Fix: Direct messages download again. Dialogs work. Q version 1.75: Add readme as html. remove text. Q version 1.74: Add direct messages to sent buffer. Note: Hackish, ugly, running up against the limits of the system, requires infrastructure change. Also, when invoking the search dialog from the trends buffer, prefills the text box with the term you're sitting over. Q version 1.73: Prevent broken auto-filling buffers from interrupting the buffer registration process. tspivey version 1.72: fix html_filter.StripChars to work properly and return unicode. Q version 1.71: Add unfollow: control+win+shift+l. Fix a case when a buffer would kill itself and not even care! Added output.AnnounceIndex to announce the index of the current buffer, call it with CurrentTweet. Q version 1.70: Update readme. Much better Unicode support. Q version 1.69: Fix copying post to clipboard to call a buffer-specific method to work, FormatPostClipboard. Now you can copy from searche, trends, and other future buffers sans issue! Q version 1.68: Set the insertion point to the beginning of the New Tweet dialog for when it has text. Thanks, @coke_drinker. Reverse trends so they're actually in order when shown. Hint: you start at the bottom. Q version 1.67: Improve handling of non-standard buffers. More to do. Q version 1.66: Added trends buffer, currently control+win+t, as a test case to see how hard building buffers is. Reworked some of the harder bits to not be. Modified DismissBuffer to work on any buffer who has its CanDelete to 1. Removed no longer required input.py Q version 1.65: Clean up ListUrls dialog, add follow dialog. Currently control+win+l, prefills edit field with the person who you're hoving over in buffer. Q version 1.64: Add CreateTable function to db.py as expected by new buffers. Several fixes to make it work with new users again... Q version 1.63: Fix a reconfigure death bug. Q version 1.62: Shut down old search buffers once they're removed so they don't drain twitter API calls. Q version 1.61: Minor fixups to dialogs.py. Add i18n.py with the beginnings of work towards internationalization. Fix GetScreenName to actually return a screen name, not a name for twitter-like buffers. Make search buffers auto-update. Q version 1.60: Add a bug to bugs.txt. Q version 1.59: Fix replying/directing to call on the buffer to get a screen name. Q version 1.58: Working search support! Q version 1.57: Several code cleanups. Now make buffers handle formatting their own output with their FormatPost method. finish search buffers. Add search template. Q version 1.56: Beginnings of search support. Add twitter_search.py with helper functions and a basic search buffer which you instantiate with a string term, and when you call its .Update method, it does a search for that term on Qwitter. Q version 1.55: Remove old code which uses the python twitter API and replace with new, better, shinier code which supports the other new thing. Port all instances of NewTwitterApi over to TwitterApi. Q version 1.54: Add missing file to make twitterapi work. Q version 1.53: Connect all four standard main buffers to the new twitterapi class instead of the python twitter API. Q version 1.52: Added Mike Verdone's twitter API under twitterapi in src. Going to port to using this for oodles more functionality and flexibility. Q version 1.51: Function reshuffling, move AnnounceBuffer to output.py and update appropriate calls. Add shortcut to changelog to start menu. Several minor code cleanups. Q version 1.50: Add view log file shortcut to start menu. Update version. Fix a tiny chance of a bug when it comes to speaking new posts. Add indicator when force update fails to retrieve new posts. Note: when it does this really quickly it means you've hit up against my 1 minute caching -- you can't do more than one update in a buffer in a minute, although you can do an update in each buffer. And really the caching isn't mine, it's what I've got working with the python twitter API. Keyboard code cleanup, still requires a bit more. Re-written exit Qwitter function, currently non-functional. Q version 1.49: Integration of the new buffer objects with the rest of the code. Currently they're functioning via adapters in storage.py so most things are unchanged, but sounds play now only once per chunk of updates. I'll document buffers more as I go along fastfinge version 1.47-1.48: Added con.text_factory = str in db.py to fix terrible, terrible qwitter bug that would cause qwitter to crash and refuse to restart when people on your timeline used non-english characters. Q version 1.46: Improve/debug buffer code. Add twitter buffer class. Q version 1.45: Minor cleanup in qwitter.pyw. Just getting a stable jump-off point for adding buffers. Q version 1.44: Added buffers.py as a simple library to work with buffers. buffers is now a new global variable in globals, although to manipulate it you should use the buffers library. If you need to do something with buffers, add it to this library. Q version 1.43: Buffer updates. Added all main buffers to buffer.py Q version 1.42: Remove any svn directories from final build. jhsw version 1.41: Added the ability to choose the maximum number of tweets to pull from Twitter in the config dialog. Q version 1.40: Re-add dm limit, 140 chars for now. Q version 1.39: Added soundpacks to configuration dialog. Added two to test. Thanks goes out to Patrick Perdue and Oriol Gomez. Several minor code cleanups. tspivey version 1.38: Fix speaker so SAPI works as expected in configuration dialog. tspivey version 1.37: Fix db.py so it tries sqlite3 after pysqlite. Q version 1.36: Remove unnecessary screen reader choices from configuration dialog, let the auto code decide. Compress scp streams in release.bat. tspivey version 1.35: Fix sapiSpeaker so it can be silenced. Added silence to all the rest so they won't break. tspivey version 1.34: fix wineyesSpeaker in speech.py so that interrupt calls Silence if set before speaking. Q version 1.33: Don't die when started from other than the working dir. Don't be a total twat about opening your config file from the wrong place anymore. Thank you. Q version 1.32: qwitter.pyw code cleanup. Q version 1.31: Added basic command line parser. added portable mode to make Qwitter run from thumb drives and keep everything in current directory, -p or --portable. Fixed code that would cause traceback on first start after configuration shown. Bit more buffers work. Q version 1.31: Re-add all dependencies. Whoops? Also fix a minor new buffer bug. Q version 1.30: Re-Initialize the twitter API after configuration dialog. More work on the buffer class, separating out a standard buffer from sql-backed buffers. tspivey version 1.29: reworked speech.py to try to autospeak through anything available. Q version 1.28: Re-initialize speech after displaying the configuration dialog so you don't have to restart Qwitter for your screen reader choice to be applied. Q version 1.27: Actually add the html_filter.py code, thanks Tspivey. Q version 1.26: Use tspivey's html filtering code to clean up incoming tweets. Q version 1.25: Sync up with python-twitter svn tree. Q version 1.24: Make the buffer class follow the iterators protocol. Note that calling for item in buffer starts at the buffer's .GetIndex() Q version 1.23: More buffers updates. Move URL to *always* be first in the browse tweet dialog. Q version 1.22: Beginnings of yet-again revised buffers code. Initial skeleton of a buffer class in buffer.py. New function, TableExists, bool true/false in database. Default check interval increased to 4 minutes after loading from config file broke. tspivey version 1.21: Dramatically shrink setup script. Add choice to add Qwitter to startup menu. Q version 1.20: Fix: re-allow launching from anywhere by referencing AppPath. Add DataPath and AppPath to globals. Fixes especially re-launching after first start. Q version 1.19: Move database into appdata\qwitter directory. Q version 1.18: Removed unnecessary keymap.conf Q version 1.17: Read and write anything to the appdata\qwitter directory to be more kind to Vista. Switched over to using a confspec for hotkeys. Release compiled with latest wxpython to resolve a possible manifests bug. Switched paths.py to use os.environ instead of pywin which was erroring on compile. Q version 1.16: Added paths.py to handle different path-related functions. Updated sound.py to use these functions. Q version 1.15: Fixed conflicting StopSapi keystroke. Q version 1.14: Code cleanup. Fix ShowConfigurationDialog to preload all but password information. fastfinge version 1.06-1.13: added basic SAPI support, and a hotkey to stop sapi speech. Q version 1.05: Re-order the browse to dialog so URLs come first, followed by any usernames in the tweet, followed by the tweeter's username. Q version 1.04: Added retweeting: currently control+win+shift+r. Q version 1.03: Updated the keyboard handler to use the actually-existing m_keyCode for logging broken key events. Fixed the positioning of the Automatically speak Tweets checkbox. Q version 1.02: Fix interface.py Q version 1.01: Actually add qwitter.iss Inno setup script. Q version 1.00: Fix the direct message limit to not warn if a message exceeds 140 characters. Make config and sounds pull their own paths so qwitter can be run from anywhere. Re-added interface.py to svn. Add the MIT license. Write config after setting index, Thanks Alastair. Remove Jawter sounds. Update setup.py to automate more -- note that you now need inno setup to run setup.py, comment out the appropriate bit to not need it anymore. Moved readme.txt to dependencies.txt. Added readme.txt, Thanks Miah! Wrote Inno setup script. Grew all tweet/reply/dm dialogs so all text is visible. Added release.bat script to make releasing build to website easier. Q version 0.99: Fixed new tweets actually post now. Reactivated ctypes... Q version 0.98: Reply dialog brought in line with direct message dialog. Should and will combine soon. Code cleanup. Configuration file cleanup. Added reply sounds. Q version 0.97: No longer show an empty window for the executable. Add more logging, trim off spurious colons when browsing to a username. Q version 0.96: Add the in_reply_to_status_id parameter as optional to PostUpdate and take advantage of it. Also add the jfwapi dll as a necessary part of the package, finally? Q version 0.95: Add @username links to the browse dialog. I'd like to later replace this with a way to pull up our own user dialog on them. Suggested by @ultraleetj Q version 0.94: Fix an accidental addition to a bit of dialogs.py Q version 0.93: Basic direct message support. Currently you must be over a person's tweet who you want to send a dm. control+win+d, as always can be changed in keymap.conf Daiverd version 0.92: added ctrl+win+pageup and down to jump by client step where step is a percentage of sorts Q version 0.91: Add pageup and pagedown to keys that can be registered. Q version 0.90: Removed some old unneeded configuration file options, added sentIndex to config, switched to using wx.Sound for playin sound for any possible future cross-platformishness. Daiverd version 0.89: quit qwitter is back! Q version 0.88: Removed a spurious bit of debug code. Fix previous commit message. Q version 0.87: Wrote the function to fill the sent buffer. Still need to kill some hardcoding crappage especially in the Check* functions. Reminded the primary checker to check *all* buffers. Fix new direct messages not being announced as directs but instead as tweets. Q version 0.86: Remove hardcoding from AnnounceBuffer so it actually checks the buffers for their names. Disable the unread bit for now as it was flaky and needs rethinking. Enable the sent buffer, still need to write its function in input.py Q version 0.85: Create any tables in the database if they don't exist, retrieving table data from the BUFFERS dictionary defined in storage.py. Q version 0.84: Define the new BUFFERS dictionaries in storage.py and reset most helper functions to return the correct keys. Defined sent buffer, commented out until I write the db sync code. Q version 0.83: Add ability to copy current tweet to clipboard, move templates into their own specific section of the configuration file. Currently control+shift+win+c to copy to clipboard. Q version 0.82: Switch to pulling down 100 tweets at a time, settable on config. Only retrieve tweets newer than the max twitter_id. Q version 0.81: Cleaned up some code, added more and better loggage. Q version 0.80: Added globals.py, forgot to before. Moved PostTweet into interface.py, it needs somewhere better to live. Direct messages update again, at least manually. Q version 0.79: Add tweet_id to all tweet-related database tables. Will be used very soon! Q version 0.78: Add the forgotten output.py which handles speech output and hopefully more later! Q version 0.77: Major code refactoring. Connect buffers to respective functions to fill them up, abstract lots of the code out of the main qwitter.pyw into subsystems for storage, input, and output. Many minor code cleanups, although I'm sure I broke plenty. Q version 0.76: Make the CheckTweets and other checking code more robust. These need to be connected. Q version 0.75: Buffers cleanup to fix cyclic buffer navigation. Q version 0.74: Clean up buffers.py to completely use the BUFFERS constant, move TableFromBuffer into buffers.py. Q version 0.73: Add a list of what I consider to be important things to do to the todo list. Copy documentation into the exe build. Q version 0.72: Kind of sloppy but it works; setup the api object if not already initialized. Q version 0.71: Improve the code that returns a table name for a buffer to use the new BUFFERS global. Q version 0.70: Define buffers in a far more logical and better way. Still need to port a bit of code over to using this new BUFFERS constant. currently a list of [config file key for index, table of associated data] Q version 0.69: Final fixes to clean qwitter.pyw up. No more two starting functions, everything's handily handled in main() Q version 0.68: Make qwitter.pyw actually work with new configurations... Q version 0.67: Clean up qwitter.pyw so that it can actually get tweets and check if it's configured on first run. Q version 0.66: Change the log format a tiny bit, activate the replies buffer, standardize receiving and processing of the different types of tweets. More standardization is necessary, in particular making it easier to define new buffers. Q version 0.65: More logging, even for strange and wonderful things that probably won't happen. Removed one of the three loops through the startup sequence. Spaghetti untangling. Q version 0.64: More logging for many things, use a better check for configuration, remove unneeded code. Q version 0.63: Upgraded logging support for db.py. Q version 0.62: Basic multi-user support -- one username, one database. This opens up the possibility, once it's perfected, of storing all information user-centricly in a database instead of program-centricly in the configuration file. I could even see cloud-based solutions for keeping your qwitter database synched. Q version 0.61: UPX some dll files down to cut down on final size. Q version 0.60: Make the executable building process more automated. Q version 0.59: Removed Embedded configobj, install from dependencies. Q version 0.58: Made the configuration dialog a little more useful as now it sets its own values. Observe the sample in interface.py, and to show the config dialog, use currently control+win+o. Multiuser functionality will need to be addressed for this to be a truly safe feature. jhsw version 0.57: Added screen reader selection. Removed asociated todo from todo list. Q version 0.56: A bit more logging, no more 1 days Q version 0.55: Better handling of corrupt or otherwise incomplete keymaps. Better as in they don't crash the damned thing now. Q version 0.54: Squish the database thread issue once and for all, maybe? Fix up time management. Q version 0.53: Announce number of unread messages when you switch to a buffer. Controlled by Daiverd's earlier config option. Announce active buffer on startup. Daiverd version 0.52: readBufferLength is a settable conf option with default of true Daiverd version 0.51: Speak number of tweets in buffer when cycling. Added ctrl+win+v currently opens new tweet with the tweet text inside. Not pretty. Working on a better solution. Q version 0.50: Fix new dm sound. Make buffer cyclic. Q version 0.49: Upgrade to Twitter API from svn. Q version 0.48: Switch to three tables for holding tweets, replies, and direct messages separately. Added buffer system. It is critical that you delete your qwitter.db and qwitter.conf before running this new version. It would also be a good idea to install the new twitter api from the dependencies folder. Also fixed the 1 minute bug. Q version 0.47: Make passwords harder to steal out of the configuration file. Don't try setting the cache limit, let the API handle it. WARNING WARNING WARNING! You must delete your qwitter.conf and recreate! Q version 0.46: Added some more logging, by default don't have names for @replies selected so you can just type. mattc version 0.45: Added System Access support. Q version 0.44: Move logging into its own file, use like from log import logging, then call the standard methods on it -- .debug, .info, etc. Also increased the twitter API cache limit in an attempt to avoid http 400 rate limiting. Daiverd version 0.43: quit qwitter works by killing it's own process, a bit morbit, but it works. Check bugs.txt Q version 0.42: The beginnings of implimenting logging support. Q version 0.41: Support grabbing direct messages. Currently they're just treated like tweets. Need an infrastructure change for anything different. Q version 0.40: Update setup.py to copy essential configuration files into a new build. Still trying to figure out how to get sounds in. Daiverd version 0.39: changed the newTweet dialog to update it's title with number of typed chars. Changed newtweet dialog to react to textupdated events instead of keypress events which gives an accurate text length everytime Daiverd version 0.38: cleanup, killing wmi and such. Daiverd version 0.37: cleanup, killing wmi and such. Daiverd version 0.36: cleanup, killing wmi and such. Daiverd version 0.35: Redid code so qwitters kills running version and loads new one works fine in vista. No multiple qwitters! Need to add a startup and restart sound. There is something messed up with a module that is loading that still prevents qwitter from closing via the close keystroke Daiverd version 0.34: Added code to qwitter.pyw using WMI to check if the pid in conf is running, if so, terminate and continue loading. Currently commented out due to access denied in vista. Something is keeping the program from closing completely please check. Daiverd version 0.33: hotkey to quit qwitter ctrl+windows+q with yes/no dialogue, added pid to qwitter.conf for later program checking/restarting Q version 0.32: Hotkey and function to toggle automatic speaking of tweets. Currently control+win+s Q version 0.31: Add a way to list URLs in a tweet and visit them. Currently control+win+b Q version 0.30: Add $when as a usable variable in templates. Will return how along ago a tweet was posted. Daiverd version 0.29: forced the new tweet dialogue to have a size so that you can read the whole tweet Q version 0.28: Sound on posting tweet. Q version 0.27: Use pysqlite again. Q version 0.26: If they start typing too much, alert them. Q version 0.25: If we have an empty database, correctly set the maxIndex. Added speak function, added update tweets function, assigned to key. Set the twitter API cache to 10 seconds. Q version 0.24: Added error checking to the check interval, made it able to go to 1 minute minimum. jhsw version 0.23: Changed checkInterval to a spin control. Q version 0.22: $name should be tweet[2]... Added reply function and corresponding keystroke. jhsw version 0.21: I lied; todo wasn't actually removed. It is now. Sorry. jhsw version 0.20: Added "check interval" to config dialog. Removed corresponding todo. Q version 0.19: Basic setup.py for building exe. Bootstrap better from a clean launch. Don't require restarting after first start. Executable builds. Q version 0.18: Update readme, make the new tweet dialog actually respect the cancel button... Add a check for length into the posting process, if too long bring the dialog back up with *all of the previous text. Q version 0.17: Add new tweet navigation options, Improve tweet navigation, update todos. Q version 0.16: Added a NewestTweets function, modified SpeakTweet to take an index, added boundary sound. Stop speech from speaking when it's initialized because it actually does have to initialize twice. Q version 0.15: Rename qwitter.py to qwitter.pyw. Fix speech initializing twice. Q version 0.14: Add index to configuration. Remove debugging code. Add sounds, support soundpacks. Q version 0.13: Initial global hotkey support. Add hotkeys by creating a function in interface.py, then in keymap.conf use that function like function="hotkey" I.E. NewTweet="control+win+n" Q version 0.12: Fixed the database threading issue. Q version 0.11: Got rid of some completed todos. Added the keymap to the config system. Q version 0.10: Incoming tweets are automatically spoken if configured. Added several configuration options for sounds to come later. Debugging code removed. Q version 0.9: Databases can now be created if they don't exist. I'll do the speech next. Q version 0.8: Added auto read tweets checkbox to dialogs.ConfigurationDialog, set it's value, will make it work in next version. Q version 0.7: Code modified a bit for database -- now confirms tweet, and some debugging display. Fixed up the imports to be more gooder. Q version 0.6: converted speech.py from the Mongoose Client into a standalone class. To use, do like import speech speaker=speach.speaker() It will auto-load the screen reader from config (or try to guess it) and you can talk to it with speaker.say(text) This requires pywin32, I built a copy for python 2.6 sans directx support (I could add if need later) and stuck it in dependencies for you guys. If using a different version of python, grab from http://sf.net/projects/pywin32 Q version 0.5: Several changes here. Database now has an id column which holds the int which is the tweet index. Nothing to do with twitter's tweet id. I know there's more but I can't remember what it is :P jhsw version 0.4: removed "at tweet[1]", as it was causing problems. Q version 0.3: Designed the TimedFullCheck function and set it up with CheckTweets (more to follow.) Also switched to storing unix timestamps. Q version 0.2: Moved the main timer out of the CheckTweets function so we can call that independently. Also wrote the beginnings of the NewTweet Dialog. Q version 0.1: Initial commit. Connects and retrieves tweets, stores them in db. Lots to do.