Advertisement
Guest User

Untitled

a guest
Jul 27th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.71 KB | None | 0 0
  1. #include "iTunes.h"
  2.  
  3. /**
  4.     iTunes mod for cube2 sauerbraten
  5.     code written by jonlimle
  6. **/
  7.  
  8.  
  9. IiTunes *iITunes = 0;
  10. IITTrack *iITrack = 0;
  11. char *convertBSTR(BSTR str)
  12. {
  13.     int len = (int) SysStringLen(str);
  14.     char *cvt;
  15.     cvt = (char *) malloc(1+len);
  16.     WideCharToMultiByte( CP_ACP, 0, str, -1, cvt, len, NULL, NULL );
  17.     cvt[len] = '\0';
  18.     return cvt;
  19. }
  20.  
  21. void setupItunes()
  22. {
  23.     CoInitialize(0);
  24.     HRESULT hRes;
  25.     hRes = ::CoCreateInstance(CLSID_iTunesApp, NULL, CLSCTX_LOCAL_SERVER, IID_IiTunes, (PVOID *)&iITunes);
  26. }
  27. void exitItunes()
  28. {
  29.     iITunes->Release();
  30.     iITrack->Release();
  31.     CoUninitialize();
  32. }
  33.  
  34. void ItunesPlayPause()
  35. {
  36.     iITunes->PlayPause();
  37. }
  38.  
  39. COMMAND(ItunesPlayPause, "");
  40.  
  41. void ItunesPrevtrack()
  42. {
  43.     iITunes->PreviousTrack();
  44. }
  45. COMMAND(ItunesPrevtrack, "");
  46.  
  47. void ItunesNexttrack()
  48. {
  49.     iITunes->NextTrack();
  50. }
  51. COMMAND(ItunesNexttrack, "");
  52.  
  53.  
  54. void ItunesSetvolume(int *vol)
  55. {
  56.      long volume = *vol;
  57.     iITunes->put_SoundVolume(volume);
  58. }
  59. COMMAND(ItunesSetvolume, "i");
  60.  
  61. int ItunesGetvolume()
  62. {
  63.     long volume;
  64.     iITunes->get_SoundVolume(&volume);
  65.  
  66.     return (int)volume;
  67. }
  68. ICOMMAND(ItunesGetvolume, "", (), intret(ItunesGetvolume()));
  69.  
  70. int ItunesPlayerposition()
  71. {
  72.     long Position;
  73.     iITunes->get_PlayerPosition(&Position);
  74.     if(Position == NULL)
  75.         return 0;
  76.  
  77.     return (int)Position;
  78. }
  79. ICOMMAND(ItunesGetposition, "", (), intret(ItunesPlayerposition()));
  80.  
  81. void ItunesSetposition(int *vol)
  82. {
  83.     long posistion = *vol;
  84.     iITunes->put_PlayerPosition(posistion);
  85. }
  86.  
  87. COMMAND(ItunesSetposition, "i");
  88.  
  89. int ItunesIspaused()
  90. {
  91.     ITPlayerState iIPlayerState;
  92.     iITunes->get_PlayerState(&iIPlayerState);
  93.  
  94.     switch(iIPlayerState)
  95.     {
  96.         case ITPlayerStatePlaying:
  97.             return 0;
  98.         case ITPlayerStateStopped:
  99.             return 1;
  100.         default:
  101.             return -1;
  102.     }
  103.     return -1;
  104. }
  105. ICOMMAND(ItunesIspaused, "", (), intret(ItunesIspaused()));
  106.  
  107. int ItunesGetTracklength()
  108. {
  109.     iITunes->get_CurrentTrack(&iITrack);
  110.     if(iITrack == NULL)
  111.         return 0;
  112.     long duration;
  113.     iITrack->get_Duration(&duration);
  114.     return (int)duration;
  115. }
  116.  
  117. ICOMMAND(ItunesTracklength, "", (), intret(ItunesGetTracklength()));
  118.  
  119. char *ItunesTrackName()
  120. {
  121.  
  122.     iITunes->get_CurrentTrack(&iITrack);
  123.     if(iITrack == NULL)
  124.         return (char *)"Unknown";
  125.     BSTR Name;
  126.     iITrack->get_Name(&Name);
  127.     char *CurTrack = convertBSTR(Name);
  128.     return CurTrack;
  129. }
  130. ICOMMAND(ItunesTrackName, "", (), result(ItunesTrackName()));
  131.  
  132. char *ItunesArtistName()
  133. {
  134.     iITunes->get_CurrentTrack(&iITrack);
  135.     if(iITrack == NULL)
  136.         return (char *)"Unknown";
  137.     BSTR Name;
  138.     iITrack->get_Artist(&Name);
  139.     char *CurArtist = convertBSTR(Name);
  140.     return CurArtist;
  141. }
  142. ICOMMAND(ItunesArtistName, "", (), result(ItunesArtistName()));
  143.  
  144. char *ItunesAlbumName()
  145. {
  146.     iITunes->get_CurrentTrack(&iITrack);
  147.     if(iITrack == NULL)
  148.         return (char *)"Unknown";
  149.     BSTR Name;
  150.     iITrack->get_Album(&Name);
  151.     char *CurAlbum = convertBSTR(Name);
  152.     return CurAlbum;
  153. }
  154. ICOMMAND(ItunesAlbumName, "", (), result(ItunesAlbumName()));
  155.  
  156. int ItunesBitRate()
  157. {
  158.     iITunes->get_CurrentTrack(&iITrack);
  159.     if(iITrack == NULL)
  160.         return 0;
  161.     long bitrate;
  162.     iITrack->get_BitRate(&bitrate);
  163.     return (int)bitrate;
  164. }
  165. ICOMMAND(ItunesBitRate, "", (), intret(ItunesBitRate()));
  166.  
  167. char *ItunesGenre()
  168. {
  169.     iITunes->get_CurrentTrack(&iITrack);
  170.     if(iITrack == NULL)
  171.         return (char *)"Unknown";
  172.     BSTR Genre;
  173.     iITrack->get_Genre(&Genre);
  174.     char *CurGenre = convertBSTR(Genre);
  175.     return CurGenre;
  176. }
  177. ICOMMAND(ItunesGenre, "", (), result(ItunesGenre()));
  178.  
  179. int CharToBSTR(char *inParam, BSTR *outParam)
  180. {
  181.     ULONG size;
  182.     int
  183.  retVal = -1;
  184.     WCHAR *tmp = NULL;
  185.  
  186.     size = MultiByteToWideChar(CP_OEMCP, 0, inParam, -1, tmp, 0);
  187.     tmp = (WCHAR*)GlobalAlloc(GMEM_ZEROINIT, size * sizeof
  188. (WCHAR));
  189.  
  190.     retVal = MultiByteToWideChar(CP_OEMCP, 0, inParam, -1, tmp, size);
  191.  
  192.     if
  193.  ( 0 != retVal )
  194.     {
  195.         retVal = 1;
  196.         *outParam = SysAllocString(tmp);
  197.     }
  198.  
  199.     GlobalFree(tmp);
  200.  
  201.     return
  202.  retVal;
  203. }
  204.  
  205. void ItunesRestartAlbum()
  206. {
  207.     IITPlaylist *playlist;
  208.     iITunes->get_CurrentPlaylist(&playlist);
  209.     playlist->PlayFirstTrack();
  210. }
  211. COMMAND(ItunesRestartAlbum, "");
  212.  
  213. IITTrackCollection *PopulateTrackList()
  214. {
  215.     IITPlaylist *playlist;
  216.     iITunes->get_CurrentPlaylist(&playlist);
  217.  
  218.     IITTrackCollection *TrackCollection;
  219.     playlist->get_Tracks(&TrackCollection);
  220.     return TrackCollection;
  221. }
  222.  
  223. void ItunesSongByName(char *name)
  224. {
  225.     BSTR SongName = 0;
  226.     CharToBSTR(name, &SongName);
  227.     if(PopulateTrackList()->get_ItemByName(SongName, &iITrack) == S_OK)
  228.     {
  229.         iITrack->Play();
  230.     }
  231.     else conoutf("Failed to find track \"%s\"", name);
  232.  
  233. }
  234. COMMAND(ItunesSongByName, "s");
  235.  
  236. IITPlaylistCollection *GetPlaylistCollection()
  237. {
  238.     IITSource *libsource;
  239.     IITPlaylistCollection *PlayLists;
  240.  
  241.     iITunes->get_LibrarySource(&libsource);
  242.     libsource->get_Playlists(&PlayLists);
  243.     return PlayLists;
  244. }
  245.  
  246. void ItunesListByName(char *name)
  247. {
  248.     BSTR SongName = 0;
  249.     IITPlaylist *playlist;
  250.     CharToBSTR(name, &SongName);
  251.     if(GetPlaylistCollection()->get_ItemByName(SongName, &playlist) == S_OK)
  252.     {
  253.         playlist->PlayFirstTrack();
  254.     }
  255.     else conoutf("Failed to find playlist \"%s\"", name);
  256. }
  257. COMMAND(ItunesListByName, "s");
  258.  
  259. std::vector<char *> SearchList;
  260. void ItunesSearchPlaylist(char *criteria)
  261. {
  262.     SearchList.erase(SearchList.begin(), SearchList.end());
  263.     IITPlaylist *iPlaylist = 0;
  264.     IITTrackCollection  *TrackList = 0;
  265.     iITunes->get_CurrentPlaylist(&iPlaylist);
  266.     if(iPlaylist == NULL)
  267.         return;
  268.     BSTR SearchCriteria = 0;
  269.     CharToBSTR(newstring(criteria), &SearchCriteria);
  270.     iPlaylist->Search(SearchCriteria, ITPlaylistSearchFieldSongNames, &TrackList);
  271.  
  272.  
  273.     long TrackCount = 0;
  274.  
  275.     if(TrackList == NULL)
  276.             return;
  277.     TrackList->get_Count(&TrackCount);
  278.  
  279.     for(int i = 1; i < (int)TrackCount+1; i++)
  280.     {
  281.         IITTrack *iTrack;
  282.         BSTR Name;
  283.         TrackList->get_Item(i, &iTrack);
  284.         iTrack->get_Name(&Name);
  285.         SearchList.push_back(newstring(convertBSTR(Name)));
  286.     }
  287. }
  288.  
  289. ICOMMAND(ItunesSearchPlaylist, "s", (char *search),
  290. {
  291.     ItunesSearchPlaylist(search);
  292. });
  293.  
  294. ICOMMAND(ItunesResultCount, "", (), intret(SearchList.size()));
  295.  
  296. ICOMMAND(ItunesResultByInt, "i", (int *search),
  297. {
  298.     defformatstring(TrackName)("%s", SearchList[*search]);
  299.     result(TrackName);
  300. });
  301.  
  302. ICOMMAND(ItunesPlayByInt, "i", (int *search),
  303. {
  304.     defformatstring(TrackName)("%s", SearchList[*search]);
  305.     ItunesSongByName(TrackName);
  306. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement