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
7f2132a5
Commit
7f2132a5
authored
Jun 30, 2015
by
Felix Paul Kühne
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
library: add exception handlers and sanity checks
(cherry picked from commit
3c7fd852
)
parent
f2025d68
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
88 additions
and
70 deletions
+88
-70
Sources/VLCPlaylistCollectionViewCell.m
Sources/VLCPlaylistCollectionViewCell.m
+44
-35
Sources/VLCPlaylistTableViewCell.m
Sources/VLCPlaylistTableViewCell.m
+44
-35
No files found.
Sources/VLCPlaylistCollectionViewCell.m
View file @
7f2132a5
...
...
@@ -91,40 +91,46 @@
-
(
void
)
_removeObserver
{
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
:[
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
:[
MLAlbumTrack
class
]])
{
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"unread"
options
:
0
context
:
nil
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"artist"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"title"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"files"
];
MLFile
*
anyFileFromTrack
=
[(
MLAlbumTrack
*
)
_mediaObject
files
].
anyObject
;
[
anyFileFromTrack
removeObserver
:
self
forKeyPath
:
@"artworkURL"
];
}
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"
];
[[
NSNotificationCenter
defaultCenter
]
removeObserver
:
self
];
[(
MLFile
*
)
_mediaObject
didHide
];
@try
{
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
:[
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
:[
MLAlbumTrack
class
]])
{
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"unread"
options
:
0
context
:
nil
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"artist"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"title"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"files"
];
MLFile
*
anyFileFromTrack
=
[(
MLAlbumTrack
*
)
_mediaObject
files
].
anyObject
;
if
(
anyFileFromTrack
)
[
anyFileFromTrack
removeObserver
:
self
forKeyPath
:
@"artworkURL"
];
}
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"
];
[[
NSNotificationCenter
defaultCenter
]
removeObserver
:
self
];
[(
MLFile
*
)
_mediaObject
didHide
];
}
}
@catch
(
NSException
*
exception
)
{
APLog
(
@"removing observer failed"
);
}
}
...
...
@@ -149,7 +155,8 @@
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"title"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"files"
options
:
0
context
:
nil
];
MLFile
*
anyFileFromTrack
=
[(
MLAlbumTrack
*
)
_mediaObject
files
].
anyObject
;
[
anyFileFromTrack
addObserver
:
self
forKeyPath
:
@"artworkURL"
options
:
0
context
:
nil
];
if
(
anyFileFromTrack
)
[
anyFileFromTrack
addObserver
:
self
forKeyPath
:
@"artworkURL"
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
];
...
...
@@ -318,6 +325,8 @@
-
(
void
)
_showPositionOfItem
:(
MLFile
*
)
mediaLibraryFile
{
if
(
!
mediaLibraryFile
)
return
;
CGFloat
position
=
mediaLibraryFile
.
lastPosition
.
floatValue
;
CGFloat
duration
=
mediaLibraryFile
.
duration
.
floatValue
;
...
...
Sources/VLCPlaylistTableViewCell.m
View file @
7f2132a5
...
...
@@ -58,40 +58,46 @@
-
(
void
)
_removeObserver
{
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
:[
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
:[
MLAlbumTrack
class
]])
{
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"unread"
options
:
0
context
:
nil
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"artist"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"title"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"files"
];
MLFile
*
anyFileFromTrack
=
[(
MLAlbumTrack
*
)
_mediaObject
files
].
anyObject
;
[
anyFileFromTrack
removeObserver
:
self
forKeyPath
:
@"artworkURL"
];
}
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"
];
[[
NSNotificationCenter
defaultCenter
]
removeObserver
:
self
];
[(
MLFile
*
)
_mediaObject
didHide
];
@try
{
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
:[
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
:[
MLAlbumTrack
class
]])
{
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"unread"
options
:
0
context
:
nil
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"artist"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"title"
];
[
_mediaObject
removeObserver
:
self
forKeyPath
:
@"files"
];
MLFile
*
anyFileFromTrack
=
[(
MLAlbumTrack
*
)
_mediaObject
files
].
anyObject
;
if
(
anyFileFromTrack
)
[
anyFileFromTrack
removeObserver
:
self
forKeyPath
:
@"artworkURL"
];
}
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"
];
[[
NSNotificationCenter
defaultCenter
]
removeObserver
:
self
];
[(
MLFile
*
)
_mediaObject
didHide
];
}
}
@catch
(
NSException
*
exception
)
{
APLog
(
@"removing observer failed"
);
}
}
...
...
@@ -116,7 +122,8 @@
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"title"
options
:
0
context
:
nil
];
[
_mediaObject
addObserver
:
self
forKeyPath
:
@"files"
options
:
0
context
:
nil
];
MLFile
*
anyFileFromTrack
=
[(
MLAlbumTrack
*
)
_mediaObject
files
].
anyObject
;
[
anyFileFromTrack
addObserver
:
self
forKeyPath
:
@"artworkURL"
options
:
0
context
:
nil
];
if
(
anyFileFromTrack
)
[
anyFileFromTrack
addObserver
:
self
forKeyPath
:
@"artworkURL"
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
];
...
...
@@ -305,6 +312,8 @@
-
(
void
)
_showPositionOfItem
:(
MLFile
*
)
mediaLibraryFile
{
if
(
!
mediaLibraryFile
)
return
;
CGFloat
position
=
mediaLibraryFile
.
lastPosition
.
floatValue
;
CGFloat
duration
=
mediaLibraryFile
.
duration
.
floatValue
;
...
...
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