Cog/Playlist/PlaylistLoader.h
Christopher Snowhill 802a86a3d8 [Playlist Loading] Process messages while loading
Process main queue messages by handling the loading in a background
queue, and sync it to the main thread periodically, while pausing to
wait for the results. This allows the file open dialog to return
immediately, and display loading progress on the status bar.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-06-28 20:28:10 -07:00

77 lines
1.9 KiB
Objective-C

//
// PlaylistLoader.h
// Cog
//
// Created by Vincent Spader on 3/05/07.
// Copyright 2007 Vincent Spader All rights reserved.
//
#import "PlaylistController.h"
#import "PlaylistView.h"
#import <Cocoa/Cocoa.h>
#import <stdatomic.h>
@class PlaylistController;
@class PlaybackController;
@class PlaylistEntry;
typedef enum {
kPlaylistM3u,
kPlaylistPls,
kPlaylistXml,
} PlaylistType;
@interface PlaylistLoader : NSObject {
IBOutlet PlaylistController *playlistController;
IBOutlet NSScrollView *playlistView;
IBOutlet PlaybackController *playbackController;
NSOperationQueue *queue;
BOOL metadataLoadInProgress;
NSMutableDictionary *queuedURLs;
dispatch_queue_t loaderQueue;
atomic_int loaderQueueRefCount;
}
- (void)initDefaults;
// Clear playlist
- (void)clear:(id)sender;
// Load arrays of urls...
- (NSArray *)addURLs:(NSArray *)urls sort:(BOOL)sort;
- (NSArray *)addURL:(NSURL *)url;
- (NSArray *)insertURLs:(NSArray *)urls atIndex:(NSInteger)index sort:(BOOL)sort;
- (NSArray *)addDatabase;
- (BOOL)addDataStore;
// Save playlist, auto-determines type based on extension. Uses m3u if it cannot be determined.
- (BOOL)save:(NSString *)filename;
- (BOOL)save:(NSString *)filename asType:(PlaylistType)type;
- (BOOL)saveM3u:(NSString *)filename;
- (BOOL)savePls:(NSString *)filename;
- (BOOL)saveXml:(NSString *)filename;
// Read info for a playlist entry
//- (NSDictionary *)readEntryInfo:(PlaylistEntry *)pe;
- (void)loadInfoForEntries:(NSArray *)entries;
// To be dispatched on main thread only
- (void)syncLoadInfoForEntries:(NSArray *)entries;
- (NSArray *)acceptableFileTypes;
- (NSArray *)acceptablePlaylistTypes; // Only m3u and pls saving
- (NSArray *)acceptableContainerTypes;
// Events (passed to playlist controler):
- (void)willInsertURLs:(NSArray *)urls origin:(URLOrigin)origin;
- (void)didInsertURLs:(NSArray *)entries origin:(URLOrigin)origin;
@end