Author: stippi Date: 2009-11-19 23:55:43 +0100 (Thu, 19 Nov 2009) New Revision: 34143 Changeset: http://dev.haiku-os.org/changeset/34143/haiku Added: haiku/trunk/data/artwork/icons/File_Playlist Modified: haiku/trunk/src/apps/mediaplayer/MainApp.cpp haiku/trunk/src/apps/mediaplayer/MainApp.h haiku/trunk/src/apps/mediaplayer/MediaPlayer.rdef haiku/trunk/src/apps/mediaplayer/playlist/Playlist.cpp haiku/trunk/src/apps/mediaplayer/playlist/Playlist.h Log: * Created icons for MediaPlayer playlists * Properly register playlist mimetype in MediaPlayer. Double clicking them will now open them in MediaPlayer. Added: haiku/trunk/data/artwork/icons/File_Playlist =================================================================== (Binary files differ) Property changes on: haiku/trunk/data/artwork/icons/File_Playlist ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: haiku/trunk/src/apps/mediaplayer/MainApp.cpp =================================================================== --- haiku/trunk/src/apps/mediaplayer/MainApp.cpp 2009-11-19 22:00:24 UTC (rev 34142) +++ haiku/trunk/src/apps/mediaplayer/MainApp.cpp 2009-11-19 22:55:43 UTC (rev 34143) @@ -28,7 +28,9 @@ #include <FilePanel.h> #include <MediaDefs.h> #include <MediaRoster.h> +#include <MimeType.h> #include <Path.h> +#include <Resources.h> #include <Roster.h> #include <stdio.h> @@ -36,6 +38,7 @@ #include <unistd.h> #include "EventQueue.h" +#include "Playlist.h" #include "Settings.h" #include "SettingsWindow.h" @@ -161,6 +164,8 @@ fSettingsWindow = new SettingsWindow(BRect(150, 150, 450, 520)); fSettingsWindow->Hide(); fSettingsWindow->Show(); + + _InstallPlaylistMimeType(); } @@ -549,7 +554,91 @@ return message->Unflatten(&file); } +void +MainApp::_InstallPlaylistMimeType() +{ + // install mime type of documents + BMimeType mime(kBinaryPlaylistMimeString); + status_t ret = mime.InitCheck(); + if (ret != B_OK) { + fprintf(stderr, "Could not init native document mime type (%s): %s.\n", + kBinaryPlaylistMimeString, strerror(ret)); + return; + } + if (mime.IsInstalled() && !(modifiers() & B_SHIFT_KEY)) { + // mime is already installed, and the user is not + // pressing the shift key to force a re-install + return; + } + + ret = mime.Install(); + if (ret != B_OK && ret != B_FILE_EXISTS) { + fprintf(stderr, "Could not install native document mime type (%s): %s.\n", + kBinaryPlaylistMimeString, strerror(ret)); + return; + } + // set preferred app + ret = mime.SetPreferredApp(kAppSig); + if (ret != B_OK) { + fprintf(stderr, "Could not set native document preferred app: %s\n", + strerror(ret)); + } + + // set descriptions + ret = mime.SetShortDescription("MediaPlayer Playlist"); + if (ret != B_OK) { + fprintf(stderr, "Could not set short description of mime type: %s\n", + strerror(ret)); + } + ret = mime.SetLongDescription("MediaPlayer binary playlist file"); + if (ret != B_OK) { + fprintf(stderr, "Could not set long description of mime type: %s\n", + strerror(ret)); + } + + // set extensions + BMessage message('extn'); + message.AddString("extensions", "playlist"); + ret = mime.SetFileExtensions(&message); + if (ret != B_OK) { + fprintf(stderr, "Could not set extensions of mime type: %s\n", + strerror(ret)); + } + + // set sniffer rule + char snifferRule[32]; + uint32 bigEndianMagic = B_HOST_TO_BENDIAN_INT32(kPlaylistMagicBytes); + sprintf(snifferRule, "0.9 ('%4s')", (const char*)&bigEndianMagic); + ret = mime.SetSnifferRule(snifferRule); + if (ret != B_OK) { + BString parseError; + BMimeType::CheckSnifferRule(snifferRule, &parseError); + fprintf(stderr, "Could not set sniffer rule of mime type: %s\n", + parseError.String()); + } + + // set playlist icon + BResources* resources = AppResources(); + // does not need to be freed (belongs to BApplication base) + if (resources != NULL) { + size_t size; + const void* iconData = resources->LoadResource('VICN', "PlaylistIcon", + &size); + if (iconData != NULL && size > 0) { + if (mime.SetIcon(reinterpret_cast<const uint8*>(iconData), size) + != B_OK) { + fprintf(stderr, "Could not set vector icon of mime type.\n"); + } + } else { + fprintf(stderr, "Could not find icon in app resources " + "(data: %p, size: %ld).\n", iconData, size); + } + } else + fprintf(stderr, "Could not find app resources.\n"); +} + + // #pragma mark - main Modified: haiku/trunk/src/apps/mediaplayer/MainApp.h =================================================================== --- haiku/trunk/src/apps/mediaplayer/MainApp.h 2009-11-19 22:00:24 UTC (rev 34142) +++ haiku/trunk/src/apps/mediaplayer/MainApp.h 2009-11-19 22:55:43 UTC (rev 34143) @@ -98,6 +98,8 @@ status_t _RestoreCurrentPlaylist( BMessage* message) const; + void _InstallPlaylistMimeType(); + private: int32 fPlayerCount; SettingsWindow* fSettingsWindow; Modified: haiku/trunk/src/apps/mediaplayer/MediaPlayer.rdef =================================================================== --- haiku/trunk/src/apps/mediaplayer/MediaPlayer.rdef 2009-11-19 22:00:24 UTC (rev 34142) +++ haiku/trunk/src/apps/mediaplayer/MediaPlayer.rdef 2009-11-19 22:55:43 UTC (rev 34143) @@ -14,6 +14,8 @@ resource app_flags B_SINGLE_LAUNCH; resource file_types message { + "types" = "application/x-vnd.haiku-playlist", + "types" = "application/ogg", "types" = "application/x-ogg", "types" = "application/x-asf", @@ -95,3 +97,24 @@ $"020E0F1815FF01178400040A09020E0F0815FF" }; +resource("PlaylistIcon") #'VICN' array { + $"6E6369660805010401920200060338D2F73CD163BF82B23B84A94B885046E193" + $"00A5C5FFBDEAF2FFFFD5E3FF020106023C71C43DE4E9BCEEA63BAE5F49867748" + $"01ECFFD8E4FA7C7794C9020106023C34913DBF47BD1EE83BAC5E49EA70498C6D" + $"FFD8E2F37C6385C2020106023E49240000000000003CAAAA4940004A3000FED8" + $"E4FA7C7794C9020016023A66BABB23523D88443CB3F9489F5D48C17C0001FF27" + $"020106023A7E6FBB109D3DA2AF3CF54A495C2B486FDC00485C85FFBBCFF70E0A" + $"07485E4A5E4C5F6043573D455D475D0606AE0BB40BBC1D33C07FB72CBE903C47" + $"C13EC408CA28BA52C118B656C51BB876BF07B53E3A230605AE02B40BBF4D33C3" + $"AFB73CC1A43D50C13EC79ECA28BD823AB6BC0605AE02B40BC27D33C6DFB75DC4" + $"A3BDEFC937C13ECB34CA28C0B23AB9EC0606AE0BB40BBF4D33C3AFB75DC173BD" + $"EFC607C13EC804CA28BD82C118B920C51BBB40BF07B8083AB6BC0605AE02B57D" + $"3EB9B9C3EFB7BB44BBB751BD75C936CA8EC1B1402F0A093B593D5BBFCDC93E45" + $"5BC516C5F160465B435D4544510A045A425E3F5A3D5740060AAFBF0E3B4A3848" + $"BF6AC4D6414145443D3E363CBF4DBB374B3C4B3C483D49454643C4FEC2D84F3C" + $"533F4B393B302E3A3D413D413A4208024049543308023B454E3008023541492D" + $"0802303D432A08022A393E25090A010100000A0001031001178400040A040103" + $"000A0001021001178400040A030102000A0001011001178400040A020101000A" + $"0705090A0B0C0D1815FF01178100040A060108202018" +}; + Modified: haiku/trunk/src/apps/mediaplayer/playlist/Playlist.cpp =================================================================== --- haiku/trunk/src/apps/mediaplayer/playlist/Playlist.cpp 2009-11-19 22:00:24 UTC (rev 34142) +++ haiku/trunk/src/apps/mediaplayer/playlist/Playlist.cpp 2009-11-19 22:55:43 UTC (rev 34143) @@ -166,10 +166,9 @@ } -static const uint32 kPlaylistMagicBytes = 'MPPL'; -static const char* kTextPlaylistMimeString = "text/x-playlist"; -static const char* kBinaryPlaylistMimeString - = "application/x-vnd.haiku-playlist"; +const uint32 kPlaylistMagicBytes = 'MPPL'; +const char* kTextPlaylistMimeString = "text/x-playlist"; +const char* kBinaryPlaylistMimeString = "application/x-vnd.haiku-playlist"; status_t Playlist::Unflatten(BDataIO* stream) Modified: haiku/trunk/src/apps/mediaplayer/playlist/Playlist.h =================================================================== --- haiku/trunk/src/apps/mediaplayer/playlist/Playlist.h 2009-11-19 22:00:24 UTC (rev 34142) +++ haiku/trunk/src/apps/mediaplayer/playlist/Playlist.h 2009-11-19 22:55:43 UTC (rev 34143) @@ -33,6 +33,11 @@ struct entry_ref; +extern const uint32 kPlaylistMagicBytes; +extern const char* kTextPlaylistMimeString; +extern const char* kBinaryPlaylistMimeString; + + class Playlist : public BLocker { public: class Listener {