Ticket #7476: mediaplayer_playlist_enhancement.diff
File mediaplayer_playlist_enhancement.diff, 20.9 KB (added by , 13 years ago) |
---|
-
playlist/Playlist.cpp
514 514 if (_IsMediaFile(mimeString)) { 515 515 PlaylistItem* item = new (std::nothrow) FilePlaylistItem(ref); 516 516 if (!ExtraMediaExists(playlist, ref)) { 517 _BindExtraMedia (item);517 _BindExtraMediaAndSubTitles(item); 518 518 if (item != NULL && !playlist->AddItem(item)) 519 519 delete item; 520 520 } else … … 594 594 /*static*/ bool 595 595 Playlist::ExtraMediaExists(Playlist* playlist, const entry_ref& ref) 596 596 { 597 BString exceptExtension = _GetExceptExtension(BPath(&ref).Path());597 BString exceptExtension = FilePlaylistItem::GetExceptExtension(BPath(&ref).Path()); 598 598 599 599 for (int32 i = 0; i < playlist->CountItems(); i++) { 600 600 FilePlaylistItem* compare = dynamic_cast<FilePlaylistItem*>(playlist->ItemAt(i)); 601 601 if (compare == NULL) 602 602 continue; 603 603 if (compare->Ref() != ref 604 && _GetExceptExtension(BPath(&compare->Ref()).Path()) == exceptExtension )604 && FilePlaylistItem::GetExceptExtension(BPath(&compare->Ref()).Path()) == exceptExtension ) 605 605 return true; 606 606 } 607 607 return false; … … 708 708 } 709 709 710 710 711 // _BindExtraMedia() searches additional videos and audios 712 // and addes them as extra medias. 711 // _BindExtraMediaAndSubTitle() searches additional videos, audios, images, and subtitles. 713 712 /*static*/ void 714 Playlist::_BindExtraMedia (PlaylistItem* item)713 Playlist::_BindExtraMediaAndSubTitles(PlaylistItem* item) 715 714 { 716 715 FilePlaylistItem* fileItem = dynamic_cast<FilePlaylistItem*>(item); 717 716 if (!item) 718 717 return; 719 718 720 // If the media file is foo.mp3, _BindExtraMedia() searches foo.avi.721 719 BPath mediaFilePath(&fileItem->Ref()); 722 720 BString mediaFilePathString = mediaFilePath.Path(); 721 BString mediaFilePathStringExceptExtension 722 = FilePlaylistItem::GetExceptExtension(mediaFilePathString); 723 723 BPath dirPath; 724 724 mediaFilePath.GetParent(&dirPath); 725 725 BDirectory dir(dirPath.Path()); … … 728 728 729 729 BEntry entry; 730 730 BString entryPathString; 731 BString entryPathStringExceptExtension; 732 BString entryPathStringExtension; 731 733 while (dir.GetNextEntry(&entry, true) == B_OK) { 732 734 if (!entry.IsFile()) 733 735 continue; 734 736 entryPathString = BPath(&entry).Path(); 735 if (entryPathString != mediaFilePathString 736 && _GetExceptExtension(entryPathString) == _GetExceptExtension(mediaFilePathString)) { 737 _BindExtraMedia(fileItem, entry); 737 entryPathStringExceptExtension = FilePlaylistItem::GetExceptExtension(entryPathString); 738 entryPathStringExtension = FilePlaylistItem::GetExtension(entryPathString); 739 if (entryPathString != mediaFilePathString) { 740 if (entryPathStringExtension == "srt" 741 && entryPathStringExceptExtension.FindFirst(mediaFilePathStringExceptExtension) != B_ERROR) { 742 // Adds foo.langName.srt as subtitle 743 _BindSubTitles(fileItem, entry); 744 } else if (entryPathStringExceptExtension == mediaFilePathStringExceptExtension) { 745 // Add audio/video/image as extra media 746 _BindExtraMedia(fileItem, entry); 747 } 738 748 } 739 749 } 740 750 } … … 754 764 } 755 765 756 766 757 /*static*/ BString758 Playlist::_ GetExceptExtension(const BString& path)767 /*static*/ void 768 Playlist::_BindSubTitles(FilePlaylistItem* fileItem, const BEntry& entry) 759 769 { 760 int32 periodPos = path.FindLast('.');761 if (periodPos <= path.FindLast('/'))762 return path;763 return BString(path.String(), periodPos);770 entry_ref ref; 771 entry.GetRef(&ref); 772 773 fileItem->AddSubTitlesRef(ref); 764 774 } 765 775 766 776 -
playlist/Playlist.h
128 128 static bool _IsPlaylist(const BString& mimeString); 129 129 static bool _IsQuery(const BString& mimeString); 130 130 static BString _MIMEString(const entry_ref* ref); 131 static void _BindExtraMedia (PlaylistItem* item);131 static void _BindExtraMediaAndSubTitles(PlaylistItem* item); 132 132 static void _BindExtraMedia(FilePlaylistItem* fileItem, const BEntry& entry); 133 static BString _GetExceptExtension(const BString& path);133 static void _BindSubTitles(FilePlaylistItem* fileItem, const BEntry& entry); 134 134 135 135 void _NotifyItemAdded(PlaylistItem*, 136 136 int32 index) const; -
playlist/FilePlaylistItem.cpp
20 20 #include "SubTitlesSRT.h" 21 21 22 22 static const char* kPathKey = "path"; 23 static const char* kImagePathKey = "imagePath"; 24 static const char* kSubTitlesPathKey = "subTitlesPath"; 23 25 24 26 FilePlaylistItem::FilePlaylistItem(const entry_ref& ref) 25 27 { … … 28 30 } 29 31 30 32 31 FilePlaylistItem::FilePlaylistItem(const FilePlaylistItem& other)32 :33 fRefs(other.fRefs),34 fNamesInTrash(other.fNamesInTrash),35 fImageRefs(other.fImageRefs),36 fImageNamesInTrash(other.fImageNamesInTrash)37 {38 }39 40 41 33 FilePlaylistItem::FilePlaylistItem(const BMessage* archive) 42 34 { 43 const char* path;44 entry_ref ref;45 35 if (archive != NULL) { 46 int32 i = 0; 47 while (archive->FindString(kPathKey, i, &path) == B_OK) { 48 if (get_ref_for_path(path, &ref) == B_OK) { 49 fRefs.push_back(ref); 50 } 51 i++; 52 } 36 _Unarchive(archive, kPathKey, &fRefs); 37 _Unarchive(archive, kImagePathKey, &fImageRefs); 38 _Unarchive(archive, kSubTitlesPathKey, &fSubTitlesRefs); 53 39 } 54 40 if (fRefs.empty()) { 55 41 fRefs.push_back(entry_ref()); … … 57 43 for (vector<entry_ref>::size_type i = 0; i < fRefs.size(); i++) { 58 44 fNamesInTrash.push_back(""); 59 45 } 46 for (vector<entry_ref>::size_type i = 0; i < fImageRefs.size(); i++) { 47 fImageNamesInTrash.push_back(""); 48 } 49 for (vector<entry_ref>::size_type i = 0; i < fSubTitlesRefs.size(); i++) { 50 fSubTitlesNamesInTrash.push_back(""); 51 } 60 52 } 61 53 62 54 … … 72 64 } 73 65 74 66 67 /*static*/ BString 68 FilePlaylistItem::GetExceptExtension(const BString& path) 69 { 70 int32 periodPos = path.FindLast('.'); 71 if (periodPos <= path.FindLast('/')) 72 return path; 73 return BString(path.String(), periodPos); 74 } 75 76 77 /*static*/ BString 78 FilePlaylistItem::GetExtension(const BString& path) 79 { 80 int32 periodPos = path.FindLast('.'); 81 if (periodPos <= path.FindLast('/')) 82 return BString(); 83 return BString(path.String() + periodPos + 1).ToLower(); 84 } 85 86 75 87 BArchivable* 76 88 FilePlaylistItem::Instantiate(BMessage* archive) 77 89 { … … 91 103 status_t ret = BArchivable::Archive(into, deep); 92 104 if (ret != B_OK) 93 105 return ret; 94 for (vector<entry_ref>::size_type i = 0; i < fRefs.size(); i++) { 95 BPath path(&fRefs[i]); 96 ret = path.InitCheck(); 97 if (ret != B_OK) 98 return ret; 99 ret = into->AddString(kPathKey, path.Path()); 100 if (ret != B_OK) 101 return ret; 102 } 106 107 ret = _Archive(into, deep, kPathKey, fRefs); 108 if (ret != B_OK) 109 return ret; 110 111 ret = _Archive(into, deep, kImagePathKey, fImageRefs); 112 if (ret != B_OK) 113 return ret; 114 115 ret = _Archive(into, deep, kSubTitlesPathKey, fSubTitlesRefs); 116 if (ret != B_OK) 117 return ret; 118 103 119 return B_OK; 104 120 } 105 121 … … 233 249 } 234 250 235 251 status_t err; 236 err = _MoveIntoTrash( &fRefs, &fNamesInTrash);252 err = _MoveIntoTrash(fRefs, &fNamesInTrash); 237 253 if (err != B_OK) 238 254 return err; 239 255 240 if (fImageRefs.empty()) 241 return B_OK; 256 if (!fImageRefs.empty()) { 257 err = _MoveIntoTrash(fImageRefs, &fImageNamesInTrash); 258 if (err != B_OK) 259 return err; 260 } 242 261 243 err = _MoveIntoTrash(&fImageRefs, &fImageNamesInTrash); 244 if (err != B_OK) 245 return err; 262 if (!fSubTitlesRefs.empty()) { 263 err = _MoveIntoTrash(fSubTitlesRefs, &fSubTitlesNamesInTrash); 264 if (err != B_OK) 265 return err; 266 } 246 267 247 268 return B_OK; 248 269 } … … 257 278 } 258 279 259 280 status_t err; 260 err = _RestoreFromTrash( &fRefs, &fNamesInTrash);281 err = _RestoreFromTrash(fRefs, &fNamesInTrash); 261 282 if (err != B_OK) 262 283 return err; 263 284 264 if (fImageRefs.empty()) 265 return B_OK; 285 if (!fImageRefs.empty()) { 286 err = _RestoreFromTrash(fImageRefs, &fImageNamesInTrash); 287 if (err != B_OK) 288 return err; 289 } 266 290 267 err = _RestoreFromTrash(&fImageRefs, &fImageNamesInTrash); 268 if (err != B_OK) 269 return err; 291 if (!fSubTitlesRefs.empty()) { 292 err = _RestoreFromTrash(fSubTitlesRefs, &fSubTitlesNamesInTrash); 293 if (err != B_OK) 294 return err; 295 } 270 296 271 297 return B_OK; 272 298 } … … 282 308 if (supplier == NULL) 283 309 return NULL; 284 310 311 // Audio/Video 285 312 for (vector<entry_ref>::size_type i = 0; i < fRefs.size(); i++) { 286 313 BMediaFile* mediaFile = new(std::nothrow) BMediaFile(&fRefs[i]); 287 if (mediaFile == NULL) { 288 delete supplier; 289 return NULL; 290 } 314 if (mediaFile == NULL) 315 continue; 291 316 if (supplier->AddMediaFile(mediaFile) != B_OK) 292 317 delete mediaFile; 293 318 } 319 if (supplier->CountAudioTracks() + supplier->CountVideoTracks() == 0) { 320 delete supplier; 321 return NULL; 322 } 294 323 324 // Artwork 295 325 for (vector<entry_ref>::size_type i = 0; i < fImageRefs.size(); i++) { 296 326 BBitmap* bitmap = BTranslationUtils::GetBitmap(&fImageRefs[i]); 297 327 if (bitmap == NULL) … … 300 330 delete bitmap; 301 331 } 302 332 303 // Search for subtitle files in the same folder 304 // TODO: Error checking 305 BEntry entry(&fRefs[0], true); 333 // Subtitle 334 for (vector<entry_ref>::size_type i = 0; i < fSubTitlesRefs.size(); i++) { 335 BString language = GetExtension(GetExceptExtension(BPath(&fSubTitlesRefs[i]).Path())); 336 if (language.Length() == 0) { 337 language = "default"; 338 } 306 339 307 char originalName[B_FILE_NAME_LENGTH]; 308 entry.GetName(originalName); 309 BString nameWithoutExtension(originalName); 310 int32 extension = nameWithoutExtension.FindLast('.'); 311 if (extension > 0) 312 nameWithoutExtension.Truncate(extension); 313 314 BPath path; 315 entry.GetPath(&path); 316 path.GetParent(&path); 317 BDirectory directory(path.Path()); 318 while (directory.GetNextEntry(&entry) == B_OK) { 319 char name[B_FILE_NAME_LENGTH]; 320 if (entry.GetName(name) != B_OK) 340 SubTitles* subTitles 341 = new(std::nothrow) SubTitlesSRT(&fSubTitlesRefs[i], language.String()); 342 if (subTitles == NULL) 321 343 continue; 322 BString nameString(name); 323 if (nameString == originalName) 324 continue; 325 if (nameString.IFindFirst(nameWithoutExtension) < 0) 326 continue; 327 328 BFile file(&entry, B_READ_ONLY); 329 if (file.InitCheck() != B_OK) 330 continue; 331 332 int32 pos = nameString.FindLast('.'); 333 if (pos < 0) 334 continue; 335 336 BString extensionString(nameString.String() + pos + 1); 337 extensionString.ToLower(); 338 339 BString language = "default"; 340 if (pos > 1) { 341 int32 end = pos; 342 while (pos > 0 && *(nameString.String() + pos - 1) != '.') 343 pos--; 344 language.SetTo(nameString.String() + pos, end - pos); 345 } 346 347 if (extensionString == "srt") { 348 SubTitles* subTitles 349 = new(std::nothrow) SubTitlesSRT(&file, language.String()); 350 if (subTitles != NULL && !supplier->AddSubTitles(subTitles)) 351 delete subTitles; 352 } 344 if (supplier->AddSubTitles(subTitles) != B_OK) 345 delete subTitles; 353 346 } 354 347 355 348 return supplier; … … 365 358 } 366 359 367 360 361 const entry_ref& 362 FilePlaylistItem::Ref(int32 index) const 363 { 364 static entry_ref ref; 365 366 if (index >= static_cast<int32>(fRefs.size())) 367 return ref; 368 369 return fRefs[index]; 370 } 371 372 368 373 status_t 369 374 FilePlaylistItem::AddImageRef(const entry_ref& ref) 370 375 { … … 375 380 376 381 377 382 const entry_ref& 378 FilePlaylistItem::ImageRef( ) const383 FilePlaylistItem::ImageRef(int32 index) const 379 384 { 380 385 static entry_ref ref; 381 386 382 if ( fImageRefs.empty())387 if (index >= static_cast<int32>(fImageRefs.size())) 383 388 return ref; 384 389 385 return fImageRefs[ 0];390 return fImageRefs[index]; 386 391 } 387 392 388 393 389 394 status_t 395 FilePlaylistItem::AddSubTitlesRef(const entry_ref& ref) 396 { 397 fSubTitlesRefs.push_back(ref); 398 fSubTitlesNamesInTrash.push_back(""); 399 return B_OK; 400 } 401 402 403 const entry_ref& 404 FilePlaylistItem::SubTitlesRef(int32 index) const 405 { 406 static entry_ref ref; 407 408 if (index >= static_cast<int32>(fSubTitlesRefs.size())) 409 return ref; 410 411 return fSubTitlesRefs[index]; 412 } 413 414 415 status_t 416 FilePlaylistItem::_Archive(BMessage* into, bool deep, 417 const char* pathKey, 418 const vector<entry_ref>& refs) const 419 { 420 for (vector<entry_ref>::size_type i = 0; i < refs.size(); i++) { 421 BPath path(&refs[i]); 422 status_t ret = path.InitCheck(); 423 if (ret != B_OK) 424 return ret; 425 ret = into->AddString(pathKey, path.Path()); 426 if (ret != B_OK) 427 return ret; 428 } 429 return B_OK; 430 } 431 432 433 status_t 434 FilePlaylistItem::_Unarchive(const BMessage* archive, 435 const char* pathKey, 436 vector<entry_ref>* refs) const 437 { 438 const char* path; 439 int32 i = 0; 440 while (archive->FindString(pathKey, i, &path) == B_OK) { 441 entry_ref ref; 442 if (get_ref_for_path(path, &ref) == B_OK) { 443 refs->push_back(ref); 444 } 445 i++; 446 } 447 return B_OK; 448 } 449 450 451 status_t 390 452 FilePlaylistItem::_SetAttribute(const char* attrName, type_code type, 391 const void* data, size_t size) 453 const void* data, size_t size) const 392 454 { 393 455 BEntry entry(&fRefs[0], true); 394 456 BNode node(&entry); … … 407 469 408 470 status_t 409 471 FilePlaylistItem::_GetAttribute(const char* attrName, type_code type, 410 void* data, size_t size) 472 void* data, size_t size) const 411 473 { 412 474 BEntry entry(&fRefs[0], true); 413 475 BNode node(&entry); … … 425 487 426 488 427 489 status_t 428 FilePlaylistItem::_MoveIntoTrash( vector<entry_ref>*refs,429 vector<BString>* namesInTrash) 490 FilePlaylistItem::_MoveIntoTrash(const vector<entry_ref>& refs, 491 vector<BString>* namesInTrash) const 430 492 { 431 493 char trashPath[B_PATH_NAME_LENGTH]; 432 status_t err = find_directory(B_TRASH_DIRECTORY, (*refs)[0].device,494 status_t err = find_directory(B_TRASH_DIRECTORY, refs[0].device, 433 495 true /*create it*/, trashPath, B_PATH_NAME_LENGTH); 434 496 if (err != B_OK) { 435 497 fprintf(stderr, "failed to find Trash: %s\n", strerror(err)); … … 443 505 return err; 444 506 } 445 507 446 for (vector<entry_ref>::size_type i = 0; i < refs ->size(); i++) {447 BEntry entry(& (*refs)[i]);508 for (vector<entry_ref>::size_type i = 0; i < refs.size(); i++) { 509 BEntry entry(&refs[i]); 448 510 err = entry.InitCheck(); 449 511 if (err != B_OK) { 450 512 fprintf(stderr, "failed to init BEntry for %s: %s\n", 451 (*refs)[i].name, strerror(err));513 refs[i].name, strerror(err)); 452 514 return err; 453 515 } 454 516 455 517 // Find a unique name for the entry in the trash 456 (*namesInTrash)[i] = (*refs)[i].name;518 (*namesInTrash)[i] = refs[i].name; 457 519 int32 uniqueNameIndex = 1; 458 520 while (true) { 459 521 BEntry test(&trashDir, (*namesInTrash)[i].String()); 460 522 if (!test.Exists()) 461 523 break; 462 (*namesInTrash)[i] = (*refs)[i].name;524 (*namesInTrash)[i] = refs[i].name; 463 525 (*namesInTrash)[i] << ' ' << uniqueNameIndex; 464 526 uniqueNameIndex++; 465 527 } … … 487 549 488 550 489 551 status_t 490 FilePlaylistItem::_RestoreFromTrash( vector<entry_ref>*refs,491 vector<BString>* namesInTrash) 552 FilePlaylistItem::_RestoreFromTrash(const vector<entry_ref>& refs, 553 vector<BString>* namesInTrash) const 492 554 { 493 555 char trashPath[B_PATH_NAME_LENGTH]; 494 status_t err = find_directory(B_TRASH_DIRECTORY, (*refs)[0].device,556 status_t err = find_directory(B_TRASH_DIRECTORY, refs[0].device, 495 557 false /*create it*/, trashPath, B_PATH_NAME_LENGTH); 496 558 if (err != B_OK) { 497 559 fprintf(stderr, "failed to find Trash: %s\n", strerror(err)); 498 560 return err; 499 561 } 500 562 501 for (vector<entry_ref>::size_type i = 0; i < refs ->size(); i++) {563 for (vector<entry_ref>::size_type i = 0; i < refs.size(); i++) { 502 564 // construct the entry to the file in the trash 503 565 // TODO: BEntry(const BDirectory* directory, const char* path) is broken! 504 566 // BEntry entry(trashPath, (*namesInTrash)[i].String()); … … 515 577 516 578 // construct the folder of the original entry_ref 517 579 node_ref nodeRef; 518 nodeRef.device = (*refs)[i].device;519 nodeRef.node = (*refs)[i].directory;580 nodeRef.device = refs[i].device; 581 nodeRef.node = refs[i].directory; 520 582 BDirectory originalDir(&nodeRef); 521 583 err = originalDir.InitCheck(); 522 584 if (err != B_OK) { 523 585 fprintf(stderr, "failed to init original BDirectory for " 524 "%s: %s\n", (*refs)[i].name, strerror(err));586 "%s: %s\n", refs[i].name, strerror(err)); 525 587 return err; 526 588 } 527 589 … … 533 595 (*namesInTrash)[i] = ""; 534 596 535 597 // Finally, move the entry back into the original folder 536 err = entry.MoveTo(&originalDir, (*refs)[i].name);598 err = entry.MoveTo(&originalDir, refs[i].name); 537 599 if (err != B_OK) { 538 600 fprintf(stderr, "failed to restore entry from trash " 539 "%s: %s\n", (*refs)[i].name, strerror(err));601 "%s: %s\n", refs[i].name, strerror(err)); 540 602 return err; 541 603 } 542 604 -
playlist/FilePlaylistItem.h
17 17 class FilePlaylistItem : public PlaylistItem { 18 18 public: 19 19 FilePlaylistItem(const entry_ref& ref); 20 FilePlaylistItem(const FilePlaylistItem& item);21 20 FilePlaylistItem(const BMessage* archive); 22 21 virtual ~FilePlaylistItem(); 23 22 24 23 virtual PlaylistItem* Clone() const; 25 24 25 // filename utility 26 static BString GetExceptExtension(const BString& path); 27 static BString GetExtension(const BString& path); 28 26 29 // archiving 27 30 static BArchivable* Instantiate(BMessage* archive); 28 31 virtual status_t Archive(BMessage* into, … … 56 59 virtual TrackSupplier* CreateTrackSupplier() const; 57 60 58 61 status_t AddRef(const entry_ref& ref); 59 const entry_ref& Ref( ) const { return fRefs[0]; }62 const entry_ref& Ref(int32 index = 0) const; 60 63 61 64 status_t AddImageRef(const entry_ref& ref); 62 const entry_ref& ImageRef( ) const;65 const entry_ref& ImageRef(int32 index = 0) const; 63 66 67 status_t AddSubTitlesRef(const entry_ref& ref); 68 const entry_ref& SubTitlesRef(int32 index = 0) const; 69 64 70 private: 71 virtual status_t _Archive(BMessage* into, bool deep, 72 const char* pathKey, 73 const vector<entry_ref>& refs) const; 74 status_t _Unarchive(const BMessage* archive, 75 const char* pathKey, 76 vector<entry_ref>* refs) const; 65 77 status_t _SetAttribute(const char* attrName, 66 78 type_code type, const void* data, 67 size_t size) ;79 size_t size) const; 68 80 status_t _GetAttribute(const char* attrName, 69 81 type_code type, void* data, 70 size_t size) ;71 status_t _MoveIntoTrash( vector<entry_ref>*refs,72 vector<BString>* namesInTrash) ;73 status_t _RestoreFromTrash( vector<entry_ref>*refs,74 vector<BString>* namesInTrash) ;82 size_t size) const; 83 status_t _MoveIntoTrash(const vector<entry_ref>& refs, 84 vector<BString>* namesInTrash) const; 85 status_t _RestoreFromTrash(const vector<entry_ref>& refs, 86 vector<BString>* namesInTrash) const; 75 87 76 88 private: 77 // always fRefs.size() == fNamesInTrash.size()89 // Audio/Video refs: always fRefs.size() == fNamesInTrash.size() 78 90 vector<entry_ref> fRefs; 79 91 vector<BString> fNamesInTrash; 80 // always fImageRefs.size() == fImageNamesInTrash.size()92 // Artwork refs: always fImageRefs.size() == fImageNamesInTrash.size() 81 93 vector<entry_ref> fImageRefs; 82 94 vector<BString> fImageNamesInTrash; 95 // Subtitles refs: always fSubTitlesRefs.size() == fSubTitlesNamesInTrash.size() 96 vector<entry_ref> fSubTitlesRefs; 97 vector<BString> fSubTitlesNamesInTrash; 83 98 }; 84 99 85 100 #endif // FILE_PLAYLIST_ITEM_H -
supplier/SubTitlesSRT.cpp
15 15 #include "FileReadWrite.h" 16 16 17 17 18 SubTitlesSRT::SubTitlesSRT( BFile* file, const char* name)18 SubTitlesSRT::SubTitlesSRT(const entry_ref* ref, const char* name) 19 19 : 20 20 SubTitles(), 21 21 fName(name), 22 22 fSubTitles(64) 23 23 { 24 if ( file== NULL)24 if (ref == NULL) 25 25 return; 26 if (file->InitCheck() != B_OK) 26 27 BFile file(ref, B_READ_ONLY); 28 if (file.InitCheck() != B_OK) 27 29 return; 28 30 29 FileReadWrite lineProvider( file);31 FileReadWrite lineProvider(&file); 30 32 BString line; 31 33 enum { 32 34 EXPECT_SEQUENCE_NUMBER = 0, -
supplier/SubTitlesSRT.h
6 6 #define SUB_TITLES_SRT_H 7 7 8 8 9 #include <Entry.h> 9 10 #include <List.h> 10 11 11 12 #include "SubTitles.h" … … 16 17 17 18 class SubTitlesSRT : public SubTitles { 18 19 public: 19 SubTitlesSRT( BFile* file, const char* name);20 SubTitlesSRT(const entry_ref* ref, const char* name); 20 21 virtual ~SubTitlesSRT(); 21 22 22 23 virtual const char* Name() const; -
supplier/MediaFileTrackSupplier.cpp
176 176 } 177 177 178 178 179 bool 179 status_t 180 180 MediaFileTrackSupplier::AddSubTitles(SubTitles* subTitles) 181 181 { 182 return fSubTitleTracks.AddItem(subTitles) ;182 return fSubTitleTracks.AddItem(subTitles) ? B_OK : B_ERROR; 183 183 } 184 184 185 185 -
supplier/MediaFileTrackSupplier.h
42 42 virtual VideoTrackSupplier* CreateVideoTrackForIndex(int32 index); 43 43 virtual const SubTitles* SubTitleTrackForIndex(int32 index); 44 44 45 boolAddSubTitles(SubTitles* subTitles);45 status_t AddSubTitles(SubTitles* subTitles); 46 46 47 47 status_t AddMediaFile(BMediaFile* mediaFile); 48 48