Skip to content

Commit f7b591d

Browse files
committed
core: folders page now merges videos with tracks
- and add tracks-only folder page
1 parent 7ae4748 commit f7b591d

16 files changed

+276
-168
lines changed

lib/class/folder.dart

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import 'dart:io';
44

55
import 'package:namida/class/track.dart';
6-
import 'package:namida/controller/folders_controller.dart';
76
import 'package:namida/controller/indexer_controller.dart';
87
import 'package:namida/core/extensions.dart';
98

@@ -13,7 +12,7 @@ class VideoFolder extends Folder {
1312
VideoFolder.explicit(super.path) : super.explicit();
1413

1514
@override
16-
String toString() => "VideoFolder(path: $path, tracks: ${tracks().length})";
15+
String toString() => "VideoFolder(path: $path, tracks: ${tracksDedicated().length})";
1716
}
1817

1918
class Folder {
@@ -81,16 +80,8 @@ class Folder {
8180
}
8281

8382
extension FolderUtils<T extends Folder, E extends Track> on T {
84-
Map<T, List<E>> get _mainFoldersMap {
85-
return this is VideoFolder ? Indexer.inst.mainMapFoldersVideos.value as Map<T, List<E>> : Indexer.inst.mainMapFolders.value as Map<T, List<E>>;
86-
}
87-
88-
FoldersController get _controller {
89-
return this is VideoFolder ? FoldersController.videos : FoldersController.tracks;
90-
}
91-
92-
void navigate() {
93-
_controller.stepIn(this);
83+
Map<T, List<E>> get _mainFoldersMapDedicated {
84+
return this is VideoFolder ? Indexer.inst.mainMapFoldersVideos.value as Map<T, List<E>> : Indexer.inst.mainMapFoldersTracks.value as Map<T, List<E>>;
9485
}
9586

9687
T get parent {
@@ -104,7 +95,7 @@ extension FolderUtils<T extends Folder, E extends Track> on T {
10495
bool get hasSimilarFolderNames {
10596
int count = 0;
10697
var thisfolderLower = folderName.toLowerCase();
107-
for (final k in _mainFoldersMap.keys) {
98+
for (final k in _mainFoldersMapDedicated.keys) {
10899
if (k.folderName.toLowerCase() == thisfolderLower) {
109100
count++;
110101
if (count > 1) return true;
@@ -131,5 +122,5 @@ extension FolderUtils<T extends Folder, E extends Track> on T {
131122
return null;
132123
}
133124

134-
List<E> tracks() => _mainFoldersMap[this] ?? [];
125+
List<E> tracksDedicated() => _mainFoldersMapDedicated[this] ?? [];
135126
}

lib/class/library_group.dart

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,24 @@ import 'package:namida/core/utils.dart';
1111
class LibraryGroup<T extends Track> {
1212
bool didFill = false;
1313

14+
void updateFrom(LibraryGroup other) {
15+
mainMapAlbums.update(other.mainMapAlbums);
16+
mainMapArtists.update(other.mainMapArtists);
17+
mainMapAlbumArtists.update(other.mainMapAlbumArtists);
18+
mainMapComposer.update(other.mainMapComposer);
19+
mainMapGenres.update(other.mainMapGenres);
20+
mainMapFoldersTracksAndVideos.value = other.mainMapFoldersTracksAndVideos.value as Map<Folder, List<T>>;
21+
mainMapFoldersTracks.value = other.mainMapFoldersTracks.value as Map<Folder, List<T>>;
22+
mainMapFoldersVideos.value = other.mainMapFoldersVideos.value;
23+
}
24+
1425
final mainMapAlbums = LibraryItemMap();
1526
final mainMapArtists = LibraryItemMap();
1627
final mainMapAlbumArtists = LibraryItemMap();
1728
final mainMapComposer = LibraryItemMap();
1829
final mainMapGenres = LibraryItemMap();
19-
final mainMapFolders = <Folder, List<T>>{}.obs;
30+
final mainMapFoldersTracksAndVideos = <Folder, List<T>>{}.obs;
31+
final mainMapFoldersTracks = <Folder, List<T>>{}.obs;
2032
final mainMapFoldersVideos = <VideoFolder, List<Video>>{}.obs;
2133

2234
void fillAll(List<T> allTracks, TrackExtended Function(T tr) trackToExtended, List<AlbumIdentifier> albumIdentifier) {
@@ -25,15 +37,17 @@ class LibraryGroup<T extends Track> {
2537
final mainMapAlbumArtists = this.mainMapAlbumArtists.value;
2638
final mainMapComposer = this.mainMapComposer.value;
2739
final mainMapGenres = this.mainMapGenres.value;
28-
final mainMapFolders = this.mainMapFolders.value;
40+
final mainMapFoldersTracksAndVideos = this.mainMapFoldersTracksAndVideos.value;
41+
final mainMapFoldersTracks = this.mainMapFoldersTracks.value;
2942
final mainMapFoldersVideos = this.mainMapFoldersVideos.value;
3043

3144
mainMapAlbums.clear();
3245
mainMapArtists.clear();
3346
mainMapAlbumArtists.clear();
3447
mainMapComposer.clear();
3548
mainMapGenres.clear();
36-
mainMapFolders.clear();
49+
mainMapFoldersTracksAndVideos.clear();
50+
mainMapFoldersTracks.clear();
3751
mainMapFoldersVideos.clear();
3852

3953
allTracks.loop(
@@ -60,7 +74,8 @@ class LibraryGroup<T extends Track> {
6074
});
6175

6276
// -- Assigning Folders
63-
tr is Video ? mainMapFoldersVideos.addForce(tr.folder, tr) : mainMapFolders.addForce(tr.folder, tr);
77+
tr is Video ? mainMapFoldersVideos.addForce(tr.folder, tr) : mainMapFoldersTracks.addForce(tr.folder, tr);
78+
mainMapFoldersTracksAndVideos.addForce(tr.folder, tr);
6479
},
6580
);
6681

@@ -73,7 +88,8 @@ class LibraryGroup<T extends Track> {
7388
this.mainMapAlbumArtists.refresh();
7489
this.mainMapComposer.refresh();
7590
this.mainMapGenres.refresh();
76-
this.mainMapFolders.refresh();
91+
this.mainMapFoldersTracksAndVideos.refresh();
92+
this.mainMapFoldersTracks.refresh();
7793
this.mainMapFoldersVideos.refresh();
7894
}
7995

@@ -142,9 +158,10 @@ class LibraryGroup<T extends Track> {
142158
MediaType.albumArtist => mainMapAlbumArtists.value.values as Iterable<List<T>>,
143159
MediaType.composer => mainMapComposer.value.values as Iterable<List<T>>,
144160
MediaType.genre => mainMapGenres.value.values as Iterable<List<T>>,
145-
MediaType.folder => mainMapFolders.values,
161+
MediaType.folder => mainMapFoldersTracksAndVideos.values,
162+
MediaType.folderMusic => mainMapFoldersTracks.values,
146163
MediaType.folderVideo => mainMapFoldersVideos.values as Iterable<List<T>>,
147-
_ => null,
164+
MediaType.playlist => null,
148165
};
149166
}
150167
}

lib/class/library_item_map.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,8 @@ class LibraryItemMap {
1919
_rxMap.value.clear();
2020
refresh();
2121
}
22+
23+
void update(LibraryItemMap other) {
24+
_rxMap.value = other.value;
25+
}
2226
}

0 commit comments

Comments
 (0)