Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Open sidebar
VideoLAN
VLC-iOS
Commits
7a5858d0
Commit
7a5858d0
authored
Mar 13, 2014
by
Felix Paul Kühne
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
library: optimize property watching
parent
5ff4acda
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
76 additions
and
39 deletions
+76
-39
Sources/VLCAppDelegate.m
Sources/VLCAppDelegate.m
+1
-0
Sources/VLCMovieViewController.m
Sources/VLCMovieViewController.m
+0
-1
Sources/VLCPlaylistCollectionViewCell.m
Sources/VLCPlaylistCollectionViewCell.m
+52
-33
Sources/VLCPlaylistTableViewCell.m
Sources/VLCPlaylistTableViewCell.m
+23
-5
No files found.
Sources/VLCAppDelegate.m
View file @
7a5858d0
...
...
@@ -325,6 +325,7 @@
_movieViewController
.
mediaItem
=
[(
MLAlbumTrack
*
)
mediaObject
files
].
anyObject
;
else
if
([
mediaObject
isKindOfClass
:[
MLShowEpisode
class
]])
_movieViewController
.
mediaItem
=
[(
MLShowEpisode
*
)
mediaObject
files
].
anyObject
;
[(
MLFile
*
)
_movieViewController
.
mediaItem
setUnread
:
@
(
NO
)];
UINavigationController
*
navCon
=
[[
UINavigationController
alloc
]
initWithRootViewController
:
_movieViewController
];
navCon
.
modalPresentationStyle
=
UIModalPresentationFullScreen
;
...
...
Sources/VLCMovieViewController.m
View file @
7a5858d0
...
...
@@ -416,7 +416,6 @@
if
(
self
.
mediaItem
)
{
MLFile
*
item
=
self
.
mediaItem
;
media
=
[
VLCMedia
mediaWithURL
:[
NSURL
URLWithString
:
item
.
url
]];
item
.
unread
=
@
(
NO
);
}
else
if
(
!
self
.
mediaList
)
{
media
=
[
VLCMedia
mediaWithURL
:
self
.
url
];
[
media
parse
];
...
...
Sources/VLCPlaylistCollectionViewCell.m
View file @
7a5858d0
...
...
@@ -90,48 +90,67 @@
-
(
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
)])
[(
MLFile
*
)
_mediaObject
didHide
];
if
([
_mediaObject
isKindOfClass
:[
MLLabel
class
]])
{
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"files"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"name"
];
}
if
([
_mediaObject
isKindOfClass
:[
MLShow
class
]])
}
else
if
([
_mediaObject
isKindOfClass
:[
MLShow
class
]])
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"episodes"
];
else
if
([
_mediaObject
isKindOfClass
:[
MLShowEpisode
class
]])
{
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"name"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"files"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"artworkURL"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"unread"
];
}
else
if
([
_mediaObject
isKindOfClass
:[
MLAlbum
class
]])
{
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"name"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"tracks"
];
}
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
;
// prevent the cell from recycling the current snap for random contents
self
.
thumbnailView
.
image
=
nil
;
[
_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
)])
[(
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
]])
}
else
if
([
_mediaObject
isKindOfClass
:[
MLShow
class
]])
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"episodes"
options
:
0
context
:
nil
];
else
if
([
_mediaObject
isKindOfClass
:[
MLShowEpisode
class
]])
{
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"name"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"files"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"artworkURL"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"unread"
options
:
0
context
:
nil
];
}
else
if
([
_mediaObject
isKindOfClass
:[
MLAlbum
class
]])
{
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"name"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"tracks"
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
];
...
...
@@ -169,7 +188,7 @@
MLAlbumTrack
*
mediaObject
=
(
MLAlbumTrack
*
)
self
.
mediaObject
;
[
self
_configureForAlbumTrack
:
mediaObject
];
if
([
keyPath
isEqualToString
:
@"computedThumbnail"
]
||
!
keyPath
||
(
!
self
.
thumbnailView
.
image
&&
[
keyPath
isEqualToString
:
@"editing"
])
)
{
if
([
keyPath
isEqualToString
:
@"computedThumbnail"
]
||
!
keyPath
||
!
self
.
thumbnailView
.
image
)
{
MLFile
*
anyFileFromTrack
=
mediaObject
.
files
.
anyObject
;
self
.
thumbnailView
.
image
=
[
VLCThumbnailsCache
thumbnailForMediaFile
:
anyFileFromTrack
];
}
...
...
@@ -184,7 +203,7 @@
MLShowEpisode
*
mediaObject
=
(
MLShowEpisode
*
)
self
.
mediaObject
;
[
self
_configureForShowEpisode
:
mediaObject
];
if
([
keyPath
isEqualToString
:
@"computedThumbnail"
]
||
!
keyPath
||
(
!
self
.
thumbnailView
.
image
&&
[
keyPath
isEqualToString
:
@"editing"
])
)
{
if
([
keyPath
isEqualToString
:
@"computedThumbnail"
]
||
!
keyPath
||
!
self
.
thumbnailView
.
image
)
{
MLFile
*
anyFileFromEpisode
=
mediaObject
.
files
.
anyObject
;
self
.
thumbnailView
.
image
=
[
VLCThumbnailsCache
thumbnailForMediaFile
:
anyFileFromEpisode
];
}
...
...
Sources/VLCPlaylistTableViewCell.m
View file @
7a5858d0
...
...
@@ -54,7 +54,15 @@
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"name"
];
}
else
if
([
_mediaObject
isKindOfClass
:[
MLShow
class
]])
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"episodes"
];
else
if
([
mediaObject
isKindOfClass
:[
MLFile
class
]])
{
else
if
([
_mediaObject
isKindOfClass
:[
MLShowEpisode
class
]])
{
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"name"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"files"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"artworkURL"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"unread"
];
}
else
if
([
_mediaObject
isKindOfClass
:[
MLAlbum
class
]])
{
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"name"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"tracks"
];
}
else
if
([
_mediaObject
isKindOfClass
:[
MLFile
class
]])
{
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"computedThumbnail"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"lastPosition"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"duration"
];
...
...
@@ -71,13 +79,23 @@
}
_mediaObject
=
mediaObject
;
// prevent the cell from recycling the current snap for random contents
self
.
thumbnailView
.
image
=
nil
;
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
]])
{
else
if
([
_mediaObject
isKindOfClass
:[
MLShowEpisode
class
]])
{
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"name"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"files"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"artworkURL"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"unread"
options
:
0
context
:
nil
];
}
else
if
([
_mediaObject
isKindOfClass
:[
MLAlbum
class
]])
{
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"name"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"tracks"
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
];
...
...
@@ -147,7 +165,7 @@
MLAlbumTrack
*
mediaObject
=
(
MLAlbumTrack
*
)
self
.
mediaObject
;
[
self
_configureForAlbumTrack
:
mediaObject
];
if
([
keyPath
isEqualToString
:
@"computedThumbnail"
]
||
!
keyPath
||
(
!
self
.
thumbnailView
.
image
&&
[
keyPath
isEqualToString
:
@"editing"
])
)
{
if
([
keyPath
isEqualToString
:
@"computedThumbnail"
]
||
!
keyPath
||
!
self
.
thumbnailView
.
image
)
{
MLFile
*
anyFileFromTrack
=
mediaObject
.
files
.
anyObject
;
self
.
thumbnailView
.
image
=
[
VLCThumbnailsCache
thumbnailForMediaFile
:
anyFileFromTrack
];
}
...
...
@@ -155,14 +173,14 @@
MLShow
*
mediaObject
=
(
MLShow
*
)
self
.
mediaObject
;
[
self
_configureForShow
:
mediaObject
];
if
([
keyPath
isEqualToString
:
@"computedThumbnail"
]
||
[
keyPath
isEqualToString
:
@"episodes"
]
||
!
keyPath
||
(
!
self
.
thumbnailView
.
image
&&
[
keyPath
isEqualToString
:
@"editing"
])
)
{
if
([
keyPath
isEqualToString
:
@"computedThumbnail"
]
||
[
keyPath
isEqualToString
:
@"episodes"
]
||
!
keyPath
||
!
self
.
thumbnailView
.
image
)
{
self
.
thumbnailView
.
image
=
[
VLCThumbnailsCache
thumbnailForShow
:
mediaObject
];
}
}
else
if
([
self
.
mediaObject
isKindOfClass
:[
MLShowEpisode
class
]])
{
MLShowEpisode
*
mediaObject
=
(
MLShowEpisode
*
)
self
.
mediaObject
;
[
self
_configureForShowEpisode
:
mediaObject
];
if
([
keyPath
isEqualToString
:
@"computedThumbnail"
]
||
!
keyPath
||
(
!
self
.
thumbnailView
.
image
&&
[
keyPath
isEqualToString
:
@"editing"
])
)
{
if
([
keyPath
isEqualToString
:
@"computedThumbnail"
]
||
!
keyPath
||
!
self
.
thumbnailView
.
image
)
{
MLFile
*
anyFileFromEpisode
=
mediaObject
.
files
.
anyObject
;
self
.
thumbnailView
.
image
=
[
VLCThumbnailsCache
thumbnailForMediaFile
:
anyFileFromEpisode
];
}
...
...
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