Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
VideoLAN
VLC-iOS
Commits
9f265e22
Commit
9f265e22
authored
Aug 31, 2013
by
Gleb Pinigin
Browse files
Playlist table view cell: extract thumbnails lookup
parent
07deab04
Changes
1
Hide whitespace changes
Inline
Side-by-side
AspenProject/VLCPlaylistTableViewCell.m
View file @
9f265e22
...
...
@@ -81,13 +81,6 @@
-
(
void
)
_updatedDisplayedInformationForKeyPath
:(
NSString
*
)
keyPath
{
static
NSMutableArray
*
_thumbnailCacheIndex
;
static
NSMutableDictionary
*
_thumbnailCache
;
if
(
!
_thumbnailCache
)
_thumbnailCache
=
[[
NSMutableDictionary
alloc
]
initWithCapacity
:
MAX_CACHE_SIZE
];
if
(
!
_thumbnailCacheIndex
)
_thumbnailCacheIndex
=
[[
NSMutableArray
alloc
]
initWithCapacity
:
MAX_CACHE_SIZE
];
self
.
albumNameLabel
.
text
=
self
.
artistNameLabel
.
text
=
@""
;
if
([
self
.
mediaObject
isKindOfClass
:[
MLFile
class
]])
{
...
...
@@ -95,29 +88,7 @@
[
self
configureForMLFile
:
mediaObject
];
if
(([
keyPath
isEqualToString
:
@"computedThumbnail"
]
||
!
keyPath
)
&&
!
mediaObject
.
isAlbumTrack
)
{
NSManagedObjectID
*
objID
=
mediaObject
.
objectID
;
UIImage
*
displayedImage
;
if
([
_thumbnailCacheIndex
containsObject
:
objID
])
{
[
_thumbnailCacheIndex
removeObject
:
objID
];
[
_thumbnailCacheIndex
insertObject
:
objID
atIndex
:
0
];
displayedImage
=
[
_thumbnailCache
objectForKey
:
objID
];
if
(
!
displayedImage
)
{
displayedImage
=
mediaObject
.
computedThumbnail
;
if
(
displayedImage
)
[
_thumbnailCache
setObject
:
displayedImage
forKey
:
objID
];
}
}
else
{
if
(
_thumbnailCacheIndex
.
count
>=
MAX_CACHE_SIZE
)
{
[
_thumbnailCache
removeObjectForKey
:[
_thumbnailCacheIndex
lastObject
]];
[
_thumbnailCacheIndex
removeLastObject
];
}
displayedImage
=
mediaObject
.
computedThumbnail
;
if
(
displayedImage
)
[
_thumbnailCache
setObject
:
displayedImage
forKey
:
objID
];
if
(
objID
)
[
_thumbnailCacheIndex
insertObject
:
objID
atIndex
:
0
];
}
self
.
thumbnailView
.
image
=
displayedImage
;
self
.
thumbnailView
.
image
=
[
self
thumbnailForMediaFile
:
mediaObject
];
}
}
else
if
([
self
.
mediaObject
isKindOfClass
:[
MLAlbum
class
]])
{
...
...
@@ -132,57 +103,18 @@
MLShow
*
mediaObject
=
(
MLShow
*
)
self
.
mediaObject
;
[
self
configureForShow
:
mediaObject
];
MLFile
*
anyFileFromAnyEpisode
=
[
mediaObject
.
episodes
.
anyObject
files
].
anyObject
;
if
([
keyPath
isEqualToString
:
@"computedThumbnail"
]
||
!
keyPath
)
{
NSManagedObjectID
*
objID
=
anyFileFromAnyEpisode
.
objectID
;
UIImage
*
displayedImage
;
if
([
_thumbnailCacheIndex
containsObject
:
objID
])
{
[
_thumbnailCacheIndex
removeObject
:
objID
];
[
_thumbnailCacheIndex
insertObject
:
objID
atIndex
:
0
];
displayedImage
=
[
_thumbnailCache
objectForKey
:
objID
];
if
(
!
displayedImage
)
{
displayedImage
=
anyFileFromAnyEpisode
.
computedThumbnail
;
if
(
displayedImage
)
[
_thumbnailCache
setObject
:
displayedImage
forKey
:
objID
];
}
}
else
{
if
(
_thumbnailCacheIndex
.
count
>=
MAX_CACHE_SIZE
)
{
[
_thumbnailCache
removeObjectForKey
:[
_thumbnailCacheIndex
lastObject
]];
[
_thumbnailCacheIndex
removeLastObject
];
}
displayedImage
=
anyFileFromAnyEpisode
.
computedThumbnail
;
if
(
displayedImage
)
[
_thumbnailCache
setObject
:
displayedImage
forKey
:
objID
];
if
(
objID
)
[
_thumbnailCacheIndex
insertObject
:
objID
atIndex
:
0
];
}
self
.
thumbnailView
.
image
=
displayedImage
;
MLFile
*
anyFileFromAnyEpisode
=
[
mediaObject
.
episodes
.
anyObject
files
].
anyObject
;
self
.
thumbnailView
.
image
=
[
self
thumbnailForMediaFile
:
anyFileFromAnyEpisode
];
}
}
else
if
([
self
.
mediaObject
isKindOfClass
:[
MLShowEpisode
class
]])
{
MLShowEpisode
*
mediaObject
=
(
MLShowEpisode
*
)
self
.
mediaObject
;
[
self
configureForShowEpisode
:
mediaObject
];
MLFile
*
anyFileFromEpisode
=
mediaObject
.
files
.
anyObject
;
if
([
keyPath
isEqualToString
:
@"computedThumbnail"
]
||
!
keyPath
)
{
NSManagedObjectID
*
objID
=
anyFileFromEpisode
.
objectID
;
UIImage
*
displayedImage
;
if
([
_thumbnailCacheIndex
containsObject
:
objID
])
{
[
_thumbnailCacheIndex
removeObject
:
objID
];
[
_thumbnailCacheIndex
insertObject
:
objID
atIndex
:
0
];
displayedImage
=
[
_thumbnailCache
objectForKey
:
objID
];
}
else
{
if
(
_thumbnailCacheIndex
.
count
>=
MAX_CACHE_SIZE
)
{
[
_thumbnailCache
removeObjectForKey
:[
_thumbnailCacheIndex
lastObject
]];
[
_thumbnailCacheIndex
removeLastObject
];
}
displayedImage
=
anyFileFromEpisode
.
computedThumbnail
;
if
(
displayedImage
)
[
_thumbnailCache
setObject
:
displayedImage
forKey
:
objID
];
if
(
objID
)
[
_thumbnailCacheIndex
insertObject
:
objID
atIndex
:
0
];
}
self
.
thumbnailView
.
image
=
displayedImage
;
MLFile
*
anyFileFromEpisode
=
mediaObject
.
files
.
anyObject
;
self
.
thumbnailView
.
image
=
[
self
thumbnailForMediaFile
:
anyFileFromEpisode
];
}
}
...
...
@@ -258,7 +190,8 @@
self
.
progressIndicator
.
hidden
=
YES
;
}
-
(
void
)
configureForMLFile
:(
MLFile
*
)
mediaFile
{
-
(
void
)
configureForMLFile
:(
MLFile
*
)
mediaFile
{
if
(
mediaFile
.
isAlbumTrack
)
{
self
.
artistNameLabel
.
text
=
mediaFile
.
albumTrack
.
artist
;
self
.
albumNameLabel
.
text
=
mediaFile
.
albumTrack
.
album
.
name
;
...
...
@@ -286,4 +219,44 @@
self
.
mediaIsUnreadView
.
hidden
=
!
mediaFile
.
unread
.
intValue
;
}
#pragma mark - thumbnails cache
// Can be extracted outside of VLCPlaylistTableViewCell
-
(
UIImage
*
)
thumbnailForMediaFile
:(
MLFile
*
)
mediaFile
{
if
(
mediaFile
==
nil
||
mediaFile
.
objectID
==
nil
)
return
nil
;
static
NSMutableArray
*
_thumbnailCacheIndex
;
static
NSMutableDictionary
*
_thumbnailCache
;
if
(
!
_thumbnailCache
)
_thumbnailCache
=
[[
NSMutableDictionary
alloc
]
initWithCapacity
:
MAX_CACHE_SIZE
];
if
(
!
_thumbnailCacheIndex
)
_thumbnailCacheIndex
=
[[
NSMutableArray
alloc
]
initWithCapacity
:
MAX_CACHE_SIZE
];
NSManagedObjectID
*
objID
=
mediaFile
.
objectID
;
UIImage
*
displayedImage
=
nil
;
if
([
_thumbnailCacheIndex
containsObject
:
objID
])
{
[
_thumbnailCacheIndex
removeObject
:
objID
];
[
_thumbnailCacheIndex
insertObject
:
objID
atIndex
:
0
];
displayedImage
=
[
_thumbnailCache
objectForKey
:
objID
];
if
(
!
displayedImage
&&
mediaFile
.
computedThumbnail
)
{
displayedImage
=
mediaFile
.
computedThumbnail
;
[
_thumbnailCache
setObject
:
displayedImage
forKey
:
objID
];
}
}
else
{
if
(
_thumbnailCacheIndex
.
count
>=
MAX_CACHE_SIZE
)
{
[
_thumbnailCache
removeObjectForKey
:[
_thumbnailCacheIndex
lastObject
]];
[
_thumbnailCacheIndex
removeLastObject
];
}
displayedImage
=
mediaFile
.
computedThumbnail
;
if
(
displayedImage
)
{
[
_thumbnailCache
setObject
:
displayedImage
forKey
:
objID
];
[
_thumbnailCacheIndex
insertObject
:
objID
atIndex
:
0
];
}
}
return
displayedImage
;
}
@end
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment