Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
LibVLCSharp
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Martin Finkel
LibVLCSharp
Commits
ef72455b
Commit
ef72455b
authored
Feb 18, 2019
by
Martin Finkel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
MediaList: Implement IEnumerable/IEnumerator
parent
061c916c
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
51 additions
and
22 deletions
+51
-22
LibVLCSharp.Tests/MediaDiscovererTests.cs
LibVLCSharp.Tests/MediaDiscovererTests.cs
+8
-1
LibVLCSharp.Tests/MediaListTests.cs
LibVLCSharp.Tests/MediaListTests.cs
+0
-19
LibVLCSharp/Shared/MediaList.cs
LibVLCSharp/Shared/MediaList.cs
+43
-2
No files found.
LibVLCSharp.Tests/MediaDiscovererTests.cs
View file @
ef72455b
using
System
;
using
System.Diagnostics
;
using
System.Linq
;
using
System.Threading.Tasks
;
using
LibVLCSharp.Shared
;
using
NUnit.Framework
;
...
...
@@ -20,13 +22,18 @@ namespace LibVLCSharp.Tests
}
[
Test
]
public
void
DisposeMediaDiscoverer
()
public
async
Task
DisposeMediaDiscoverer
()
{
var
mds
=
_libVLC
.
MediaDiscoverers
(
MediaDiscovererCategory
.
Lan
);
var
md
=
new
MediaDiscoverer
(
_libVLC
,
mds
.
First
().
Name
);
Assert
.
True
(
md
.
Start
());
Assert
.
True
(
md
.
IsRunning
);
Assert
.
NotNull
(
md
.
MediaList
);
await
Task
.
Delay
(
1000
);
foreach
(
var
media
in
md
.
MediaList
)
{
Debug
.
WriteLine
(
media
.
Mrl
);
}
md
.
Dispose
();
Assert
.
IsNull
(
md
.
MediaList
);
Assert
.
False
(
md
.
IsRunning
);
...
...
LibVLCSharp.Tests/MediaListTests.cs
View file @
ef72455b
...
...
@@ -17,7 +17,6 @@ namespace LibVLCSharp.Tests
var
itemDeleted
=
false
;
mediaList
.
ItemAdded
+=
(
sender
,
args
)
=>
itemAdded
=
true
;
mediaList
.
ItemDeleted
+=
(
sender
,
args
)
=>
itemDeleted
=
true
;
mediaList
.
Lock
();
mediaList
.
AddMedia
(
media
);
Assert
.
AreEqual
(
media
,
mediaList
[
0
]);
Assert
.
AreEqual
(
1
,
mediaList
.
Count
);
...
...
@@ -26,24 +25,6 @@ namespace LibVLCSharp.Tests
mediaList
.
RemoveIndex
(
0
);
Assert
.
Zero
(
mediaList
.
Count
);
Assert
.
True
(
itemDeleted
);
mediaList
.
Unlock
();
}
[
Test
]
public
void
AcquireLockTwiceThrows
()
{
var
mediaList
=
new
MediaList
(
_libVLC
);
mediaList
.
Lock
();
Assert
.
Throws
<
InvalidOperationException
>(()
=>
mediaList
.
Lock
(),
"already locked"
);
}
[
Test
]
public
void
ReleaseLockTwiceThrows
()
{
var
mediaList
=
new
MediaList
(
_libVLC
);
mediaList
.
Lock
();
mediaList
.
Unlock
();
Assert
.
Throws
<
InvalidOperationException
>(()
=>
mediaList
.
Unlock
(),
"not locked"
);
}
[
Test
]
...
...
LibVLCSharp/Shared/MediaList.cs
View file @
ef72455b
using
System
;
using
System.Collections
;
using
System.Collections.Generic
;
using
System.Runtime.InteropServices
;
namespace
LibVLCSharp.Shared
{
public
class
MediaList
:
Internal
public
class
MediaList
:
Internal
,
IEnumerable
{
MediaListEventManager
_eventManager
;
readonly
object
_syncLock
=
new
object
();
...
...
@@ -145,9 +147,13 @@ namespace LibVLCSharp.Shared
}
finally
{
lock
(
_syncLock
)
{
if
(
_nativeLock
)
Unlock
();
}
}
}
/// <summary>
/// Insert media instance in media list on a position.
...
...
@@ -286,5 +292,40 @@ namespace LibVLCSharp.Shared
base
.
Dispose
(
disposing
);
}
IEnumerator
IEnumerable
.
GetEnumerator
()
=>
GetEnumerator
();
public
MediaListEnumerator
GetEnumerator
()
=>
new
MediaListEnumerator
(
this
);
public
class
MediaListEnumerator
:
IEnumerator
<
Media
>
{
int
position
=
-
1
;
MediaList
_mediaList
;
internal
MediaListEnumerator
(
MediaList
mediaList
)
{
_mediaList
=
mediaList
;
}
public
bool
MoveNext
()
{
position
++;
return
position
<
_mediaList
.
Count
;
}
void
IEnumerator
.
Reset
()
{
position
=
-
1
;
}
public
void
Dispose
()
{
position
=
-
1
;
_mediaList
=
default
;
}
object
IEnumerator
.
Current
=>
Current
;
public
Media
Current
=>
_mediaList
[
position
];
}
}
}
\ No newline at end of file
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