[vlc-commits] macosx: Fix parsing of item information
David Fuhrmann
git at videolan.org
Thu Dec 29 22:22:15 CET 2016
vlc/vlc-2.2 | branch: master | David Fuhrmann <dfuhrmann at videolan.org> | Thu Dec 29 19:49:20 2016 +0100| [a006455bc441f7b67119bad9b90ed094b5db7c40] | committer: David Fuhrmann
macosx: Fix parsing of item information
All items need to be passed to local tree items within one lock.
This code is already rewritten in vlc.git branch.
fixes #17765
> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=a006455bc441f7b67119bad9b90ed094b5db7c40
---
modules/gui/macosx/playlistinfo.h | 2 ++
modules/gui/macosx/playlistinfo.m | 41 +++++++++++++++++++++++++--------------
2 files changed, 28 insertions(+), 15 deletions(-)
diff --git a/modules/gui/macosx/playlistinfo.h b/modules/gui/macosx/playlistinfo.h
index 5574cf8..ca3d463 100644
--- a/modules/gui/macosx/playlistinfo.h
+++ b/modules/gui/macosx/playlistinfo.h
@@ -133,6 +133,8 @@
@property (readonly) NSString * name;
@property (readonly) NSString * value;
+- (void)setChildren:(NSMutableArray *)children;
+
- (VLCInfoTreeItem *)childAtIndex:(NSUInteger)i_index;
- (void)refresh;
diff --git a/modules/gui/macosx/playlistinfo.m b/modules/gui/macosx/playlistinfo.m
index aa54d1e..2646dea 100644
--- a/modules/gui/macosx/playlistinfo.m
+++ b/modules/gui/macosx/playlistinfo.m
@@ -473,26 +473,27 @@ error:
for (int i = 0 ; i < p_item->i_categories ; i++) {
NSString * name = toNSStr(p_item->pp_categories[i]->psz_name);
VLCInfoTreeItem * item = [[VLCInfoTreeItem alloc] initWithName:name value:@"" ID:i parent:self];
+
+ info_category_t * cat = p_item->pp_categories[i];
+ NSMutableArray *o_subChilds = [[[NSMutableArray alloc] initWithCapacity: cat->i_infos] autorelease];
+ for (int j = 0 ; j < cat->i_infos ; j++) {
+ NSString * subName = toNSStr(cat->pp_infos[j]->psz_name);
+ NSString * subValue = toNSStr(cat->pp_infos[j]->psz_value);
+ VLCInfoTreeItem * subItem = [[VLCInfoTreeItem alloc] initWithName:subName value:subValue ID:j parent:item];
+ [subItem autorelease];
+ [o_subChilds addObject:subItem];
+ }
+ [item setChildren: o_subChilds];
+
[item autorelease];
[o_children addObject:item];
}
vlc_mutex_unlock(&p_item->lock);
- }
- else if (o_parent->i_object_id == -1) {
- vlc_mutex_lock(&p_item->lock);
- info_category_t * cat = p_item->pp_categories[i_object_id];
- o_children = [[NSMutableArray alloc] initWithCapacity: cat->i_infos];
- for (int i = 0 ; i < cat->i_infos ; i++) {
- NSString * name = toNSStr(cat->pp_infos[i]->psz_name);
- NSString * value = toNSStr(cat->pp_infos[i]->psz_value);
- VLCInfoTreeItem * item = [[VLCInfoTreeItem alloc] initWithName:name value:value ID:i parent:self];
- [item autorelease];
- [o_children addObject:item];
- }
- vlc_mutex_unlock(&p_item->lock);
- }
- else
+ } else {
+ // must be item for category info already
+ assert(o_parent->i_object_id != -1);
o_children = IsALeafNode;
+ }
}
return o_children;
}
@@ -508,6 +509,16 @@ error:
o_children = nil;
}
+
+- (void)setChildren:(NSMutableArray *)children {
+ if (o_children && o_children != IsALeafNode)
+ [o_children release];
+
+ o_children = children;
+ [o_children retain];
+}
+
+
- (VLCInfoTreeItem *)childAtIndex:(NSUInteger)i_index {
return [[self children] objectAtIndex:i_index];
}
More information about the vlc-commits
mailing list