Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "iTunes.h"
- /**
- iTunes mod for cube2 sauerbraten
- code written by jonlimle
- **/
- IiTunes *iITunes = 0;
- IITTrack *iITrack = 0;
- char *convertBSTR(BSTR str)
- {
- int len = (int) SysStringLen(str);
- char *cvt;
- cvt = (char *) malloc(1+len);
- WideCharToMultiByte( CP_ACP, 0, str, -1, cvt, len, NULL, NULL );
- cvt[len] = '\0';
- return cvt;
- }
- void setupItunes()
- {
- CoInitialize(0);
- HRESULT hRes;
- hRes = ::CoCreateInstance(CLSID_iTunesApp, NULL, CLSCTX_LOCAL_SERVER, IID_IiTunes, (PVOID *)&iITunes);
- }
- void exitItunes()
- {
- iITunes->Release();
- iITrack->Release();
- CoUninitialize();
- }
- void ItunesPlayPause()
- {
- iITunes->PlayPause();
- }
- COMMAND(ItunesPlayPause, "");
- void ItunesPrevtrack()
- {
- iITunes->PreviousTrack();
- }
- COMMAND(ItunesPrevtrack, "");
- void ItunesNexttrack()
- {
- iITunes->NextTrack();
- }
- COMMAND(ItunesNexttrack, "");
- void ItunesSetvolume(int *vol)
- {
- long volume = *vol;
- iITunes->put_SoundVolume(volume);
- }
- COMMAND(ItunesSetvolume, "i");
- int ItunesGetvolume()
- {
- long volume;
- iITunes->get_SoundVolume(&volume);
- return (int)volume;
- }
- ICOMMAND(ItunesGetvolume, "", (), intret(ItunesGetvolume()));
- int ItunesPlayerposition()
- {
- long Position;
- iITunes->get_PlayerPosition(&Position);
- if(Position == NULL)
- return 0;
- return (int)Position;
- }
- ICOMMAND(ItunesGetposition, "", (), intret(ItunesPlayerposition()));
- void ItunesSetposition(int *vol)
- {
- long posistion = *vol;
- iITunes->put_PlayerPosition(posistion);
- }
- COMMAND(ItunesSetposition, "i");
- int ItunesIspaused()
- {
- ITPlayerState iIPlayerState;
- iITunes->get_PlayerState(&iIPlayerState);
- switch(iIPlayerState)
- {
- case ITPlayerStatePlaying:
- return 0;
- case ITPlayerStateStopped:
- return 1;
- default:
- return -1;
- }
- return -1;
- }
- ICOMMAND(ItunesIspaused, "", (), intret(ItunesIspaused()));
- int ItunesGetTracklength()
- {
- iITunes->get_CurrentTrack(&iITrack);
- if(iITrack == NULL)
- return 0;
- long duration;
- iITrack->get_Duration(&duration);
- return (int)duration;
- }
- ICOMMAND(ItunesTracklength, "", (), intret(ItunesGetTracklength()));
- char *ItunesTrackName()
- {
- iITunes->get_CurrentTrack(&iITrack);
- if(iITrack == NULL)
- return (char *)"Unknown";
- BSTR Name;
- iITrack->get_Name(&Name);
- char *CurTrack = convertBSTR(Name);
- return CurTrack;
- }
- ICOMMAND(ItunesTrackName, "", (), result(ItunesTrackName()));
- char *ItunesArtistName()
- {
- iITunes->get_CurrentTrack(&iITrack);
- if(iITrack == NULL)
- return (char *)"Unknown";
- BSTR Name;
- iITrack->get_Artist(&Name);
- char *CurArtist = convertBSTR(Name);
- return CurArtist;
- }
- ICOMMAND(ItunesArtistName, "", (), result(ItunesArtistName()));
- char *ItunesAlbumName()
- {
- iITunes->get_CurrentTrack(&iITrack);
- if(iITrack == NULL)
- return (char *)"Unknown";
- BSTR Name;
- iITrack->get_Album(&Name);
- char *CurAlbum = convertBSTR(Name);
- return CurAlbum;
- }
- ICOMMAND(ItunesAlbumName, "", (), result(ItunesAlbumName()));
- int ItunesBitRate()
- {
- iITunes->get_CurrentTrack(&iITrack);
- if(iITrack == NULL)
- return 0;
- long bitrate;
- iITrack->get_BitRate(&bitrate);
- return (int)bitrate;
- }
- ICOMMAND(ItunesBitRate, "", (), intret(ItunesBitRate()));
- char *ItunesGenre()
- {
- iITunes->get_CurrentTrack(&iITrack);
- if(iITrack == NULL)
- return (char *)"Unknown";
- BSTR Genre;
- iITrack->get_Genre(&Genre);
- char *CurGenre = convertBSTR(Genre);
- return CurGenre;
- }
- ICOMMAND(ItunesGenre, "", (), result(ItunesGenre()));
- int CharToBSTR(char *inParam, BSTR *outParam)
- {
- ULONG size;
- int
- retVal = -1;
- WCHAR *tmp = NULL;
- size = MultiByteToWideChar(CP_OEMCP, 0, inParam, -1, tmp, 0);
- tmp = (WCHAR*)GlobalAlloc(GMEM_ZEROINIT, size * sizeof
- (WCHAR));
- retVal = MultiByteToWideChar(CP_OEMCP, 0, inParam, -1, tmp, size);
- if
- ( 0 != retVal )
- {
- retVal = 1;
- *outParam = SysAllocString(tmp);
- }
- GlobalFree(tmp);
- return
- retVal;
- }
- void ItunesRestartAlbum()
- {
- IITPlaylist *playlist;
- iITunes->get_CurrentPlaylist(&playlist);
- playlist->PlayFirstTrack();
- }
- COMMAND(ItunesRestartAlbum, "");
- IITTrackCollection *PopulateTrackList()
- {
- IITPlaylist *playlist;
- iITunes->get_CurrentPlaylist(&playlist);
- IITTrackCollection *TrackCollection;
- playlist->get_Tracks(&TrackCollection);
- return TrackCollection;
- }
- void ItunesSongByName(char *name)
- {
- BSTR SongName = 0;
- CharToBSTR(name, &SongName);
- if(PopulateTrackList()->get_ItemByName(SongName, &iITrack) == S_OK)
- {
- iITrack->Play();
- }
- else conoutf("Failed to find track \"%s\"", name);
- }
- COMMAND(ItunesSongByName, "s");
- IITPlaylistCollection *GetPlaylistCollection()
- {
- IITSource *libsource;
- IITPlaylistCollection *PlayLists;
- iITunes->get_LibrarySource(&libsource);
- libsource->get_Playlists(&PlayLists);
- return PlayLists;
- }
- void ItunesListByName(char *name)
- {
- BSTR SongName = 0;
- IITPlaylist *playlist;
- CharToBSTR(name, &SongName);
- if(GetPlaylistCollection()->get_ItemByName(SongName, &playlist) == S_OK)
- {
- playlist->PlayFirstTrack();
- }
- else conoutf("Failed to find playlist \"%s\"", name);
- }
- COMMAND(ItunesListByName, "s");
- std::vector<char *> SearchList;
- void ItunesSearchPlaylist(char *criteria)
- {
- SearchList.erase(SearchList.begin(), SearchList.end());
- IITPlaylist *iPlaylist = 0;
- IITTrackCollection *TrackList = 0;
- iITunes->get_CurrentPlaylist(&iPlaylist);
- if(iPlaylist == NULL)
- return;
- BSTR SearchCriteria = 0;
- CharToBSTR(newstring(criteria), &SearchCriteria);
- iPlaylist->Search(SearchCriteria, ITPlaylistSearchFieldSongNames, &TrackList);
- long TrackCount = 0;
- if(TrackList == NULL)
- return;
- TrackList->get_Count(&TrackCount);
- for(int i = 1; i < (int)TrackCount+1; i++)
- {
- IITTrack *iTrack;
- BSTR Name;
- TrackList->get_Item(i, &iTrack);
- iTrack->get_Name(&Name);
- SearchList.push_back(newstring(convertBSTR(Name)));
- }
- }
- ICOMMAND(ItunesSearchPlaylist, "s", (char *search),
- {
- ItunesSearchPlaylist(search);
- });
- ICOMMAND(ItunesResultCount, "", (), intret(SearchList.size()));
- ICOMMAND(ItunesResultByInt, "i", (int *search),
- {
- defformatstring(TrackName)("%s", SearchList[*search]);
- result(TrackName);
- });
- ICOMMAND(ItunesPlayByInt, "i", (int *search),
- {
- defformatstring(TrackName)("%s", SearchList[*search]);
- ItunesSongByName(TrackName);
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement