Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Open sidebar
VideoLAN
VLC-iOS
Commits
164af11c
Commit
164af11c
authored
Mar 12, 2014
by
Felix Paul Kühne
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix folder thumbnail refresh when content is modified
parent
70da4a3b
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
86 additions
and
43 deletions
+86
-43
Sources/VLCPlaylistCollectionViewCell.m
Sources/VLCPlaylistCollectionViewCell.m
+22
-4
Sources/VLCPlaylistTableViewCell.m
Sources/VLCPlaylistTableViewCell.m
+48
-29
Sources/VLCThumbnailsCache.h
Sources/VLCThumbnailsCache.h
+2
-2
Sources/VLCThumbnailsCache.m
Sources/VLCThumbnailsCache.m
+14
-8
No files found.
Sources/VLCPlaylistCollectionViewCell.m
View file @
164af11c
...
...
@@ -103,6 +103,12 @@
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"genre"
];
if
([
_mediaObject
respondsToSelector
:
@selector
(
didHide
)])
[(
MLFile
*
)
_mediaObject
didHide
];
if
([
_mediaObject
isKindOfClass
:[
MLLabel
class
]])
{
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"files"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"name"
];
}
if
([
_mediaObject
isKindOfClass
:[
MLShow
class
]])
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"episodes"
];
_mediaObject
=
mediaObject
;
...
...
@@ -120,6 +126,12 @@
if
([
_mediaObject
respondsToSelector
:
@selector
(
willDisplay
)])
[(
MLFile
*
)
_mediaObject
willDisplay
];
if
([
_mediaObject
isKindOfClass
:[
MLLabel
class
]])
{
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"files"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"name"
options
:
0
context
:
nil
];
}
if
([
_mediaObject
isKindOfClass
:[
MLShow
class
]])
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"episodes"
options
:
0
context
:
nil
];
}
[
self
_updatedDisplayedInformationForKeyPath
:
nil
];
...
...
@@ -138,12 +150,15 @@
}
else
if
([
self
.
mediaObject
isKindOfClass
:[
MLLabel
class
]])
{
MLLabel
*
mediaObject
=
(
MLLabel
*
)
self
.
mediaObject
;
[
self
_configureForFolder
:
mediaObject
];
BOOL
forceRefresh
=
NO
;
if
([
keyPath
isEqualToString
:
@"files"
]
||
[
keyPath
isEqualToString
:
@"labels"
]
||
!
keyPath
)
forceRefresh
=
YES
;
if
(
([
keyPath
isEqualToString
:
@"computedThumbnail"
]
||
!
keyPath
)
||
(
!
self
.
thumbnailView
.
image
&&
[
keyPath
isEqualToString
:
@"editing"
]))
{
if
(
forceRefresh
||
(
!
self
.
thumbnailView
.
image
&&
[
keyPath
isEqualToString
:
@"editing"
]))
{
if
(
mediaObject
.
files
.
count
==
0
)
self
.
thumbnailView
.
image
=
[
UIImage
imageNamed
:
@"folderIcon"
];
else
self
.
thumbnailView
.
image
=
[
VLCThumbnailsCache
thumbnailForLabel
:
mediaObject
];
self
.
thumbnailView
.
image
=
[
VLCThumbnailsCache
thumbnailForLabel
:
mediaObject
forceRefresh
:
forceRefresh
];
}
}
else
if
([
self
.
mediaObject
isKindOfClass
:[
MLAlbum
class
]])
{
MLAlbum
*
mediaObject
=
(
MLAlbum
*
)
self
.
mediaObject
;
...
...
@@ -164,9 +179,12 @@
}
else
if
([
self
.
mediaObject
isKindOfClass
:[
MLShow
class
]])
{
MLShow
*
mediaObject
=
(
MLShow
*
)
self
.
mediaObject
;
[
self
_configureForShow
:
mediaObject
];
BOOL
forceRefresh
=
NO
;
if
([
keyPath
isEqualToString
:
@"episodes"
])
forceRefresh
=
YES
;
if
([
keyPath
isEqualToString
:
@"computedThumbnail"
]
||
!
keyPath
||
(
!
self
.
thumbnailView
.
image
&&
[
keyPath
isEqualToString
:
@"editing"
]))
{
self
.
thumbnailView
.
image
=
[
VLCThumbnailsCache
thumbnailForShow
:
mediaObject
];
if
([
keyPath
isEqualToString
:
@"computedThumbnail"
]
||
forceRefresh
||
!
keyPath
||
(
!
self
.
thumbnailView
.
image
&&
[
keyPath
isEqualToString
:
@"editing"
]))
{
self
.
thumbnailView
.
image
=
[
VLCThumbnailsCache
thumbnailForShow
:
mediaObject
forceRefresh
:
forceRefresh
];
}
}
else
if
([
self
.
mediaObject
isKindOfClass
:[
MLShowEpisode
class
]])
{
MLShowEpisode
*
mediaObject
=
(
MLShowEpisode
*
)
self
.
mediaObject
;
...
...
Sources/VLCPlaylistTableViewCell.m
View file @
164af11c
...
...
@@ -42,36 +42,49 @@
-
(
void
)
setMediaObject
:(
MLFile
*
)
mediaObject
{
if
(
_mediaObject
!=
mediaObject
)
{
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"computedThumbnail"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"lastPosition"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"duration"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"fileSizeInBytes"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"title"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"thumbnailTimeouted"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"unread"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"albumTrackNumber"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"album"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"artist"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"genre"
];
if
([
_mediaObject
respondsToSelector
:
@selector
(
didHide
)])
if
([
_mediaObject
isKindOfClass
:[
MLLabel
class
]])
{
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"files"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"name"
];
}
else
if
([
_mediaObject
isKindOfClass
:[
MLShow
class
]])
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"episodes"
];
else
if
([
mediaObject
isKindOfClass
:[
MLFile
class
]])
{
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"computedThumbnail"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"lastPosition"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"duration"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"fileSizeInBytes"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"title"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"thumbnailTimeouted"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"unread"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"albumTrackNumber"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"album"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"artist"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"genre"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"labels"
];
[(
MLFile
*
)
_mediaObject
didHide
];
}
_mediaObject
=
mediaObject
;
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"computedThumbnail"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"lastPosition"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"duration"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"fileSizeInBytes"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"title"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"thumbnailTimeouted"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"unread"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"albumTrackNumber"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"album"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"artist"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"genre"
options
:
0
context
:
nil
];
if
([
_mediaObject
respondsToSelector
:
@selector
(
willDisplay
)])
if
([
_mediaObject
isKindOfClass
:[
MLLabel
class
]])
{
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"files"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"name"
options
:
0
context
:
nil
];
}
else
if
([
_mediaObject
isKindOfClass
:[
MLShow
class
]])
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"episodes"
options
:
0
context
:
nil
];
else
if
([
_mediaObject
isKindOfClass
:[
MLFile
class
]])
{
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"computedThumbnail"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"lastPosition"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"duration"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"fileSizeInBytes"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"title"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"thumbnailTimeouted"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"unread"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"albumTrackNumber"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"album"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"artist"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"genre"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"labels"
options
:
0
context
:
nil
];
[(
MLFile
*
)
_mediaObject
willDisplay
];
}
}
[
self
_updatedDisplayedInformationForKeyPath
:
nil
];
...
...
@@ -97,12 +110,15 @@
}
else
if
(
isFolder
)
{
MLLabel
*
mediaObject
=
(
MLLabel
*
)
self
.
mediaObject
;
[
self
_configureForFolder
:
mediaObject
];
BOOL
forceRefresh
=
NO
;
if
([
keyPath
isEqualToString
:
@"files"
]
||
[
keyPath
isEqualToString
:
@"labels"
]
||
!
keyPath
)
forceRefresh
=
YES
;
if
(
([
keyPath
isEqualToString
:
@"computedThumbnail"
]
||
!
keyPath
)
||
(
!
self
.
thumbnailView
.
image
&&
[
keyPath
isEqualToString
:
@"editing"
]))
{
if
(
forceRefresh
||
(
!
self
.
thumbnailView
.
image
&&
[
keyPath
isEqualToString
:
@"editing"
]))
{
if
(
mediaObject
.
files
.
count
==
0
)
self
.
thumbnailView
.
image
=
[
UIImage
imageNamed
:
@"folderIcon"
];
else
self
.
thumbnailView
.
image
=
[
VLCThumbnailsCache
thumbnailForLabel
:
mediaObject
];
self
.
thumbnailView
.
image
=
[
VLCThumbnailsCache
thumbnailForLabel
:
mediaObject
forceRefresh
:
forceRefresh
];
}
}
else
if
([
self
.
mediaObject
isKindOfClass
:[
MLAlbum
class
]])
{
MLAlbum
*
mediaObject
=
(
MLAlbum
*
)
self
.
mediaObject
;
...
...
@@ -123,9 +139,12 @@
}
else
if
([
self
.
mediaObject
isKindOfClass
:[
MLShow
class
]])
{
MLShow
*
mediaObject
=
(
MLShow
*
)
self
.
mediaObject
;
[
self
_configureForShow
:
mediaObject
];
BOOL
forceRefresh
=
NO
;
if
([
keyPath
isEqualToString
:
@"episodes"
])
forceRefresh
=
YES
;
if
([
keyPath
isEqualToString
:
@"computedThumbnail"
]
||
!
keyPath
||
(
!
self
.
thumbnailView
.
image
&&
[
keyPath
isEqualToString
:
@"editing"
]))
{
self
.
thumbnailView
.
image
=
[
VLCThumbnailsCache
thumbnailForShow
:
mediaObject
];
if
([
keyPath
isEqualToString
:
@"computedThumbnail"
]
||
forceRefresh
||
!
keyPath
||
(
!
self
.
thumbnailView
.
image
&&
[
keyPath
isEqualToString
:
@"editing"
]))
{
self
.
thumbnailView
.
image
=
[
VLCThumbnailsCache
thumbnailForShow
:
mediaObject
forceRefresh
:
forceRefresh
];
}
}
else
if
([
self
.
mediaObject
isKindOfClass
:[
MLShowEpisode
class
]])
{
MLShowEpisode
*
mediaObject
=
(
MLShowEpisode
*
)
self
.
mediaObject
;
...
...
Sources/VLCThumbnailsCache.h
View file @
164af11c
...
...
@@ -19,7 +19,7 @@
+
(
UIImage
*
)
thumbnailForMediaItemWithTitle
:(
NSString
*
)
title
Artist
:(
NSString
*
)
artist
andAlbumName
:(
NSString
*
)
albumname
;
+
(
UIImage
*
)
thumbnailForShow
:(
MLShow
*
)
mediaShow
;
+
(
UIImage
*
)
thumbnailForLabel
:(
MLLabel
*
)
mediaLabel
;
+
(
UIImage
*
)
thumbnailForShow
:(
MLShow
*
)
mediaShow
forceRefresh
:(
BOOL
)
forceRefresh
;
+
(
UIImage
*
)
thumbnailForLabel
:(
MLLabel
*
)
mediaLabel
forceRefresh
:(
BOOL
)
forceRefresh
;
@end
Sources/VLCThumbnailsCache.m
View file @
164af11c
...
...
@@ -102,13 +102,16 @@ static NSCache *_thumbnailCache;
return
displayedImage
;
}
+
(
UIImage
*
)
thumbnailForShow
:
(
MLShow
*
)
mediaShow
+
(
UIImage
*
)
thumbnailForShow
:
(
MLShow
*
)
mediaShow
forceRefresh
:
(
BOOL
)
forceRefresh
{
NSManagedObjectID
*
objID
=
mediaShow
.
objectID
;
UIImage
*
displayedImage
=
[
_thumbnailCache
objectForKey
:
objID
]
;
UIImage
*
displayedImage
;
if
(
displayedImage
)
return
displayedImage
;
if
(
!
forceRefresh
)
{
displayedImage
=
[
_thumbnailCache
objectForKey
:
objID
];
if
(
displayedImage
)
return
displayedImage
;
}
NSUInteger
count
=
[
mediaShow
.
episodes
count
];
NSUInteger
fileNumber
=
count
>
3
?
3
:
count
;
...
...
@@ -124,13 +127,16 @@ static NSCache *_thumbnailCache;
return
displayedImage
;
}
+
(
UIImage
*
)
thumbnailForLabel
:
(
MLLabel
*
)
mediaLabel
+
(
UIImage
*
)
thumbnailForLabel
:
(
MLLabel
*
)
mediaLabel
forceRefresh
:
(
BOOL
)
forceRefresh
{
NSManagedObjectID
*
objID
=
mediaLabel
.
objectID
;
UIImage
*
displayedImage
=
[
_thumbnailCache
objectForKey
:
objID
]
;
UIImage
*
displayedImage
;
if
(
displayedImage
)
return
displayedImage
;
if
(
!
forceRefresh
)
{
displayedImage
=
[
_thumbnailCache
objectForKey
:
objID
];
if
(
displayedImage
)
return
displayedImage
;
}
NSUInteger
count
=
[
mediaLabel
.
files
count
];
NSUInteger
fileNumber
=
count
>
3
?
3
:
count
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a 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