Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: foo_aim (Read 8928 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

foo_aim

foo_aim is an AOL Instant Messenger client component for foobar2000.

It supports sending/receiving instant messages, server side buddy list management, user lookup, administrative services, buddy icons, and SSL encryption.

The goal of this project was to create a functional client that utilizes the foobar2000 playlist as if it were a buddy list. To accomplish this, arbitrary .aimbuddy files are created and tagged with ID3v2 tags. These files are then read by foobar2000 and displayed in the playlist. By playing these files, a message window will pop up and allow you to send and receive messages.

There are 5 tags represented in the .aimbuddy files:

AIM_BUDDY_NAME
AIM_GROUP
AIM_NICKNAME
AIM_STATUS
AIM_STATUS_MESSAGE


Initial Setup

Custom playlist columns/groupings will allow you to view the information associated with the above tags. These settings are located in the Preferences dialog and listed under Display > Default User Interface > Playlist View. The following patterns will show all 5 tags in the playlist:

%aim_buddy_name%
%aim_group%
%aim_nickname%
%aim_status%
%aim_status_message%


Buddy icons can be in either BMP, JPEG, or GIF format. To view all of these files in the Album Art Viewer, two additional search patterns must be added for BMP and GIF. These settings are located in the Preferences dialog and listed under Display. The following search patterns will allow for all buddy icons to be displayed in the Album Art Viewer:

%filename%.jpg
%filename%.bmp
%filename%.gif


AIM Options

• Connection

foo_aim options are located in the Preferences dialog and listed under AOL Instant Messenger. The initial page displays connection based options. This is also where you enter your username and password to sign on to the service. By default, the connection is set to sign on using SSL. You can also sign in to ICQ by setting an appropriate ICQ server. Most of these options are self explanatory. The Single client login option is used to prevent a user from signing in from more than one network at a time. Normally, AOL will allow ten connections per username to be signed in, but setting this option will allow only one.

• Privacy

The privacy page deals with...privacy. Again, these options should be self explanatory. ICQ users can use the allow/block lists as if they were visibility settings. Please note, the settings on this page are server side settings. They will affect all clients that properly support them.

• Administration

The administration page allows you to change your password, update your registered email, confirm your account, format your screen name, and upload your own buddy icon. A formatted screen name has spaces and/or upper and lowercase letters. You cannot add any additional characters to your screen name. Like the privacy page, all of these settings are server side settings, so they'll affect all clients that properly support them.

• General

The last page deals with general settings. You can change how a message window is formatted (ie. change the fonts and their styles). Incoming and outgoing HTML messages can be formatted appropriately or overridden. You can also change the temporary location of .aimbuddy files.

Menus

The main foo_aim menu options are located under the Edit menu. This is where you can manipulate your buddy list as well as change your status, update your profile, and search for buddies.

A similar menu can be found when right clicking a buddy in the playlist. There's an option in this menu to message the selected buddy. The reason for this menu item is that if you're currently playing a song, messaging the buddy won't interrupt it.

Download foo_aim

I would be very grateful for testers. I'm specifically interested in how the message window appears on other systems (like Windows XP and systems that have modified themes). If anyone decides to use this component, take a PNG screenshot of the message window for me. I had to replace the drawing features of the tab control and I have no idea what it'll look like aside from my own computer. Suggestions, protocol bugs, and any other weird behavior would also be appreciated. Thanks!

foo_aim

Reply #1

foo_aim

Reply #2
......

Original. I personally would find use for a MSN/Steam component though.
Or even a IRC client.

Protip: you might wanna change your license to LGPL or something. GPL vanilla technically ain't allowed for FB2K code. Or at least devs think.

foo_aim

Reply #3
......

Original. I personally would find use for a MSN/Steam component though.
Or even a IRC client.

Protip: you might wanna change your license to LGPL or something. GPL vanilla technically ain't allowed for FB2K code. Or at least devs think.


I changed it to LGPL now. Thank you for your suggestion. I don't really understand licenses to be honest with you. I'm a simple code monkey...nothing beyond that.

As far as other clients go, I could probably implement an MSN one, but that won't be any time soon. I'd still have to learn the protocol. I want to complete ICQ support for this client before I move on. Since AIM and ICQ both use the OSCAR protocol, they can be combined into one client. I believe Pidgin does this.

foo_aim

Reply #4
foo_aim has been updated to included better ICQ support and various other improvements.

The latest version can be downloaded here:
Download foo_aim

Version 0.2 - Changelog (07/28/2011)

General Fixes/Enhancements:
Fixed a crash with broken/extremely large server packets.
Fixed a crash when freeing added groups that already exist.
Corrected some mutex lock logic when tags are updated.
Improved HTML decoding for hyperlinks.
Corrected an issue with the message window sending to an incorrect buddy.
Prevented message window from resizing on tab creation.
Corrected outgoing message font styles.
The .aimbuddy temp folder will be created if it doesn't exist.
Added a context menu when right clicking a message window tab.
Added an AIM/ICQ server toggle in the preferences.
Added an additional ID3 tag "aim_mood" for ICQ specific moods.

Protocol Fixes/Enhancements:
Increased SNAC size for larger server packets.
Updated various service version numbers to support more features.
Client can now send keep-alive packets every 60 seconds.
Added ICQ authorization requests/replies.
Added ICQ block list capabilities.
Added ICQ Web Aware and authorization privacy settings.
Added ICQ directory search and profile information.
Added some additional status types and ICQ moods. (They work for AIM as well.)

foo_aim

Reply #5
I changed it to LGPL now. Thank you for your suggestion. I don't really understand licenses to be honest with you. I'm a simple code monkey...nothing beyond that.


Fair enough, just was a suggestion, because I know from experience how bad some other devs can be about mixing GPLed and non GPLed code in ways that their precious license doesn't condone. Like making a YM playback component from the only decent library, which just happens to be GPL....

In general, the code for my components is ISC licensed, basically since that allows for almost anything, while still allowing me to be credited.

Quote
As far as other clients go, I could probably implement an MSN one, but that won't be any time soon. I'd still have to learn the protocol. I want to complete ICQ support for this client before I move on. Since AIM and ICQ both use the OSCAR protocol, they can be combined into one client. I believe Pidgin does this.



Okay, I'll keep watching this, it looks interesting

foo_aim

Reply #6
The latest version can be downloaded here:
Download foo_aim

Version 0.3 - Changelog (07/30/2011)

General Fixes/Enhancements:
Fixed a crash when adding a new buddy to a new group.
Added a comma to a string that would have otherwise caused the end of the world.

Protocol Fixes/Enhancements:
Reordered some SSI group packets.
Better handling of Recent Buddies/Not In List SSI inconsistencies.


Unless anything major pops up, I think this build will last for a good while.

foo_aim

Reply #7
This is an interesting idea, but I think it only gets useful if you can have a friendlist, because you can't remember all the names your friends are using in ICQ/AIM. Also, are you planning to make a panel version of it?
Still good work. I'll keep watching the progress.

foo_aim

Reply #8
This is an interesting idea, but I think it only gets useful if you can have a friendlist, because you can't remember all the names your friends are using in ICQ/AIM. Also, are you planning to make a panel version of it?
Still good work. I'll keep watching the progress.


By friendlist, do you mean buddy list? The playlist acts as a buddy list so long as you have the proper columns set up. Refer to the first post, or click the download link for instructions. Once it's set up, you should be able to see all your friends usernames/IDs as well as any nicknames that you assign them. Here's a sample of what it might look like. Sample Buddy List

As for making a panel, the component would lose its uniqueness. The whole idea was to use the playlist rather than create my own buddy list. Creating a panel would force me to do that. And it would be too easy anyway. :-P

foo_aim

Reply #9
Oh, seems like I didn't read your first post completely, sorry for that. But do you really expect your users to change their whole playlist columns setup? You'd have to activate or deactivate several columns if you want to switch from "playback mode" to "AIM mode", thats not very convenient. Or is there a way to have multiple playlist configurations (save them) ? I haven't seen one yet. And I'm using Columns UI with NG Playlist.
Is there a way to do it more convenient?

foo_aim

Reply #10
You can have per-playlist columns in Columns UI. Go to the Preferences: Display > Columns UI > Playlist view. Click the Columns tab and you should see an option called "Playlist filters". You can set that to "Show only on playlists:" for each AIM column you want to set. Likewise, for each music column, you can set them to "Hide on playlists:" so that they don't show up on the AIM playlist. Here's a sample of a Columns UI setup. Sample Buddy List The top image shows the AIM playlist, and the bottom is a regular music playlist.

I'm sure there's more clever ways to go about that, but I can't dictate how a person should have their layout set. So I'm leaving that up to the user.

foo_aim

Reply #11
Ah, now I got it. That works better for me, thanks
My only wishes now are a history function and a better notification for incoming messages, like a sound.

foo_aim

Reply #12
I think I can do those easily enough. I would probably limit the sounds to simple wav files since I think Windows has native APIs to deal with them. As for history, there's a few ways I could approach it. Saving the messages as HTML would be the easiest way and having the component open it in a default browser would keep the size down. I'd hate to have to create a viewer inside of the component since history seems like an external feature to me. There's a few other niceties I might add, but all in due time.

Cheers

foo_aim

Reply #13
foo_aim has been updated to included message history logging, sound events, file transfer support, and various other improvements.

The latest version can be downloaded here:
Download foo_aim

Version 0.4 - Changelog (09/10/2011)

General Fixes/Enhancements:
Fixed a crash when accessing removed buddies from listbox windows.
Fixed an RTF formatting issue with paragraphs.
Fixed an issue when cancelling a status change after logging in.
Fixed an issue with the username not changing after setting it in the preferences.
Added full Unicode folder support.
Added sound events.
Added message history logging.
Added message title options and the ability to keep the message window always on top.
Added more context menu items when right clicking a message window tab.
Removed an ugly border around the message window.
Message window display names and tabs default to buddy nicknames.
Reset vanity variables after signing off and signing on with a newly created account.
Moved the main menu into the View menu.
Arranged the main menu in appropriate sub-menus.
Authorization and file transfer requests will persist until sign-off, or until removed.
Mood and Status Message tags no longer contain a space when neither has been set.

Protocol Fixes/Enhancements:
Fixed an SSI modify issue with regard to ICQ authorization.
Fixed Unicode status/profile lengths.
Added file transfer support.
Added the ability to warn buddies. (In message window tab context menu)
Added account type detection for AIM.
Reordered the signon procedure to prevent a rare status bug.
Transport buddy statuses are correctly displayed.


You can drag files into the message window and it'll start a file transfer for you. Dragging playlist items into it works as well. I didn't realize that until I finished coding it, but I thought it was pretty cool. Another thing I didn't realize is that opening a message window (double clicking on the buddy) doesn't actually affect any currently playing song. I thought it would stop it, but apparently it doesn't. Cool stuff.

I took a little time to create a mock buddy list using the ELPlaylist component for Columns UI. As you can see in the picture below, it can distinguish between .aimbuddy files and audio files. There's plenty of other layouts that can be done, this is just something that appealed to me. You can download the elp config here.
[a href="https://sites.google.com/site/fooaim/buddy_list.png" target="_blank"]

foo_aim

Reply #14
Hey,
I tried your ELPlaylist config, its all fine, but there is one thing I have to ask: Can I show only the people who are online? I'm sure its with some kind of script, but I can't think of a way how to do it.

Greetings

foo_aim

Reply #15
I don't know if it can be done with a playlist component. It doesn't seem very efficient for them. Filtering out items based on tags wouldn't really be a problem, but I don't see any incentive in storing them after they've been filtered. And therein lies the problem. You have to be able to add the item back once the tag changes state. I can code a "Hide offline buddies" option that would achieve this since I do have to keep track of each playlist item (whether they're online, or offline). I don't keep track of their order, so you'd have to refresh/resort it every time a buddy signs on or off. If you're not using groups, then I guess that wouldn't matter.

