Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
VLC-Android
Manage
Activity
Members
Labels
Plan
Issues
528
Issue boards
Milestones
Wiki
Code
Merge requests
14
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
VideoLAN
VLC-Android
Commits
1c96d844
Commit
1c96d844
authored
6 years ago
by
Geoffrey Métais
Browse files
Options
Downloads
Patches
Plain Diff
Refactor directories preparsing
parent
01b3777c
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
vlc-android/src/org/videolan/vlc/viewmodels/browser/BrowserProvider.kt
+47
-90
47 additions, 90 deletions
...rc/org/videolan/vlc/viewmodels/browser/BrowserProvider.kt
with
47 additions
and
90 deletions
vlc-android/src/org/videolan/vlc/viewmodels/browser/BrowserProvider.kt
+
47
−
90
View file @
1c96d844
...
...
@@ -7,7 +7,6 @@ import android.os.HandlerThread
import
android.os.Process
import
android.support.annotation.MainThread
import
android.support.v4.util.SimpleArrayMap
import
android.text.TextUtils
import
kotlinx.coroutines.experimental.CommonPool
import
kotlinx.coroutines.experimental.CoroutineStart
import
kotlinx.coroutines.experimental.android.HandlerContext
...
...
@@ -110,37 +109,55 @@ abstract class BrowserProvider(val url: String?, private val showHiddenFiles: Bo
}
}
private
fun
parseSubDirectories
()
{
synchronized
(
currentMediaList
)
{
currentMediaList
.
addAll
(
dataset
.
value
)
if
(
currentMediaList
.
isEmpty
())
return
}
private
lateinit
var
parserChannel
:
Channel
<
Media
>
private
suspend
fun
parseSubDirectories
()
{
currentMediaList
.
addAll
(
dataset
.
value
)
if
(
currentMediaList
.
isEmpty
())
return
launch
(
browserContext
)
{
synchronized
(
currentMediaList
)
{
foldersContentMap
.
clear
()
initBrowser
(
parserListener
)
currentParsedPosition
=
0
while
(
currentParsedPosition
<
currentMediaList
.
size
)
{
val
item
=
currentMediaList
[
currentParsedPosition
]
val
mw
:
MediaWrapper
?
when
{
item
.
itemType
==
MediaLibraryItem
.
TYPE_STORAGE
->
{
mw
=
MediaWrapper
((
item
as
Storage
).
uri
)
mw
.
type
=
MediaWrapper
.
TYPE_DIR
}
item
.
itemType
==
MediaLibraryItem
.
TYPE_MEDIA
->
mw
=
item
as
MediaWrapper
else
->
mw
=
null
val
directories
:
MutableList
<
MediaWrapper
>
=
ArrayList
()
val
files
:
MutableList
<
MediaWrapper
>
=
ArrayList
()
foldersContentMap
.
clear
()
initBrowser
(
parserListener
)
currentParsedPosition
=
-
1
loop@
while
(++
currentParsedPosition
<
currentMediaList
.
size
)
{
//skip media that are not browsable
val
item
=
currentMediaList
[
currentParsedPosition
]
val
current
=
when
{
item
.
itemType
==
MediaLibraryItem
.
TYPE_MEDIA
->
{
val
mw
=
item
as
MediaWrapper
if
(
mw
.
type
!=
MediaWrapper
.
TYPE_DIR
&&
mw
.
type
!=
MediaWrapper
.
TYPE_PLAYLIST
)
continue
@loop
mw
}
if
(
mw
!==
null
)
{
if
(
mw
.
type
==
MediaWrapper
.
TYPE_DIR
||
mw
.
type
==
MediaWrapper
.
TYPE_PLAYLIST
)
{
val
uri
=
mw
.
uri
mediabrowser
?.
browse
(
uri
,
0
)
return
@launch
}
item
.
itemType
==
MediaLibraryItem
.
TYPE_STORAGE
->
MediaWrapper
((
item
as
Storage
).
uri
).
apply
{
type
=
MediaWrapper
.
TYPE_DIR
}
else
->
continue
@loop
}
// browse media
parserChannel
=
Channel
(
Channel
.
UNLIMITED
)
mediabrowser
?.
browse
(
current
.
uri
,
0
)
// retrieve subitems
for
(
media
in
parserChannel
)
{
val
type
=
media
.
type
val
mw
=
findMedia
(
media
)
if
(
type
==
Media
.
Type
.
Directory
)
directories
.
add
(
mw
)
else
if
(
type
==
Media
.
Type
.
File
)
files
.
add
(
mw
)
}
// all subitems are in
val
holderText
=
getDescription
(
directories
.
size
,
files
.
size
)
if
(
holderText
!=
""
)
{
val
item
=
currentMediaList
[
currentParsedPosition
]
val
position
=
currentParsedPosition
launch
(
UI
)
{
item
.
description
=
holderText
descriptionUpdate
.
value
=
Pair
(
position
,
holderText
)
}
++
currentParsedPosition
directories
.
addAll
(
files
)
foldersContentMap
.
put
(
item
,
directories
.
toMutableList
())
}
directories
.
clear
()
files
.
clear
()
}
currentMediaList
.
clear
()
releaseBrowser
()
}
}
...
...
@@ -153,75 +170,15 @@ abstract class BrowserProvider(val url: String?, private val showHiddenFiles: Bo
protected
lateinit
var
refreshChannel
:
Channel
<
MediaWrapper
>
private
val
refreshListener
by
lazy
{
object
:
EventListener
{
override
fun
onMediaAdded
(
index
:
Int
,
media
:
Media
)
{
refreshChannel
.
offer
(
findMedia
(
media
))
}
override
fun
onMediaAdded
(
index
:
Int
,
media
:
Media
)
{
refreshChannel
.
offer
(
findMedia
(
media
))
}
override
fun
onMediaRemoved
(
index
:
Int
,
media
:
Media
?)
{}
override
fun
onBrowseEnd
()
{
refreshChannel
.
close
()
}
}
}
private
val
parserListener
by
lazy
{
object
:
EventListener
{
private
val
directories
:
MutableList
<
MediaWrapper
>
=
ArrayList
()
private
val
files
:
MutableList
<
MediaWrapper
>
=
ArrayList
()
override
fun
onMediaAdded
(
index
:
Int
,
media
:
Media
)
{
val
type
=
media
.
type
val
mw
=
findMedia
(
media
)
if
(
type
==
Media
.
Type
.
Directory
)
directories
.
add
(
mw
)
else
if
(
type
==
Media
.
Type
.
File
)
files
.
add
(
mw
)
}
override
fun
onMediaAdded
(
index
:
Int
,
media
:
Media
)
{
parserChannel
.
offer
(
media
)
}
override
fun
onMediaRemoved
(
index
:
Int
,
media
:
Media
?)
{}
override
fun
onBrowseEnd
()
{
synchronized
(
currentMediaList
)
{
if
(
currentMediaList
.
isEmpty
())
{
currentParsedPosition
=
-
1
releaseBrowser
()
return
}
val
holderText
=
getDescription
(
directories
.
size
,
files
.
size
)
var
mw
:
MediaWrapper
?
=
null
if
(!
TextUtils
.
equals
(
holderText
,
""
))
{
val
item
=
currentMediaList
[
currentParsedPosition
]
val
position
=
currentParsedPosition
launch
(
UI
)
{
item
.
description
=
holderText
descriptionUpdate
.
value
=
Pair
(
position
,
holderText
)
}
directories
.
addAll
(
files
)
foldersContentMap
.
put
(
item
,
directories
.
toMutableList
())
}
while
(++
currentParsedPosition
<
currentMediaList
.
size
)
{
//skip media that are not browsable
val
item
=
currentMediaList
[
currentParsedPosition
]
if
(
item
.
itemType
==
MediaLibraryItem
.
TYPE_MEDIA
)
{
mw
=
item
as
MediaWrapper
if
(
mw
.
type
==
MediaWrapper
.
TYPE_DIR
||
mw
.
type
==
MediaWrapper
.
TYPE_PLAYLIST
)
break
}
else
if
(
item
.
itemType
==
MediaLibraryItem
.
TYPE_STORAGE
)
{
mw
=
MediaWrapper
((
item
as
Storage
).
uri
)
break
}
else
mw
=
null
}
if
(
mw
!=
null
)
{
if
(
currentParsedPosition
<
currentMediaList
.
size
)
{
mediabrowser
?.
browse
(
mw
.
uri
,
0
)
}
else
{
currentParsedPosition
=
-
1
currentMediaList
.
clear
()
releaseBrowser
()
}
}
else
{
releaseBrowser
()
currentMediaList
.
clear
()
}
directories
.
clear
()
files
.
clear
()
}
}
override
fun
onBrowseEnd
()
{
parserChannel
.
close
()
}
}
}
private
val
sb
=
StringBuilder
()
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
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!
Save comment
Cancel
Please
register
or
sign in
to comment