moving torrents between groups will change their groups - this took forever to get not to crash, so enjoy

This commit is contained in:
Mitchell Livingston 2008-05-12 21:38:24 +00:00
parent e317d52ddd
commit b147256596
1 changed files with 18 additions and 12 deletions

View File

@ -1990,10 +1990,12 @@ void sleepCallBack(void * controller, io_service_t y, natural_t messageType, voi
BOOL groupRows = [fDefaults boolForKey: @"SortByGroup"] && [NSApp isOnLeopardOrBetter]; BOOL groupRows = [fDefaults boolForKey: @"SortByGroup"] && [NSApp isOnLeopardOrBetter];
if (groupRows) if (groupRows)
{ {
[fDisplayedTorrents removeAllObjects];
NSSortDescriptor * groupDescriptor = [[[NSSortDescriptor alloc] initWithKey: @"groupOrderValue" ascending: YES] autorelease]; NSSortDescriptor * groupDescriptor = [[[NSSortDescriptor alloc] initWithKey: @"groupOrderValue" ascending: YES] autorelease];
allTorrents = [allTorrents sortedArrayUsingDescriptors: [NSArray arrayWithObject: groupDescriptor]]; allTorrents = [allTorrents sortedArrayUsingDescriptors: [NSArray arrayWithObject: groupDescriptor]];
NSMutableArray * groups = [NSMutableArray array], * groupTorrents; NSMutableArray * groupTorrents;
int oldGroupValue = -2; int oldGroupValue = -2;
for (i = 0; i < [allTorrents count]; i++) for (i = 0; i < [allTorrents count]; i++)
{ {
@ -2004,15 +2006,13 @@ void sleepCallBack(void * controller, io_service_t y, natural_t messageType, voi
groupTorrents = [NSMutableArray array]; groupTorrents = [NSMutableArray array];
NSDictionary * dict = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt: groupValue], @"Group", NSDictionary * dict = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt: groupValue], @"Group",
groupTorrents, @"Torrents", nil]; groupTorrents, @"Torrents", nil];
[groups addObject: dict]; [fDisplayedTorrents addObject: dict];
oldGroupValue = groupValue; oldGroupValue = groupValue;
} }
[groupTorrents addObject: torrent]; [groupTorrents addObject: torrent];
} }
[fDisplayedTorrents setArray: groups];
} }
else else
[fDisplayedTorrents setArray: allTorrents]; [fDisplayedTorrents setArray: allTorrents];
@ -2036,7 +2036,7 @@ void sleepCallBack(void * controller, io_service_t y, natural_t messageType, voi
} }
[self setBottomCountText: groupRows || filterStatus || filterGroup || filterText]; [self setBottomCountText: groupRows || filterStatus || filterGroup || filterText];
[self setWindowSizeToFit]; [self setWindowSizeToFit];
} }
@ -2662,26 +2662,32 @@ void sleepCallBack(void * controller, io_service_t y, natural_t messageType, voi
} }
} }
#warning get working
//reset groups //reset groups
/*if (item) if (item)
{ {
//change groups //change groups
int groupValue = [[item objectForKey: @"Group"] intValue]; int groupValue = [[item objectForKey: @"Group"] intValue];
NSEnumerator * enumerator = [movingTorrents objectEnumerator]; NSEnumerator * enumerator = [movingTorrents objectEnumerator];
Torrent * torrent; Torrent * torrent;
while ((torrent = [enumerator nextObject])) while ((torrent = [enumerator nextObject]))
{
//have to reset objects here to avoid weird crash
[[[fTableView parentForItem: torrent] objectForKey: @"Torrent"] removeObject: torrent];
[[item objectForKey: @"Torrent"] addObject: torrent];
[torrent setGroupValue: groupValue]; [torrent setGroupValue: groupValue];
}*/ }
//part 1 of avoiding weird crash
[fTableView reloadItem: nil reloadChildren: YES];
}
//remove objects to reinsert
[fTorrents removeObjectsInArray: movingTorrents];
//get all torrents to reorder //get all torrents to reorder
NSSortDescriptor * orderDescriptor = [[[NSSortDescriptor alloc] initWithKey: @"orderValue" ascending: YES] autorelease]; NSSortDescriptor * orderDescriptor = [[[NSSortDescriptor alloc] initWithKey: @"orderValue" ascending: YES] autorelease];
[fTorrents sortUsingDescriptors: [NSArray arrayWithObject: orderDescriptor]]; [fTorrents sortUsingDescriptors: [NSArray arrayWithObject: orderDescriptor]];
//remove objects to reinsert
[fTorrents removeObjectsInArray: movingTorrents];
//insert objects at new location //insert objects at new location
int insertIndex = topTorrent ? [fTorrents indexOfObject: topTorrent] + 1 : 0; int insertIndex = topTorrent ? [fTorrents indexOfObject: topTorrent] + 1 : 0;
for (i = 0; i < [movingTorrents count]; i++) for (i = 0; i < [movingTorrents count]; i++)