Give me like a week or two and I'll have it coded.

foo_aim

Reply #16
The latest version can be downloaded here:
Download foo_aim

Version 0.5 - Changelog (09/20/2011)

General Fixes/Enhancements:
Status sound events will now play only when a status changes (not including the status message).
Reworked playlist lock logic.
Unicode messages are properly truncated based on the limits below.
Added a "Hide offline buddies" option in the Connection preferences.

Protocol Fixes/Enhancements:
Fixed an issue when renaming a group from a second client.
Fixed an issue when cancelling pending uploads.
Increased channel 1 AIM message length to 3987 bytes.
Increased channel 1 ICQ message length to 2547 bytes.
All status message lengths are limited to the location limit. (Currently reported as 4096 bytes.)
Added ICQ Relay Server support - Allows Rendezvous (channel 2) plain text messages of up to 7906 bytes. (Works for AIM as well.)
Status messages are now stored on the AIM/ICQ servers.
ICQ can now view AIM buddy information as well as set AIM-style profile information.
ICQ can now warn buddies.


I'm going to take a break for a while, but don't hesitate to post any bugs or issues you come across. Peace

foo_aim

Reply #17
Hey ecko,
foo_aim has now fully replaced my old messenger (which was QIP before) after I have switched from NGPlaylist to ELPlaylist. At first I used your config, but then I modified it to my liking (being able to use it for normal playback and foo_aim), and yeah, now I really like foo_aim
It's also nice to see how much work you put into this and you really deserve your break right now, hehe
Still I want to post a list of some bugs/feature requests I found:

