memory allocation optimization
This commit is contained in:
+23
-23
@@ -76,32 +76,29 @@ func (s *searchTracksIterator) Next() *subsonic.Child {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// prefetch more search results from server
|
// prefetch more search results from server
|
||||||
if s.prefetched == nil {
|
if len(s.prefetched) == 0 {
|
||||||
results := s.searchIterBase.fetchResults()
|
results := s.searchIterBase.fetchResults()
|
||||||
if results == nil {
|
|
||||||
s.done = true
|
|
||||||
s.trackIDset = nil
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// add results from songs search
|
if results != nil {
|
||||||
s.addNewTracks(results.Song)
|
// add results from songs search
|
||||||
s.songOffset += len(results.Song)
|
s.addNewTracks(results.Song)
|
||||||
|
s.songOffset += len(results.Song)
|
||||||
|
|
||||||
// add results from artists search
|
// add results from artists search
|
||||||
for _, artist := range results.Artist {
|
for _, artist := range results.Artist {
|
||||||
artist, err := s.s.GetArtist(artist.ID)
|
artist, err := s.s.GetArtist(artist.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error fetching artist: %s", err.Error())
|
log.Printf("error fetching artist: %s", err.Error())
|
||||||
} else {
|
} else {
|
||||||
s.addNewTracksFromAlbums(artist.Album)
|
s.addNewTracksFromAlbums(artist.Album)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
s.artistOffset += len(results.Artist)
|
||||||
s.artistOffset += len(results.Artist)
|
|
||||||
|
|
||||||
// add results from albums search
|
// add results from albums search
|
||||||
s.addNewTracksFromAlbums(results.Album)
|
s.addNewTracksFromAlbums(results.Album)
|
||||||
s.albumOffset += len(results.Album)
|
s.albumOffset += len(results.Album)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// return from prefetched results
|
// return from prefetched results
|
||||||
@@ -109,13 +106,16 @@ func (s *searchTracksIterator) Next() *subsonic.Child {
|
|||||||
tr := s.prefetched[s.prefetchedPos]
|
tr := s.prefetched[s.prefetchedPos]
|
||||||
s.prefetchedPos++
|
s.prefetchedPos++
|
||||||
if s.prefetchedPos == len(s.prefetched) {
|
if s.prefetchedPos == len(s.prefetched) {
|
||||||
s.prefetched = nil
|
s.prefetched = s.prefetched[:0]
|
||||||
s.prefetchedPos = 0
|
s.prefetchedPos = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
return tr
|
return tr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// no more results
|
||||||
|
s.done = true
|
||||||
|
s.prefetched = nil
|
||||||
|
s.trackIDset = nil
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user