1
0
mirror of https://github.com/stonega/tsacdop synced 2025-02-27 00:37:42 +01:00

Fix outdated download task delete failed.

This commit is contained in:
stonegate 2020-06-27 09:33:01 +08:00
parent acf41963aa
commit ad754cfcd9
4 changed files with 58 additions and 43 deletions

View File

@ -1,5 +1,3 @@
import 'dart:io';
import 'package:sqflite/sqflite.dart'; import 'package:sqflite/sqflite.dart';
import 'dart:async'; import 'dart:async';
import 'package:path/path.dart'; import 'package:path/path.dart';
@ -861,12 +859,9 @@ class DBHelper {
// } // }
// return episodes; // return episodes;
//} //}
Future<List<EpisodeBrief>> getOutdatedEpisode(int days) async { Future<List<EpisodeBrief>> getOutdatedEpisode(int deadline) async {
var dbClient = await database; var dbClient = await database;
List<EpisodeBrief> episodes = []; List<EpisodeBrief> episodes = [];
if (days > 0) {
int deadline =
DateTime.now().subtract(Duration(days: days)).millisecondsSinceEpoch;
List<Map> list = await dbClient List<Map> list = await dbClient
.rawQuery("""SELECT E.title, E.enclosure_url, E.enclosure_length, .rawQuery("""SELECT E.title, E.enclosure_url, E.enclosure_length,
E.milliseconds, P.title as feed_title, E.duration, E.explicit, E.liked, E.milliseconds, P.title as feed_title, E.duration, E.explicit, E.liked,
@ -891,7 +886,6 @@ class DBHelper {
list[x]['is_new'], list[x]['is_new'],
list[x]['skip_seconds'])); list[x]['skip_seconds']));
} }
}
return episodes; return episodes;
} }
@ -1101,26 +1095,35 @@ class DBHelper {
Future<int> saveDownloaded(String url, String id) async { Future<int> saveDownloaded(String url, String id) async {
var dbClient = await database; var dbClient = await database;
int milliseconds = DateTime.now().millisecondsSinceEpoch; int milliseconds = DateTime.now().millisecondsSinceEpoch;
int count = await dbClient.rawUpdate( int count;
await dbClient.transaction((txn) async {
count = await txn.rawUpdate(
"UPDATE Episodes SET downloaded = ?, download_date = ? WHERE enclosure_url = ?", "UPDATE Episodes SET downloaded = ?, download_date = ? WHERE enclosure_url = ?",
[id, milliseconds, url]); [id, milliseconds, url]);
});
return count; return count;
} }
Future<int> saveMediaId(String url, String path, String id, int size) async { Future<int> saveMediaId(String url, String path, String id, int size) async {
var dbClient = await database; var dbClient = await database;
int milliseconds = DateTime.now().millisecondsSinceEpoch; int milliseconds = DateTime.now().millisecondsSinceEpoch;
int count = await dbClient.rawUpdate( int count;
await dbClient.transaction((txn) async {
count = await txn.rawUpdate(
"UPDATE Episodes SET enclosure_length = ?, media_id = ?, download_date = ?, downloaded = ? WHERE enclosure_url = ?", "UPDATE Episodes SET enclosure_length = ?, media_id = ?, download_date = ?, downloaded = ? WHERE enclosure_url = ?",
[size, path, milliseconds, id, url]); [size, path, milliseconds, id, url]);
});
return count; return count;
} }
Future<int> delDownloaded(String url) async { Future<int> delDownloaded(String url) async {
var dbClient = await database; var dbClient = await database;
int count = await dbClient.rawUpdate( int count;
await dbClient.transaction((txn) async {
count = await txn.rawUpdate(
"UPDATE Episodes SET downloaded = 'ND', media_id = ? WHERE enclosure_url = ?", "UPDATE Episodes SET downloaded = 'ND', media_id = ? WHERE enclosure_url = ?",
[url, url]); [url, url]);
});
print('Deleted ' + url); print('Deleted ' + url);
return count; return count;
} }

View File

@ -225,7 +225,6 @@ class DownloadState extends ChangeNotifier {
} }
EpisodeTask episodeToTask(EpisodeBrief episode) { EpisodeTask episodeToTask(EpisodeBrief episode) {
print(_episodeTasks.first.episode.description);
return _episodeTasks return _episodeTasks
.firstWhere((task) => task.episode.enclosureUrl == episode.enclosureUrl, .firstWhere((task) => task.episode.enclosureUrl == episode.enclosureUrl,
orElse: () { orElse: () {
@ -322,8 +321,7 @@ class DownloadState extends ChangeNotifier {
} }
_removeTask(EpisodeBrief episode) { _removeTask(EpisodeBrief episode) {
_episodeTasks.removeWhere( _episodeTasks.removeWhere((element) => element.episode == episode);
(element) => element.episode.enclosureUrl == episode.enclosureUrl);
} }
_autoDelete() async { _autoDelete() async {
@ -333,11 +331,21 @@ class DownloadState extends ChangeNotifier {
if (autoDelete == 0) if (autoDelete == 0)
await autoDeleteStorage.saveInt(30); await autoDeleteStorage.saveInt(30);
else if (autoDelete > 0) { else if (autoDelete > 0) {
List<EpisodeBrief> episodes = int deadline = DateTime.now()
await dbHelper.getOutdatedEpisode(autoDelete); .subtract(Duration(days: autoDelete))
.millisecondsSinceEpoch;
List<EpisodeBrief> episodes = await dbHelper.getOutdatedEpisode(deadline);
if (episodes.length > 0) { if (episodes.length > 0) {
await Future.forEach(episodes, (episode) => delTask(episode)); await Future.forEach(
} episodes, (episode) async => await delTask(episode));
}
final tasks = await FlutterDownloader.loadTasksWithRawQuery(
query:
'SELECT * FROM task WHERE time_created < $deadline AND status = 3');
await Future.forEach(
tasks,
(task) async => FlutterDownloader.remove(
taskId: task.taskId, shouldDeleteContent: true));
} }
} }
} }

View File

@ -1,3 +1,5 @@
import 'dart:ui';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:audio_service/audio_service.dart'; import 'package:audio_service/audio_service.dart';
@ -89,5 +91,5 @@ class EpisodeBrief {
episode.enclosureUrl == enclosureUrl; episode.enclosureUrl == enclosureUrl;
@override @override
int get hashCode => enclosureUrl.hashCode + title.hashCode; int get hashCode => hashValues(enclosureUrl, title);
} }

View File

@ -1,3 +1,5 @@
import 'dart:ui';
class PodcastLocal { class PodcastLocal {
final String title; final String title;
final String imageUrl; final String imageUrl;
@ -24,5 +26,5 @@ class PodcastLocal {
podcastLocal.id == id; podcastLocal.id == id;
@override @override
int get hashCode => id.hashCode + rssUrl.hashCode; int get hashCode => hashValues(id, rssUrl);
} }