Bugs:

- Unicode characters (like ä,ö,ü) aren't displayed in HTML history
- I dont know if this is intented or bug: It always asks me for a status message when I simply change my status from offline to online

Feature requests:

- "Blinking" task bar icon when theres an incoming message/file transfer also when you're already IN foobar
- Ability to use %artist% and %title% tags in status messages
- Display buddy status in chat tabs (e.g. "Peter (123456789) - Online")
- %tag% for your own status, to be able to show it in ELPlaylist

Greetings!

PS: By the way, can you still change the topic description? I think if you change it to "AOL/ICQ Instant Messenger client", you would find more attention, because only a few people know that they're using the same protocol.

 

foo_aim

Reply #18
The latest version can be downloaded here:
Download foo_aim

Version 0.6 - Changelog (09/25/2011)

General Fixes/Enhancements:
Fixed a UTF-8 encoding problem with incoming message history.


Thanks for the info Intruder. I could have sworn that I had it working before, but I guess this was just one case that I forgot about. It was an easy enough fix though. Unfortunately, there's no way to recover any of the messages that weren't encoded properly, but everything should work from now on.

As for your second issue, have you tried unchecking "Always prompt for status on connect" in the Connection preferences? That should prevent the window from popping up when you first sign on.

Your feature requests are doable, but I think the blinking icon would be against the foobar2000 SDK license. A popup might be an appropriate alternative. These are all things I'll look into at a later date. For now I'm going to let it age for a bit and fix any little issues that people come across.

