mirror of
https://github.com/transmission/transmission.git
synced 2025-12-26 21:29:18 +00:00
use a custom class instead of a dictionary for holding a torrent's file structure
This commit is contained in:
@@ -26,6 +26,7 @@
|
||||
#import "Torrent.h"
|
||||
#import "FileOutlineView.h"
|
||||
#import "FilePriorityCell.h"
|
||||
#import "FileListNode.h"
|
||||
#import "QuickLookController.h"
|
||||
#import "NSApplicationAdditions.h"
|
||||
|
||||
@@ -101,23 +102,26 @@ typedef enum
|
||||
if (!item)
|
||||
return fTorrent ? [[fTorrent fileList] count] : 0;
|
||||
else
|
||||
return [[item objectForKey: @"IsFolder"] boolValue] ? [[item objectForKey: @"Children"] count] : 0;
|
||||
{
|
||||
FileListNode * node = (FileListNode *)item;
|
||||
return [node isFolder] ? [[node children] count] : 0;
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL) outlineView: (NSOutlineView *) outlineView isItemExpandable: (id) item
|
||||
{
|
||||
return [[item objectForKey: @"IsFolder"] boolValue];
|
||||
return [(FileListNode *)item isFolder];
|
||||
}
|
||||
|
||||
- (id) outlineView: (NSOutlineView *) outlineView child: (int) index ofItem: (id) item
|
||||
{
|
||||
return [(item ? [item objectForKey: @"Children"] : [fTorrent fileList]) objectAtIndex: index];
|
||||
return [(item ? [(FileListNode *)item children] : [fTorrent fileList]) objectAtIndex: index];
|
||||
}
|
||||
|
||||
- (id) outlineView: (NSOutlineView *) outlineView objectValueForTableColumn: (NSTableColumn *) tableColumn byItem: (id) item
|
||||
{
|
||||
if ([[tableColumn identifier] isEqualToString: @"Check"])
|
||||
return [NSNumber numberWithInt: [fTorrent checkForFiles: [item objectForKey: @"Indexes"]]];
|
||||
return [NSNumber numberWithInt: [fTorrent checkForFiles: [(FileListNode *)item indexes]]];
|
||||
else
|
||||
return item;
|
||||
}
|
||||
@@ -127,7 +131,7 @@ typedef enum
|
||||
{
|
||||
NSString * identifier = [tableColumn identifier];
|
||||
if ([identifier isEqualToString: @"Check"])
|
||||
[cell setEnabled: [fTorrent canChangeDownloadCheckForFiles: [item objectForKey: @"Indexes"]]];
|
||||
[cell setEnabled: [fTorrent canChangeDownloadCheckForFiles: [(FileListNode *)item indexes]]];
|
||||
else if ([identifier isEqualToString: @"Priority"])
|
||||
{
|
||||
[cell setRepresentedObject: item];
|
||||
@@ -148,7 +152,7 @@ typedef enum
|
||||
if ([[NSApp currentEvent] modifierFlags] & NSAlternateKeyMask)
|
||||
indexSet = [NSIndexSet indexSetWithIndexesInRange: NSMakeRange(0, [fTorrent fileCount])];
|
||||
else
|
||||
indexSet = [item objectForKey: @"Indexes"];
|
||||
indexSet = [(FileListNode *)item indexes];
|
||||
|
||||
[fTorrent setFileCheckState: [object intValue] != NSOffState ? NSOnState : NSOffState forIndexes: indexSet];
|
||||
[fOutline reloadData];
|
||||
@@ -159,7 +163,7 @@ typedef enum
|
||||
|
||||
- (NSString *) outlineView: (NSOutlineView *) outlineView typeSelectStringForTableColumn: (NSTableColumn *) tableColumn item: (id) item
|
||||
{
|
||||
return [item objectForKey: @"Name"];
|
||||
return [(FileListNode *)item name];
|
||||
}
|
||||
|
||||
- (NSString *) outlineView: (NSOutlineView *) outlineView toolTipForCell: (NSCell *) cell rect: (NSRectPointer) rect
|
||||
@@ -167,7 +171,7 @@ typedef enum
|
||||
{
|
||||
NSString * ident = [tableColumn identifier];
|
||||
if ([ident isEqualToString: @"Name"])
|
||||
return [[fTorrent downloadFolder] stringByAppendingPathComponent: [item objectForKey: @"Path"]];
|
||||
return [[fTorrent downloadFolder] stringByAppendingPathComponent: [(FileListNode *)item fullPath]];
|
||||
else if ([ident isEqualToString: @"Check"])
|
||||
{
|
||||
switch ([cell state])
|
||||
@@ -182,7 +186,7 @@ typedef enum
|
||||
}
|
||||
else if ([ident isEqualToString: @"Priority"])
|
||||
{
|
||||
NSSet * priorities = [fTorrent filePrioritiesForIndexes: [item objectForKey: @"Indexes"]];
|
||||
NSSet * priorities = [fTorrent filePrioritiesForIndexes: [(FileListNode *)item indexes]];
|
||||
switch ([priorities count])
|
||||
{
|
||||
case 0:
|
||||
@@ -209,7 +213,7 @@ typedef enum
|
||||
|
||||
- (float) outlineView: (NSOutlineView *) outlineView heightOfRowByItem: (id) item
|
||||
{
|
||||
if ([[item objectForKey: @"IsFolder"] boolValue])
|
||||
if ([(FileListNode *)item isFolder])
|
||||
return ROW_SMALL_HEIGHT;
|
||||
else
|
||||
return [outlineView rowHeight];
|
||||
@@ -223,7 +227,7 @@ typedef enum
|
||||
NSMutableIndexSet * itemIndexes = [NSMutableIndexSet indexSet];
|
||||
int i;
|
||||
for (i = [indexSet firstIndex]; i != NSNotFound; i = [indexSet indexGreaterThanIndex: i])
|
||||
[itemIndexes addIndexes: [[fOutline itemAtRow: i] objectForKey: @"Indexes"]];
|
||||
[itemIndexes addIndexes: [[fOutline itemAtRow: i] indexes]];
|
||||
|
||||
[fTorrent setFileCheckState: state forIndexes: itemIndexes];
|
||||
[fOutline reloadData];
|
||||
@@ -235,7 +239,7 @@ typedef enum
|
||||
NSMutableIndexSet * itemIndexes = [NSMutableIndexSet indexSet];
|
||||
int i;
|
||||
for (i = [indexSet firstIndex]; i != NSNotFound; i = [indexSet indexGreaterThanIndex: i])
|
||||
[itemIndexes addIndexes: [[fOutline itemAtRow: i] objectForKey: @"Indexes"]];
|
||||
[itemIndexes addIndexes: [[fOutline itemAtRow: i] indexes]];
|
||||
|
||||
[fTorrent setFileCheckState: NSOnState forIndexes: itemIndexes];
|
||||
|
||||
@@ -265,7 +269,7 @@ typedef enum
|
||||
NSMutableIndexSet * itemIndexes = [NSMutableIndexSet indexSet];
|
||||
int i;
|
||||
for (i = [indexSet firstIndex]; i != NSNotFound; i = [indexSet indexGreaterThanIndex: i])
|
||||
[itemIndexes addIndexes: [[fOutline itemAtRow: i] objectForKey: @"Indexes"]];
|
||||
[itemIndexes addIndexes: [[fOutline itemAtRow: i] indexes]];
|
||||
|
||||
[fTorrent setFilePriority: priority forIndexes: itemIndexes];
|
||||
[fOutline reloadData];
|
||||
@@ -278,7 +282,7 @@ typedef enum
|
||||
int i;
|
||||
for (i = [indexes firstIndex]; i != NSNotFound; i = [indexes indexGreaterThanIndex: i])
|
||||
[[NSWorkspace sharedWorkspace] selectFile: [folder stringByAppendingPathComponent:
|
||||
[[fOutline itemAtRow: i] objectForKey: @"Path"]] inFileViewerRootedAtPath: nil];
|
||||
[[fOutline itemAtRow: i] fullPath]] inFileViewerRootedAtPath: nil];
|
||||
}
|
||||
|
||||
#warning make real view controller (Leopard-only) so that Command-R will work
|
||||
@@ -296,7 +300,7 @@ typedef enum
|
||||
int i;
|
||||
for (i = [indexSet firstIndex]; i != NSNotFound; i = [indexSet indexGreaterThanIndex: i])
|
||||
if ([[NSFileManager defaultManager] fileExistsAtPath:
|
||||
[downloadFolder stringByAppendingPathComponent: [[[fTorrent fileList] objectAtIndex: i] objectForKey: @"Path"]]])
|
||||
[downloadFolder stringByAppendingPathComponent: [[[fTorrent fileList] objectAtIndex: i] fullPath]]])
|
||||
return YES;
|
||||
return NO;
|
||||
}
|
||||
@@ -310,7 +314,7 @@ typedef enum
|
||||
NSMutableIndexSet * itemIndexes = [NSMutableIndexSet indexSet];
|
||||
int i, state = ([menuItem tag] == FILE_CHECK_TAG) ? NSOnState : NSOffState;
|
||||
for (i = [indexSet firstIndex]; i != NSNotFound; i = [indexSet indexGreaterThanIndex: i])
|
||||
[itemIndexes addIndexes: [[fOutline itemAtRow: i] objectForKey: @"Indexes"]];
|
||||
[itemIndexes addIndexes: [[fOutline itemAtRow: i] indexes]];
|
||||
|
||||
return [fTorrent checkForFiles: itemIndexes] != state && [fTorrent canChangeDownloadCheckForFiles: itemIndexes];
|
||||
}
|
||||
@@ -324,7 +328,7 @@ typedef enum
|
||||
NSMutableIndexSet * itemIndexes = [NSMutableIndexSet indexSet];
|
||||
int i;
|
||||
for (i = [indexSet firstIndex]; i != NSNotFound; i = [indexSet indexGreaterThanIndex: i])
|
||||
[itemIndexes addIndexes: [[fOutline itemAtRow: i] objectForKey: @"Indexes"]];
|
||||
[itemIndexes addIndexes: [[fOutline itemAtRow: i] indexes]];
|
||||
|
||||
return [fTorrent canChangeDownloadCheckForFiles: itemIndexes];
|
||||
}
|
||||
@@ -357,7 +361,7 @@ typedef enum
|
||||
NSIndexSet * fileIndexSet;
|
||||
for (i = [indexSet firstIndex]; i != NSNotFound && (!current || !other); i = [indexSet indexGreaterThanIndex: i])
|
||||
{
|
||||
fileIndexSet = [[fOutline itemAtRow: i] objectForKey: @"Indexes"];
|
||||
fileIndexSet = [[fOutline itemAtRow: i] indexes];
|
||||
if (![fTorrent canChangeDownloadCheckForFiles: fileIndexSet])
|
||||
continue;
|
||||
else if ([fTorrent hasFilePriority: priority forIndexes: fileIndexSet])
|
||||
|
||||
Reference in New Issue
Block a user