/* HBQueueDetailsViewController.m $
This file is part of the HandBrake source code.
Homepage: .
It may be used under the terms of the GNU General Public License. */
#import "HBQueueInfoViewController.h"
#import "HBQueue.h"
@interface HBQueueInfoViewController ()
@property (nonatomic, weak) IBOutlet NSView *statisticsHeader;
@property (nonatomic, weak) IBOutlet NSTextField *statisticsLabel;
@property (nonatomic, weak) IBOutlet NSTextField *summaryLabel;
@property (nonatomic, weak) IBOutlet NSScrollView *scrollView;
@property (nonatomic, weak) id delegate;
@property (nonatomic) BOOL canReset;
@end
@implementation HBQueueInfoViewController
- (instancetype)initWithDelegate:(id)delegate
{
self = [super init];
if (self)
{
_delegate = delegate;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self updateLabels];
[self setUpObservers];
}
- (void)setUpObservers
{
// It would be easier to just KVO the item state property,
// But we can't because the item is a NSProxy.
NSNotificationCenter * __weak center = NSNotificationCenter.defaultCenter;
[center addObserverForName:HBQueueDidStartItemNotification
object:nil
queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification * _Nonnull note)
{
HBQueueItem *startedItem = note.userInfo[HBQueueItemNotificationItemKey];
if (startedItem == self.item)
{
[self updateLabels];
[self updateReset];
}
}];
[center addObserverForName:HBQueueDidCompleteItemNotification
object:nil
queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification * _Nonnull note)
{
HBQueueItem *completedItem = note.userInfo[HBQueueItemNotificationItemKey];
if (completedItem == self.item)
{
[self updateLabels];
[self updateReset];
}
}];
[center addObserverForName:HBQueueDidChangeItemNotification
object:nil
queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification * _Nonnull note)
{
[self updateLabels];
[self updateReset];
}];
}
- (void)updateReset
{
self.canReset = self.item && (self.item.state != HBQueueItemStateWorking && self.item.state != HBQueueItemStateReady);
}
- (void)updateLabels
{
if (self.item)
{
self.statisticsLabel.hidden = self.item.startedDate == nil;
self.statisticsHeader.hidden = self.item.startedDate == nil;
self.summaryLabel.hidden = NO;
self.statisticsLabel.attributedStringValue = self.item.attributedStatistics;
self.summaryLabel.attributedStringValue = self.item.attributedDescription;
[self.scrollView flashScrollers];
}
else
{
self.statisticsHeader.hidden = YES;
self.statisticsLabel.hidden = YES;
self.summaryLabel.hidden = YES;
}
}
- (void)setItem:(HBQueueItem *)item
{
_item = item;
[self updateLabels];
[self updateReset];
}
- (IBAction)editItem:(id)sender
{
[self.delegate detailsViewEditItem:self.item];
}
- (IBAction)resetItem:(id)sender
{
[self.delegate detailsViewResetItem:self.item];
}
@end