I can't change the title sadly, but if a mod comes across this, then they're free to do it. I do appreciate your support though. Thanks a bunch.

foo_aim

Reply #19
The latest version can be downloaded here:
Download foo_aim

Version 0.7 - Changelog (10/20/2011)

General Fixes/Enhancements:
Fixed a crash when hiding offline buddies and no one is offline.
Better handling of tag updates to guard against protocol inconsistencies.
Buddy names are now checked for validity upon tab creation.
Buddy status is now displayed in the message window title.

Protocol Fixes/Enhancements:
Ensured all secondary login SSI modifications are reflected locally.
Better AIM Blast group support (group chat). More info here.

foo_aim

Reply #20
Hello,
Is there still development on this? I'm still using it!
I hope you didn't give up just because there weren't so many people who responded.

Greetings!

foo_aim

Reply #21
The latest version can be downloaded here:
Download foo_aim

Version 0.8 - Changelog (01/20/2012)

General Fixes/Enhancements:
Prevented an issue with long file names and multiple file selections.
Added title formatting capabilities to status and profile messages.


Both the status and profile message windows now have a checkbox that will cause the message to be saved as a title formatting script. When a track is played, or if dynamic info is changed, then the message will be updated. There's a 5 second buffer between updates to prevent protocol rate limiting. Keep in mind that these message windows also support HTML formatting, so look out for tracks that contain HTML reserved characters.