Skip to content

Commit 3eb059e

Browse files
committed
fix: various fixes
1 parent 2688ed6 commit 3eb059e

File tree

13 files changed

+48
-20
lines changed

13 files changed

+48
-20
lines changed

lib/base/audio_handler.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,7 @@ class NamidaAudioVideoHandler<Q extends Playable> extends BasicAudioHandler<Q> {
663663
final isVideo = item is Video;
664664
final tr = item.track;
665665
duration ??= Duration(milliseconds: tr.durationMS);
666-
final configToUpdate = CurrentVideoConfig();
666+
configToUpdate ??= CurrentVideoConfig();
667667
final initialVideo = await VideoController.inst.updateCurrentVideo(tr, returnEarly: true, configToUpdate: configToUpdate);
668668
final videoOptions = !settings.enableVideoPlayback.value
669669
? null

lib/base/ports_provider.dart

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@ class IsolateFunctionReturnBuild<T> {
2727
}
2828

2929
mixin PortsProvider<E> {
30+
static final _activePortsProviders = <PortsProvider, bool>{};
31+
static Future<void> disposeAll() async {
32+
final providers = _activePortsProviders.keys.toList();
33+
_activePortsProviders.clear();
34+
await providers.map((e) => e.disposePort()).executeAllAndSilentReportErrors();
35+
}
36+
3037
bool get isInitialized => _isInitialized ?? false;
3138

3239
Completer<SendPort>? _portCompleter;
@@ -47,10 +54,11 @@ mixin PortsProvider<E> {
4754

4855
@protected
4956
Future<void> disposePort({bool resetCompleter = true}) async {
57+
_activePortsProviders.remove(this);
5058
_recievePort?.close();
5159
_streamSub?.cancel();
5260
await sendPort(_PortsProviderDisposeMessage);
53-
_isolate?.kill();
61+
_isolate?.kill(priority: Isolate.immediate);
5462
_isInitialized = false;
5563
onPreparing(false);
5664
if (resetCompleter) _initializingCompleter = null;
@@ -69,6 +77,7 @@ mixin PortsProvider<E> {
6977

7078
_initializingCompleter = Completer<void>(); // set early to prevent double init
7179
await disposePort(resetCompleter: false);
80+
_activePortsProviders[this] = true;
7281
final portCompleter = _portCompleter = Completer<SendPort>();
7382
_recievePort = ReceivePort();
7483
_streamSub = _recievePort?.listen((result) {

lib/controller/platform/window_manager/window_manager.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import 'dart:async';
2-
import 'dart:io';
32

43
import 'package:flutter/material.dart';
54

lib/controller/platform/window_manager/window_manager_desktop.dart

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,12 +118,6 @@ class _NamidaWindowListener with WindowListener {
118118
void onWindowMoved() async {
119119
await _saveBounds();
120120
}
121-
122-
@override
123-
void onWindowClose() {
124-
// -- sometimes namida is not killed on some devices
125-
exit(0);
126-
}
127121
}
128122

129123
class _CustomScreenListener extends ScreenListener {

lib/controller/playlist_controller.dart

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,7 @@ class PlaylistController extends PlaylistManager<TrackWithDate, Track, SortType>
588588
return settings.enableM3USync.value;
589589
}
590590

591-
Timer? writeTimer;
591+
final _m3uWriteTimers = <String, Timer>{};
592592

593593
@override
594594
FutureOr<void> onPlaylistTracksChanged(LocalPlaylist playlist) async {
@@ -600,15 +600,18 @@ class PlaylistController extends PlaylistManager<TrackWithDate, Track, SortType>
600600
// -- using IOSink sometimes produces errors when succesively opened/closed
601601
// -- not ideal for cases where u constantly add/remove tracks
602602
// -- so we save with only 2 seconds limit.
603+
604+
final writeTimer = _m3uWriteTimers[m3uPath];
603605
writeTimer?.cancel();
604-
writeTimer = null;
605-
writeTimer = Timer(const Duration(seconds: 2), () async {
606+
_m3uWriteTimers[m3uPath] = Timer(const Duration(seconds: 2), () async {
606607
await _saveM3UPlaylistToFile.thready({
607608
'path': m3uPath,
608609
'tracks': playlist.tracks,
609610
'infoMap': _pathsM3ULookup,
610611
'artworkUrl': _artworkUrlForM3uInfoMap[playlist.m3uPath ?? ''],
611612
});
613+
_m3uWriteTimers[m3uPath]?.cancel();
614+
_m3uWriteTimers.remove(m3uPath);
612615
});
613616
}
614617
}

lib/controller/settings_controller.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ class _SettingsController with SettingsFileWriter {
293293

294294
final mediaItemsTrackSorting = <MediaType, List<SortType>>{
295295
MediaType.track: [SortType.title, SortType.year, SortType.album],
296-
MediaType.album: [SortType.trackNo, SortType.year, SortType.title],
296+
MediaType.album: [SortType.discNo, SortType.trackNo, SortType.year, SortType.title],
297297
MediaType.artist: [SortType.year, SortType.title],
298298
MediaType.albumArtist: [SortType.year, SortType.title],
299299
MediaType.composer: [SortType.year, SortType.title],

lib/main.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import 'package:rhttp/rhttp.dart';
2222
import 'package:super_drag_and_drop/super_drag_and_drop.dart';
2323
import 'package:windows_single_instance/windows_single_instance.dart';
2424

25+
import 'package:namida/base/ports_provider.dart';
2526
import 'package:namida/class/file_parts.dart';
2627
import 'package:namida/class/route.dart';
2728
import 'package:namida/controller/backup_controller.dart';
@@ -39,6 +40,7 @@ import 'package:namida/controller/player_controller.dart';
3940
import 'package:namida/controller/playlist_controller.dart';
4041
import 'package:namida/controller/queue_controller.dart';
4142
import 'package:namida/controller/scroll_search_controller.dart';
43+
import 'package:namida/controller/search_sort_controller.dart';
4244
import 'package:namida/controller/settings_controller.dart';
4345
import 'package:namida/controller/shortcuts_controller.dart';
4446
import 'package:namida/controller/smtc_controller.dart';
@@ -490,6 +492,15 @@ class Namida extends StatefulWidget {
490492

491493
@override
492494
State<Namida> createState() => _NamidaState();
495+
496+
static Future<void> disposeAllResources() async {
497+
YoutubeInfoController.dispose();
498+
await [
499+
PortsProvider.disposeAll(),
500+
SearchSortController.inst.disposeResources(),
501+
NamicoDBWrapper.dispose(),
502+
].executeAllAndSilentReportErrors();
503+
}
493504
}
494505

495506
class _NamidaState extends State<Namida> {

lib/main_page_wrapper.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -571,7 +571,11 @@ class NamidaDesktopAppBarState extends State<NamidaDesktopAppBar> with WindowLis
571571
),
572572
WindowCaptionButton.close(
573573
brightness: brightness,
574-
onPressed: windowManager.close,
574+
onPressed: () async {
575+
await Namida.disposeAllResources();
576+
await windowManager.close();
577+
await windowManager.destroy();
578+
},
575579
),
576580
],
577581
),

lib/packages/lyrics_lrc_parsed_view.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -913,7 +913,7 @@ class _TextWithFadingProgress extends StatelessWidget {
913913
text: textPart,
914914
style: textStyle, // dont dim here
915915
),
916-
textAlign: textAlign,
916+
textAlign: TextAlign.start, // -- otherwise multi-part word will appear split
917917
// -- fixes artifacts with shader
918918
textHeightBehavior: const TextHeightBehavior(
919919
applyHeightToFirstAscent: false,

lib/ui/widgets/custom_widgets.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5540,7 +5540,7 @@ class SwipeQueueAddTile<Q extends Playable> extends StatelessWidget {
55405540
? DismissDirection.startToEnd
55415541
: DismissDirection.none,
55425542
removeOnDismiss: false,
5543-
dismissThreshold: 0.15,
5543+
dismissThreshold: 0.12,
55445544
friction: 0.58,
55455545
onDismissed: (direction) {
55465546
final swipedLeft = direction == DismissDirection.endToStart;

0 commit comments

Comments
 (0)