[haiku-commits] r34143 - in haiku/trunk: data/artwork/icons src/apps/mediaplayer src/apps/mediaplayer/playlist

  • From: superstippi@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 19 Nov 2009 23:55:44 +0100 (CET)

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 {


Other related posts:

  • » [haiku-commits] r34143 - in haiku/trunk: data/artwork/icons src/apps/mediaplayer src/apps/mediaplayer/playlist - superstippi