> Hi Fredrik, > >> > The mime type of a file should provide that information. >> thanks.. >> this was the way I found it to work.. any suggestions on how to make it >> smaller/ not that memory intense? I will move the code to it's own bool >> VerifyFileType(entry_ref *ref, char *type) function. How do I make char >> *type that can be more than 1 parameter? I want to send both "audio", >> "video" and perhaps other super types? But this works nicely :) >> >> refsReceivedMessage are a BMessage and can have one file or allot of >> files. Are hosted in src/apps/mediaplayer/playlist/Playlist.cpp around >> line 278 >> >> entry_ref ref; >> BFile *file; >> BNodeInfo *nodeinfo; >> BMimeType* mimetype, temp; >> char str[10]; >> for (int i = 0; refsReceivedMessage->FindRef("refs", i, &ref) == B_OK; >> i++){ >> file = new BFile(&ref, B_READ_ONLY); >> nodeinfo = new BNodeInfo(file); >> if(nodeinfo->GetType(str) == B_OK){ >> mimetype = new BMimeType(str); >> if(mimetype->GetSupertype(&temp) == B_OK){ >> if(temp == "audio" || temp == "video") >> AppendToPlaylistRecursive(ref, playlist); >> } >> } >> } > > I hope you don't mind if I point out some problems in this code. The > biggest np that's whay I wrote this mail :) > problem is that you are leaking files, node infos and mime types, since > you > create them with "new" but never delete them. Much easier to create them I know this are just to test what way to turn and what works where. > on > the stack. The string you provide to the GetType() function is too small, > which will cause memory to be overwritten on the stack. Also, declaring Noticed this the hard way :) > all > the variables in the beginning of a funcion is C style, but we are writing > C++ and you should declare the variables where you need them. And it is > better to chose names that reflect what the variables are for. Here is how > I > would adapt the code: > > entry_ref ref; > for (int i = 0; refsReceivedMessage->FindRef("refs", i, &ref) == B_OK; > i++) { > BFile file(&ref, B_READ_ONLY); > BNodeInfo nodeInfo(&file); > char mimeString[B_MIME_TYPE_LENGTH]; > if (nodeInfo->GetType(mimeString) == B_OK) { > BMimeType fileType(mimeString); > BMimeType superType; > if (fileType->GetSupertype(&superType) == B_OK) { > if (superType == "audio" || superType == "video") > AppendToPlaylistRecursive(ref, playlist); > } > } > } > > I am wondering where exactly you place this code, since you call > AppendToPlaylistRecursive() in the end. Directly after receiving the refs > message? It looks to me like recursive adding of folders wouldn't work > anymore then. It could be better to have some kind of "filter" function, > which is called directly before appending a file to the playlist. This > function would just tell the appending function if a file should be > appended > or rejected. But it could work exactly like above, only in different > context. In the end this are my goal, i would have dune this in my other patch if I have thought the same way I do when I'm programming C#, (you know your function about tagging the menu items) but right now I'm learning how to best solve this so your comments are needed :) > > Best regards, > -Stephan > > > > -- MVH Fredrik Modéen