62 lines
1.7 KiB
Dart
62 lines
1.7 KiB
Dart
// ignore_for_file: use_build_context_synchronously
|
|
|
|
import 'dart:io';
|
|
|
|
import 'package:fipy/globals.dart';
|
|
import 'package:fipy/models/track.dart';
|
|
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:path_provider/path_provider.dart';
|
|
import 'package:youtube_explode_dart/youtube_explode_dart.dart';
|
|
|
|
class DownloadProvider with ChangeNotifier {
|
|
Future downloadMusic(BuildContext context, Track track) async {
|
|
var yt = YoutubeExplode();
|
|
var manifest = await yt.videos.streamsClient.getManifest(track.id);
|
|
var streamManifest = StreamManifest(manifest.streams);
|
|
var streamInfo = streamManifest.audioOnly.withHighestBitrate();
|
|
var stream = yt.videos.streamsClient.get(streamInfo);
|
|
final fileName = '${track.title} - ${track.artiste}'
|
|
.replaceAll('\\', '')
|
|
.replaceAll('/', '')
|
|
.replaceAll(':', '')
|
|
.replaceAll('*', '')
|
|
.replaceAll('?', '')
|
|
.replaceAll('"', '')
|
|
.replaceAll('<', '')
|
|
.replaceAll('>', '')
|
|
.replaceAll('|', '');
|
|
|
|
if (!kIsWeb) {
|
|
final filePath = Platform.isAndroid
|
|
? Directory('/storage/emulated/0/Download')
|
|
: await getDownloadsDirectory();
|
|
|
|
var file = File('${filePath!.path}/$fileName.webm');
|
|
var fileStream = file.openWrite();
|
|
|
|
await stream.pipe(fileStream);
|
|
|
|
await fileStream.flush();
|
|
await fileStream.close();
|
|
yt.close();
|
|
// convertToMp3(file.path);
|
|
|
|
track.file = file;
|
|
|
|
ScaffoldMessenger.of(playerContext).showSnackBar(
|
|
SnackBar(
|
|
content:
|
|
SizedBox(height: 90, child: Text('Son téléchargé: ${file.path}')),
|
|
),
|
|
);
|
|
|
|
log.d(file.path);
|
|
}
|
|
}
|
|
|
|
void reload() {
|
|
notifyListeners();
|
|
}
|
|
}
|