fix logout

This commit is contained in:
Pato05 2024-02-13 17:53:25 +01:00
parent c28256f258
commit 019961ca85
No known key found for this signature in database
GPG key ID: ED4C6F9C3D574FB6
4 changed files with 67 additions and 68 deletions

View file

@ -88,6 +88,10 @@ class DeezerAPI {
}; };
Future<void> logout() async { Future<void> logout() async {
// actual logout from deezer API
await dio.get('https://www.deezer.com/logout.php');
await dio.get('https://auth.deezer.com/logout');
// delete all cookies // delete all cookies
await cookieJar.deleteAll(); await cookieJar.deleteAll();
updateHeaders(); updateHeaders();
@ -332,11 +336,16 @@ class DeezerAPI {
return SearchResults.fromPrivateJson(data['results']); return SearchResults.fromPrivateJson(data['results']);
} }
Future<List<Track>> getTracks(List<String> ids) async {
final data = await callApi('song.getListData', params: {'sng_ids': ids});
return (data['results']['data'] as List)
.map<Track>((t) => Track.fromPrivateJson(t as Map))
.toList(growable: false);
}
Future<Track> track(String id) async { Future<Track> track(String id) async {
Map<dynamic, dynamic> data = await callApi('song.getListData', params: { return (await getTracks([id]))[0];
'sng_ids': [id]
});
return Track.fromPrivateJson(data['results']['data'][0]);
} }
//Get album details, tracks //Get album details, tracks

View file

@ -293,12 +293,12 @@ class _LoginMainWrapperState extends State<LoginMainWrapper> {
Future _logOut() async { Future _logOut() async {
await deezerAPI.logout(); await deezerAPI.logout();
await settings.save();
await Cache.wipe();
setState(() { setState(() {
settings.arl = null; settings.arl = null;
settings.offlineMode = false; settings.offlineMode = false;
}); });
await settings.save();
await Cache.wipe();
} }
@override @override

View file

@ -362,15 +362,9 @@ class LoginBrowser extends StatefulWidget {
class _LoginBrowserState extends State<LoginBrowser> { class _LoginBrowserState extends State<LoginBrowser> {
late final WebViewController _controller; late final WebViewController _controller;
@override
void dispose() {
super.dispose();
}
@override @override
void initState() { void initState() {
_controller = WebViewController() _controller = WebViewController()
..clearLocalStorage()
..setJavaScriptMode(JavaScriptMode.unrestricted) ..setJavaScriptMode(JavaScriptMode.unrestricted)
..setBackgroundColor(const Color(0x00000000)) ..setBackgroundColor(const Color(0x00000000))
// Chrome on Android 14 // Chrome on Android 14
@ -419,6 +413,14 @@ class _LoginBrowserState extends State<LoginBrowser> {
super.initState(); super.initState();
} }
@override
void dispose() {
// clear everything
unawaited(_controller.clearCache());
unawaited(_controller.clearLocalStorage());
super.dispose();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return SafeArea( return SafeArea(

View file

@ -1,11 +1,9 @@
import 'dart:async'; import 'dart:async';
import 'package:async/async.dart';
import 'package:audio_service/audio_service.dart'; import 'package:audio_service/audio_service.dart';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart'; import 'package:flutter/scheduler.dart';
import 'package:freezer/api/deezer.dart';
import 'package:freezer/api/definitions.dart'; import 'package:freezer/api/definitions.dart';
import 'package:freezer/api/pipe_api.dart'; import 'package:freezer/api/pipe_api.dart';
import 'package:freezer/api/player/audio_handler.dart'; import 'package:freezer/api/player/audio_handler.dart';
@ -49,13 +47,13 @@ class LyricsWidget extends StatefulWidget {
class _LyricsWidgetState extends State<LyricsWidget> class _LyricsWidgetState extends State<LyricsWidget>
with WidgetsBindingObserver { with WidgetsBindingObserver {
StreamSubscription? _mediaItemSub; StreamSubscription? _mediaItemSub;
StreamSubscription? _playbackStateSub; StreamSubscription? _positionSub;
int? _currentIndex = -1; int? _currentIndex = -1;
Duration _nextOffset = Duration.zero; Duration _nextOffset = Duration.zero;
Duration _currentOffset = Duration.zero; Duration _currentOffset = Duration.zero;
String? _currentTrackId; String? _currentTrackId;
final ScrollController _controller = ScrollController(); final ScrollController _controller = ScrollController();
static const double height = 90.0; static const double height = 110.0;
static const double additionalTranslationHeight = 40.0; static const double additionalTranslationHeight = 40.0;
BoxConstraints? _widgetConstraints; BoxConstraints? _widgetConstraints;
Lyrics? _lyrics; Lyrics? _lyrics;
@ -106,8 +104,8 @@ class _LyricsWidgetState extends State<LyricsWidget>
_lyrics = lyrics; _lyrics = lyrics;
}); });
// SchedulerBinding.instance.addPostFrameCallback( SchedulerBinding.instance.addPostFrameCallback(
// (_) => _updatePosition(audioHandler.playbackState.value.position)); (_) => _updatePosition(audioHandler.playbackState.value.position));
} on DioException catch (e) { } on DioException catch (e) {
if (e.type != DioExceptionType.cancel) rethrow; if (e.type != DioExceptionType.cancel) rethrow;
} catch (e) { } catch (e) {
@ -148,8 +146,7 @@ class _LyricsWidgetState extends State<LyricsWidget>
.then((_) => _animatedScroll = false); .then((_) => _animatedScroll = false);
} }
void _updatePosition(PlaybackState playbackState) { void _updatePosition(Duration position) {
final position = playbackState.position;
if (_loading) return; if (_loading) return;
if (!_syncedLyrics) return; if (!_syncedLyrics) return;
if (position < _nextOffset && position > _currentOffset) return; if (position < _nextOffset && position > _currentOffset) return;
@ -174,9 +171,8 @@ class _LyricsWidgetState extends State<LyricsWidget>
} }
void _makeSubscriptions() { void _makeSubscriptions() {
if (_mediaItemSub != null || _playbackStateSub != null) return; if (_mediaItemSub != null || _positionSub != null) return;
_positionSub = AudioService.position.listen(_updatePosition);
_playbackStateSub = audioHandler.playbackState.listen(_updatePosition);
/// Track change = reload new lyrics /// Track change = reload new lyrics
_mediaItemSub = audioHandler.mediaItem.listen((mediaItem) { _mediaItemSub = audioHandler.mediaItem.listen((mediaItem) {
@ -188,9 +184,9 @@ class _LyricsWidgetState extends State<LyricsWidget>
void _cancelSubscriptions() { void _cancelSubscriptions() {
_mediaItemSub?.cancel(); _mediaItemSub?.cancel();
_playbackStateSub?.cancel(); _positionSub?.cancel();
_mediaItemSub = null; _mediaItemSub = null;
_playbackStateSub = null; _positionSub = null;
} }
@override @override
@ -301,7 +297,7 @@ class _LyricsWidgetState extends State<LyricsWidget>
: 0.0), : 0.0),
itemCount: _lyrics!.lyrics!.length, itemCount: _lyrics!.lyrics!.length,
itemBuilder: (BuildContext context, int i) { itemBuilder: (BuildContext context, int i) {
return Container( return DecoratedBox(
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: borderRadius:
BorderRadius.circular(8.0), BorderRadius.circular(8.0),
@ -318,49 +314,41 @@ class _LyricsWidgetState extends State<LyricsWidget>
_lyrics!.lyrics![i].offset!) _lyrics!.lyrics![i].offset!)
: null, : null,
child: Center( child: Center(
child: Padding( child: Column(
padding: _currentIndex == i mainAxisSize: MainAxisSize.min,
? EdgeInsets.zero children: [
: const EdgeInsets Text(
.symmetric( _lyrics!.lyrics![i].text!,
horizontal: 16.0), textAlign: _syncedLyrics
child: Column( ? TextAlign.center
mainAxisSize: : TextAlign.start,
MainAxisSize.min, style: TextStyle(
children: [ fontSize: _syncedLyrics
? 26.0
: 20.0,
fontWeight:
(_currentIndex == i)
? FontWeight
.bold
: FontWeight
.normal),
),
if (_showTranslation)
Text( Text(
_lyrics!.lyrics![i].text!, _lyrics!.lyrics![i]
textAlign: _syncedLyrics .translated!,
? TextAlign.center textAlign:
: TextAlign.start, TextAlign.center,
style: TextStyle( style: TextStyle(
fontSize: color: Color.lerp(
_syncedLyrics Theme.of(
? 26.0 context)
: 20.0, .colorScheme
fontWeight: .onBackground,
(_currentIndex == Colors.black,
i) 0.12),
? FontWeight fontSize: 20.0)),
.bold ],
: FontWeight
.normal),
),
if (_showTranslation)
Text(
_lyrics!.lyrics![i]
.translated!,
style: TextStyle(
color: Color.lerp(
Theme.of(
context)
.colorScheme
.onBackground,
Colors.black,
0.12),
fontSize: 20.0)),
],
),
), ),
))); )));
}, },