Skip to content

Commit

Permalink
chore: various fixes, tweaks & ui changes
Browse files Browse the repository at this point in the history
  • Loading branch information
MSOB7YY committed Apr 27, 2024
1 parent 9a2f70d commit db055a4
Show file tree
Hide file tree
Showing 23 changed files with 206 additions and 161 deletions.
19 changes: 13 additions & 6 deletions android/app/src/main/kotlin/com/example/namida/FAudioTagger.kt
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,11 @@ public class FAudioTagger : FlutterPlugin, MethodCallHandler {
}

fun _removeLogsUser() {
logWriter?.flush()
if (logWriterUsers <= 0) logWriter?.close()
logWriterUsers--
try {
logWriter?.flush()
if (logWriterUsers <= 0) logWriter?.close()
} catch (_: Exception) {}
}
}

Expand Down Expand Up @@ -180,8 +183,10 @@ public class FAudioTagger : FlutterPlugin, MethodCallHandler {
}
"setLogFile" -> {
logFilePath = call.argument<String?>("path")
logWriter?.flush()
logWriter?.close()
try {
logWriter?.flush()
logWriter?.close()
} catch (_: Exception) {}
if (logFilePath != null) {
logWriter = BufferedWriter(FileWriter(logFilePath))
} else {
Expand Down Expand Up @@ -462,8 +467,10 @@ public class FAudioTagger : FlutterPlugin, MethodCallHandler {

override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
channel.setMethodCallHandler(null)
logWriter?.flush()
logWriter?.close()
try {
logWriter?.flush()
logWriter?.close()
} catch (_: Exception) {}
for (eventChannel in eventChannels.values) {
eventChannel.endOfStream()
}
Expand Down
7 changes: 4 additions & 3 deletions lib/base/pull_to_refresh.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@ mixin PullToRefreshMixin<T extends StatefulWidget> on State<T> implements Ticker
}

void onPointerMove(ScrollController sc, PointerMoveEvent event) {
if (!sc.hasClients) return;
final p = sc.position.pixels;
if (p <= 0 && event.delta.dx < 0.1) onVerticalDragUpdate(event.delta.dy);
final dy = event.delta.dy;
final canDragVertically = dy < 0 || (sc.hasClients && sc.position.pixels <= 0);
final horizontalAllowance = event.delta.dx < 0.1;
if (canDragVertically && horizontalAllowance) onVerticalDragUpdate(dy);
}

void onVerticalDragFinish() {
Expand Down
35 changes: 19 additions & 16 deletions lib/class/track.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,21 @@ import 'package:namida/core/enums.dart';
import 'package:namida/core/extensions.dart';

class TrackWithDate extends Selectable implements ItemWithDate {
@override
Track get track => _track;

@override
TrackWithDate? get trackWithDate => this;

final int dateAdded;
final Track track;
final Track _track;
final TrackSource source;

const TrackWithDate({
required this.dateAdded,
required this.track,
required Track track,
required this.source,
});
}) : _track = track;

factory TrackWithDate.fromJson(Map<String, dynamic> json) {
return TrackWithDate(
Expand All @@ -34,7 +40,7 @@ class TrackWithDate extends Selectable implements ItemWithDate {
Map<String, dynamic> toJson() {
return {
'dateAdded': dateAdded,
'track': track.path,
'track': _track.path,
'source': source.convertToString,
};
}
Expand Down Expand Up @@ -113,6 +119,9 @@ abstract class Playable {
abstract class Selectable extends Playable {
const Selectable();

Track get track;
TrackWithDate? get trackWithDate;

@override
bool operator ==(other) {
if (other is Selectable) {
Expand All @@ -125,24 +134,18 @@ abstract class Selectable extends Playable {
int get hashCode => track.hashCode;
}

extension SelectableUtils on Selectable {
Track get track {
final tortwd = this;
return tortwd is TrackWithDate ? tortwd.track : tortwd as Track;
}

TrackWithDate? get trackWithDate {
final tortwd = this;
return tortwd is TrackWithDate ? tortwd : null;
}
}

extension SelectableListUtils on Iterable<Selectable> {
Iterable<Track> get tracks => map((e) => e.track);
Iterable<TrackWithDate> get tracksWithDates => whereType<TrackWithDate>();
}

class Track extends Selectable {
@override
Track get track => this;

@override
TrackWithDate? get trackWithDate => null;

final String path;
const Track(this.path);

Expand Down
2 changes: 1 addition & 1 deletion lib/controller/current_color.dart
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ class CurrentColor {
_colorsSwitchTimer?.cancel();
_colorsSwitchTimer = null;
if (Player.inst.currentQueue.isEmpty && Player.inst.currentQueueYoutube.isEmpty) return;
final durms = isPlaying ? 500 : 2000;
final durms = isPlaying ? 150 : 2200;
_colorsSwitchTimer = Timer.periodic(Duration(milliseconds: durms), (timer) {
if (settings.enablePartyModeColorSwap.value) {
if (paletteFirstHalf.isEmpty) return;
Expand Down
12 changes: 8 additions & 4 deletions lib/controller/file_browser.dart
Original file line number Diff line number Diff line change
Expand Up @@ -624,13 +624,17 @@ class _NamidaFileBrowserState<T extends FileSystemEntity> extends State<_NamidaF
});
} else if (excludeHidden) {
items.loop((e, _) {
final filename = e.path.split(_pathSeparator).last;
if (!filename.startsWith('.')) onAdd(e);
final fileorDirName = e.path.split(_pathSeparator).last;
if (!fileorDirName.startsWith('.')) onAdd(e);
});
} else if (extensions.isNotEmpty) {
items.loop((e, _) {
final filename = e.path.split(_pathSeparator).last;
if (extensions.any((ext) => filename.endsWith(ext))) onAdd(e);
if (e is File) {
final filename = e.path.split(_pathSeparator).last;
if (extensions.any((ext) => filename.endsWith(ext))) onAdd(e);
} else {
onAdd(e);
}
});
} else {
items.loop((e, _) => onAdd(e));
Expand Down
2 changes: 1 addition & 1 deletion lib/controller/indexer_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -238,8 +238,8 @@ class Indexer {
mainMapFolders.addForce(tr.folder, tr);
});

sortMediaTracksSubLists(MediaType.values);
_sortAll();
sortMediaTracksSubLists(MediaType.values);
}

void sortMediaTracksSubLists(List<MediaType> medias) {
Expand Down
5 changes: 5 additions & 0 deletions lib/controller/lyrics_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ class Lyrics {
static final Lyrics _instance = Lyrics._internal();
Lyrics._internal();

final textScrollController = ScrollController(keepScrollOffset: true);

GlobalKey<LyricsLRCParsedViewState>? lrcViewKey;
final lrcViewKeyFullscreen = GlobalKey<LyricsLRCParsedViewState>();

Expand All @@ -49,6 +51,9 @@ class Lyrics {
currentLyricsText.value = '';
currentLyricsLRC.value = null;
_updateWidgets(null);
try {
textScrollController.jumpTo(0);
} catch (_) {}
lrcViewKey = GlobalKey<LyricsLRCParsedViewState>();

lyricsCanBeAvailable.value = true;
Expand Down
62 changes: 32 additions & 30 deletions lib/controller/playlist_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -291,38 +291,40 @@ class PlaylistController extends PlaylistManager<TrackWithDate> {
Future<bool> get waitForM3UPlaylistsLoad => _m3uPlaylistsCompleter.future;

Future<void> prepareM3UPlaylists({Set<String> forPaths = const {}}) async {
final allAvailableDirectories = await Indexer.inst.getAvailableDirectories(strictNoMedia: false);

late final Set<String> allPaths;
if (forPaths.isNotEmpty) {
allPaths = forPaths;
} else {
final parameters = {
'allAvailableDirectories': allAvailableDirectories,
'directoriesToExclude': <String>[],
'extensions': kM3UPlaylistsExtensions,
'respectNoMedia': false,
};
final mapResult = await getFilesTypeIsolate.thready(parameters);
allPaths = mapResult['allPaths'] as Set<String>;
}
try {
final allAvailableDirectories = await Indexer.inst.getAvailableDirectories(strictNoMedia: false);

final resBoth = await _parseM3UPlaylistFiles.thready({
'paths': allPaths,
'libraryTracks': allTracksInLibrary,
'backupDirPath': AppDirs.M3UBackup,
});
final paths = resBoth['paths'] as Map<String, (String, List<Track>)>;
final infoMap = resBoth['infoMap'] as Map<String, String?>;
late final Set<String> allPaths;
if (forPaths.isNotEmpty) {
allPaths = forPaths;
} else {
final parameters = {
'allAvailableDirectories': allAvailableDirectories,
'directoriesToExclude': <String>[],
'extensions': kM3UPlaylistsExtensions,
'respectNoMedia': false,
};
final mapResult = await getFilesTypeIsolate.thready(parameters);
allPaths = mapResult['allPaths'] as Set<String>;
}

for (final e in paths.entries) {
final plName = e.key;
final m3uPath = e.value.$1;
final trs = e.value.$2;
final creationDate = File(m3uPath).statSync().creationDate.millisecondsSinceEpoch;
PlaylistController.inst.addNewPlaylist(plName, tracks: trs, m3uPath: m3uPath, creationDate: creationDate);
}
_pathsM3ULookup = infoMap;
final resBoth = await _parseM3UPlaylistFiles.thready({
'paths': allPaths,
'libraryTracks': allTracksInLibrary,
'backupDirPath': AppDirs.M3UBackup,
});
final paths = resBoth['paths'] as Map<String, (String, List<Track>)>;
final infoMap = resBoth['infoMap'] as Map<String, String?>;

for (final e in paths.entries) {
final plName = e.key;
final m3uPath = e.value.$1;
final trs = e.value.$2;
final creationDate = File(m3uPath).statSync().creationDate.millisecondsSinceEpoch;
PlaylistController.inst.addNewPlaylist(plName, tracks: trs, m3uPath: m3uPath, creationDate: creationDate);
}
_pathsM3ULookup = infoMap;
} catch (_) {}
if (!_m3uPlaylistsCompleter.isCompleted) _m3uPlaylistsCompleter.complete(true);
}

Expand Down
16 changes: 9 additions & 7 deletions lib/core/extensions.dart
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,16 @@ extension TracksSelectableUtils on List<Selectable> {
final l = <Track>[];
String previousArtwork = '';
bool sameArtwork = true;
for (final p in withLimit(limit)) {
final currentArtwork = p.track.pathToImage;
if (sameArtwork && previousArtwork != '' && currentArtwork != previousArtwork) {
sameArtwork = false;
try {
for (final Selectable p in withLimit(limit)) {
final currentArtwork = p.track.pathToImage;
if (sameArtwork && previousArtwork != '' && currentArtwork != previousArtwork) {
sameArtwork = false;
}
l.add(p.track);
previousArtwork = currentArtwork;
}
l.add(p.track);
previousArtwork = currentArtwork;
}
} catch (_) {}
if (l.isEmpty) return [];
if (sameArtwork) return [l.first];
return l;
Expand Down
4 changes: 2 additions & 2 deletions lib/core/namida_converter_ext.dart
Original file line number Diff line number Diff line change
Expand Up @@ -597,14 +597,14 @@ extension PerformanceModeUtils on PerformanceMode {
enableBlurEffect: false,
enableGlowEffect: false,
enableMiniplayerParallaxEffect: false,
artworkCacheHeightMultiplier: 0.6,
artworkCacheHeightMultiplier: 0.8,
);
case PerformanceMode.balanced:
settings.save(
enableBlurEffect: false,
enableGlowEffect: false,
enableMiniplayerParallaxEffect: true,
artworkCacheHeightMultiplier: 0.85,
artworkCacheHeightMultiplier: 0.9,
);
case PerformanceMode.goodLooking:
settings.save(
Expand Down
1 change: 1 addition & 0 deletions lib/packages/lyrics_lrc_parsed_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,7 @@ class LyricsLRCParsedViewState extends State<LyricsLRCParsedView> {
final text = Lyrics.inst.currentLyricsText.value;
if (text != '') {
return SingleChildScrollView(
controller: Lyrics.inst.textScrollController,
child: Column(
children: [
SizedBox(height: context.height * 0.3),
Expand Down
Loading

0 comments on commit db055a4

Please sign in to comment.