mirror of
https://github.com/stonega/tsacdop
synced 2025-02-23 14:57:52 +01:00
Fix bug hide listened mode load more broken.
This commit is contained in:
parent
b4e640bad3
commit
fc4b8a275e
@ -197,6 +197,8 @@ class _RssResultState extends State<RssResult> {
|
|||||||
!_isSubscribed
|
!_isSubscribed
|
||||||
? OutlineButton(
|
? OutlineButton(
|
||||||
highlightedBorderColor: context.accentColor,
|
highlightedBorderColor: context.accentColor,
|
||||||
|
borderSide: BorderSide(
|
||||||
|
color: context.accentColor, width: 2),
|
||||||
shape: RoundedRectangleBorder(
|
shape: RoundedRectangleBorder(
|
||||||
borderRadius: BorderRadius.circular(100.0),
|
borderRadius: BorderRadius.circular(100.0),
|
||||||
side:
|
side:
|
||||||
@ -514,30 +516,30 @@ class SearchResult extends StatelessWidget {
|
|||||||
return Container(
|
return Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
border: Border(
|
border: Border(
|
||||||
bottom: Divider.createBorderSide(context),
|
// bottom: Divider.createBorderSide(context),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
ListTile(
|
ListTile(
|
||||||
contentPadding: EdgeInsets.symmetric(horizontal: 20.0),
|
contentPadding: EdgeInsets.fromLTRB(20, 10, 20, 10),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
onSelect(onlinePodcast);
|
onSelect(onlinePodcast);
|
||||||
},
|
},
|
||||||
leading: ClipRRect(
|
leading: ClipRRect(
|
||||||
borderRadius: BorderRadius.all(Radius.circular(20.0)),
|
borderRadius: BorderRadius.circular(25.0),
|
||||||
child: CachedNetworkImage(
|
child: CachedNetworkImage(
|
||||||
height: 40.0,
|
height: 50.0,
|
||||||
width: 40.0,
|
width: 50.0,
|
||||||
fit: BoxFit.fitWidth,
|
fit: BoxFit.fitWidth,
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
imageUrl: onlinePodcast.image,
|
imageUrl: onlinePodcast.image,
|
||||||
progressIndicatorBuilder: (context, url, downloadProgress) =>
|
progressIndicatorBuilder: (context, url, downloadProgress) =>
|
||||||
Container(
|
Container(
|
||||||
height: 40,
|
height: 50,
|
||||||
width: 40,
|
width: 50,
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
color: context.primaryColorDark,
|
color: context.primaryColorDark,
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
@ -548,8 +550,8 @@ class SearchResult extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
errorWidget: (context, url, error) => Container(
|
errorWidget: (context, url, error) => Container(
|
||||||
width: 40,
|
width: 50,
|
||||||
height: 40,
|
height: 50,
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
color: context.primaryColorDark,
|
color: context.primaryColorDark,
|
||||||
child: Icon(Icons.error)),
|
child: Icon(Icons.error)),
|
||||||
@ -560,6 +562,7 @@ class SearchResult extends StatelessWidget {
|
|||||||
trailing: !isSubscribed
|
trailing: !isSubscribed
|
||||||
? OutlineButton(
|
? OutlineButton(
|
||||||
highlightedBorderColor: context.accentColor,
|
highlightedBorderColor: context.accentColor,
|
||||||
|
borderSide: BorderSide(color: context.accentColor),
|
||||||
shape: RoundedRectangleBorder(
|
shape: RoundedRectangleBorder(
|
||||||
borderRadius: BorderRadius.circular(100.0),
|
borderRadius: BorderRadius.circular(100.0),
|
||||||
side: BorderSide(color: context.accentColor)),
|
side: BorderSide(color: context.accentColor)),
|
||||||
@ -807,6 +810,9 @@ class _SearchResultDetailState extends State<SearchResultDetail>
|
|||||||
? OutlineButton(
|
? OutlineButton(
|
||||||
highlightedBorderColor:
|
highlightedBorderColor:
|
||||||
context.accentColor,
|
context.accentColor,
|
||||||
|
borderSide: BorderSide(
|
||||||
|
color: context.accentColor,
|
||||||
|
width: 2),
|
||||||
shape: RoundedRectangleBorder(
|
shape: RoundedRectangleBorder(
|
||||||
borderRadius:
|
borderRadius:
|
||||||
BorderRadius.circular(100.0),
|
BorderRadius.circular(100.0),
|
||||||
|
@ -292,15 +292,10 @@ class DBHelper {
|
|||||||
var dbClient = await database;
|
var dbClient = await database;
|
||||||
var i = 0;
|
var i = 0;
|
||||||
List<Map> list = await dbClient.rawQuery(
|
List<Map> list = await dbClient.rawQuery(
|
||||||
"SELECT listen_time FROM PlayHistory WHERE enclosure_url = ?", [url]);
|
"SELECT SUM(listen_time) FROM PlayHistory WHERE enclosure_url = ?",
|
||||||
if (list.length == 0) {
|
[url]);
|
||||||
return 0;
|
i = list.first['SUM(listen_time)'];
|
||||||
} else {
|
return i ?? 0;
|
||||||
for (var element in list) {
|
|
||||||
i += element['listen_time'];
|
|
||||||
}
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<int> markNotListened(String url) async {
|
Future<int> markNotListened(String url) async {
|
||||||
@ -596,143 +591,254 @@ class DBHelper {
|
|||||||
var dbClient = await database;
|
var dbClient = await database;
|
||||||
var episodes = <EpisodeBrief>[];
|
var episodes = <EpisodeBrief>[];
|
||||||
var list = <Map>[];
|
var list = <Map>[];
|
||||||
if (count == -1) {
|
if (hideListened) {
|
||||||
switch (filter) {
|
if (count == -1) {
|
||||||
case Filter.all:
|
switch (filter) {
|
||||||
list = await dbClient
|
case Filter.all:
|
||||||
.rawQuery("""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
||||||
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
WHERE P.id = ? ORDER BY E.milliseconds ASC""", [id]);
|
LEFT JOIN PlayHistory H ON E.enclosure_url = H.enclosure_url
|
||||||
break;
|
WHERE P.id = ? AND H.SUM(listen_time) > 0 ORDER BY E.milliseconds ASC""",
|
||||||
case Filter.liked:
|
[id]);
|
||||||
list = await dbClient
|
break;
|
||||||
.rawQuery("""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
case Filter.liked:
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
||||||
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
WHERE P.id = ? AND E.liked = 1 ORDER BY E.milliseconds ASC""", [id]);
|
WHERE P.id = ? AND E.liked = 1 ORDER BY E.milliseconds ASC""", [id]);
|
||||||
break;
|
break;
|
||||||
case Filter.downloaded:
|
case Filter.downloaded:
|
||||||
list = await dbClient.rawQuery(
|
list = await dbClient.rawQuery(
|
||||||
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
||||||
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
WHERE P.id = ? AND E.media_id != E.enclosure_url ORDER BY E.milliseconds ASC""",
|
WHERE P.id = ? AND E.media_id != E.enclosure_url ORDER BY E.milliseconds ASC""",
|
||||||
[id]);
|
[id]);
|
||||||
break;
|
break;
|
||||||
case Filter.search:
|
case Filter.search:
|
||||||
list = await dbClient.rawQuery(
|
list = await dbClient.rawQuery(
|
||||||
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
||||||
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
WHERE P.id = ? AND E.title LIKE ? ORDER BY E.milliseconds ASC""",
|
WHERE P.id = ? AND E.title LIKE ? ORDER BY E.milliseconds ASC""",
|
||||||
[id, '%$query%']);
|
[id, '%$query%']);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
}
|
||||||
|
} else if (reverse) {
|
||||||
|
switch (filter) {
|
||||||
|
case Filter.all:
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
||||||
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
|
LEFT JOIN PlayHistory H ON E.enclosure_url = H.enclosure_url
|
||||||
|
WHERE P.id = ? GROUP BY E.enclosure_url HAVING SUM(H.listen_time) is null
|
||||||
|
OR SUM(H.listen_time) = 0 ORDER BY E.milliseconds ASC LIMIT ?""",
|
||||||
|
[id, count]);
|
||||||
|
break;
|
||||||
|
case Filter.liked:
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
||||||
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
|
LEFT JOIN PlayHistory H ON E.enclosure_url = H.enclosure_url
|
||||||
|
WHERE P.id = ? AND E.liked = 1 GROUP BY E.enclosure_url HAVING SUM(H.listen_time) is null
|
||||||
|
OR SUM(H.listen_time) = 0 ORDER BY E.milliseconds ASC LIMIT ?""",
|
||||||
|
[id, count]);
|
||||||
|
break;
|
||||||
|
case Filter.downloaded:
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
||||||
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
|
LEFT JOIN PlayHistory H ON E.enclosure_url = H.enclosure_url
|
||||||
|
WHERE P.id = ? AND E.enclosure_url != E.media_id
|
||||||
|
GROUP BY E.enclosure_url HAVING SUM(H.listen_time) is null
|
||||||
|
OR SUM(H.listen_time) = 0 ORDER BY E.milliseconds ASC LIMIT ?""",
|
||||||
|
[id, count]);
|
||||||
|
break;
|
||||||
|
case Filter.search:
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
||||||
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
|
LEFT JOIN PlayHistory H ON E.enclosure_url = H.enclosure_url
|
||||||
|
WHERE P.id = ? AND E.title LIKE ? GROUP BY E.enclosure_url HAVING SUM(H.listen_time) is null
|
||||||
|
OR SUM(H.listen_time) = 0 ORDER BY E.milliseconds ASC LIMIT ?""",
|
||||||
|
[id, '%$query%', count]);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch (filter) {
|
||||||
|
case Filter.all:
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.is_new,
|
||||||
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
|
LEFT JOIN PlayHistory H ON E.enclosure_url = H.enclosure_url
|
||||||
|
WHERE P.id = ? GROUP BY E.enclosure_url HAVING SUM(H.listen_time) is null
|
||||||
|
OR SUM(H.listen_time) = 0 ORDER BY E.milliseconds DESC LIMIT ?""",
|
||||||
|
[id, count]);
|
||||||
|
break;
|
||||||
|
case Filter.liked:
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.is_new,
|
||||||
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
|
LEFT JOIN PlayHistory H ON E.enclosure_url = H.enclosure_url
|
||||||
|
WHERE P.id = ? AND E.liked = 1 GROUP BY E.enclosure_url HAVING SUM(H.listen_time) is null
|
||||||
|
OR SUM(H.listen_time) = 0 ORDER BY E.milliseconds DESC LIMIT ?""",
|
||||||
|
[id, count]);
|
||||||
|
break;
|
||||||
|
case Filter.downloaded:
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.is_new,
|
||||||
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
|
LEFT JOIN PlayHistory H ON E.enclosure_url = H.enclosure_url
|
||||||
|
WHERE P.id = ? AND E.enclosure_url != E.media_id GROUP BY E.enclosure_url HAVING SUM(H.listen_time) is null
|
||||||
|
OR SUM(H.listen_time) = 0 ORDER BY E.milliseconds DESC LIMIT ?""",
|
||||||
|
[id, count]);
|
||||||
|
break;
|
||||||
|
case Filter.search:
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.is_new,
|
||||||
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
|
LEFT JOIN PlayHistory H ON E.enclosure_url = H.enclosure_url
|
||||||
|
WHERE P.id = ? AND E.title LIKE ? GROUP BY E.enclosure_url HAVING SUM(H.listen_time) is null
|
||||||
|
OR SUM(H.listen_time) = 0 ORDER BY E.milliseconds DESC LIMIT ?""",
|
||||||
|
[id, '%$query%', count]);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (reverse) {
|
} else {
|
||||||
switch (filter) {
|
if (count == -1) {
|
||||||
case Filter.all:
|
switch (filter) {
|
||||||
list = await dbClient
|
case Filter.all:
|
||||||
.rawQuery("""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
||||||
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
|
WHERE P.id = ? ORDER BY E.milliseconds ASC""", [id]);
|
||||||
|
break;
|
||||||
|
case Filter.liked:
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
||||||
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
|
WHERE P.id = ? AND E.liked = 1 ORDER BY E.milliseconds ASC""", [id]);
|
||||||
|
break;
|
||||||
|
case Filter.downloaded:
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
||||||
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
|
WHERE P.id = ? AND E.media_id != E.enclosure_url ORDER BY E.milliseconds ASC""",
|
||||||
|
[id]);
|
||||||
|
break;
|
||||||
|
case Filter.search:
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
||||||
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
|
WHERE P.id = ? AND E.title LIKE ? ORDER BY E.milliseconds ASC""",
|
||||||
|
[id, '%$query%']);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
} else if (reverse) {
|
||||||
|
switch (filter) {
|
||||||
|
case Filter.all:
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
||||||
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
WHERE P.id = ? ORDER BY E.milliseconds ASC LIMIT ?""", [id, count]);
|
WHERE P.id = ? ORDER BY E.milliseconds ASC LIMIT ?""", [id, count]);
|
||||||
break;
|
break;
|
||||||
case Filter.liked:
|
case Filter.liked:
|
||||||
list = await dbClient.rawQuery(
|
list = await dbClient.rawQuery(
|
||||||
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
||||||
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
WHERE P.id = ? AND E.liked = 1 ORDER BY E.milliseconds ASC LIMIT ?""",
|
WHERE P.id = ? AND E.liked = 1 ORDER BY E.milliseconds ASC LIMIT ?""",
|
||||||
[id, count]);
|
[id, count]);
|
||||||
break;
|
break;
|
||||||
case Filter.downloaded:
|
case Filter.downloaded:
|
||||||
list = await dbClient.rawQuery(
|
list = await dbClient.rawQuery(
|
||||||
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
||||||
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
WHERE P.id = ? AND E.enclosure_url != E.media_id ORDER BY E.milliseconds ASC LIMIT ?""",
|
WHERE P.id = ? AND E.enclosure_url != E.media_id ORDER BY E.milliseconds ASC LIMIT ?""",
|
||||||
[id, count]);
|
[id, count]);
|
||||||
break;
|
break;
|
||||||
case Filter.search:
|
case Filter.search:
|
||||||
list = await dbClient.rawQuery(
|
list = await dbClient.rawQuery(
|
||||||
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length,
|
||||||
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
WHERE P.id = ? AND E.title LIKE ? ORDER BY E.milliseconds ASC LIMIT ?""",
|
WHERE P.id = ? AND E.title LIKE ? ORDER BY E.milliseconds ASC LIMIT ?""",
|
||||||
[id, '%$query%', count]);
|
[id, '%$query%', count]);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch (filter) {
|
switch (filter) {
|
||||||
case Filter.all:
|
case Filter.all:
|
||||||
list = await dbClient.rawQuery(
|
list = await dbClient.rawQuery(
|
||||||
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.is_new,
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.is_new,
|
||||||
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
WHERE P.id = ? ORDER BY E.milliseconds DESC LIMIT ?""", [id, count]);
|
WHERE P.id = ? ORDER BY E.milliseconds DESC LIMIT ?""", [id, count]);
|
||||||
break;
|
break;
|
||||||
case Filter.liked:
|
case Filter.liked:
|
||||||
list = await dbClient.rawQuery(
|
list = await dbClient.rawQuery(
|
||||||
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.is_new,
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.is_new,
|
||||||
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
WHERE P.id = ? AND E.liked = 1 ORDER BY E.milliseconds DESC LIMIT ?""",
|
WHERE P.id = ? AND E.liked = 1 ORDER BY E.milliseconds DESC LIMIT ?""",
|
||||||
[id, count]);
|
[id, count]);
|
||||||
break;
|
break;
|
||||||
case Filter.downloaded:
|
case Filter.downloaded:
|
||||||
list = await dbClient.rawQuery(
|
list = await dbClient.rawQuery(
|
||||||
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.is_new,
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.is_new,
|
||||||
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
WHERE P.id = ? AND E.enclosure_url != E.media_id ORDER BY E.milliseconds DESC LIMIT ?""",
|
WHERE P.id = ? AND E.enclosure_url != E.media_id ORDER BY E.milliseconds DESC LIMIT ?""",
|
||||||
[id, count]);
|
[id, count]);
|
||||||
break;
|
break;
|
||||||
case Filter.search:
|
case Filter.search:
|
||||||
list = await dbClient.rawQuery(
|
list = await dbClient.rawQuery(
|
||||||
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.is_new,
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.is_new,
|
||||||
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
E.milliseconds, P.imagePath, P.title as feedTitle, E.duration, E.explicit,
|
||||||
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
WHERE P.id = ? AND E.title LIKE ? ORDER BY E.milliseconds DESC LIMIT ?""",
|
WHERE P.id = ? AND E.title LIKE ? ORDER BY E.milliseconds DESC LIMIT ?""",
|
||||||
[id, '%$query%', count]);
|
[id, '%$query%', count]);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (list.isNotEmpty) {
|
if (list.isNotEmpty) {
|
||||||
if (!hideListened) {
|
for (var i in list) {
|
||||||
for (var i in list) {
|
episodes.add(EpisodeBrief(
|
||||||
episodes.add(EpisodeBrief(
|
i['title'],
|
||||||
i['title'],
|
i['enclosure_url'],
|
||||||
i['enclosure_url'],
|
i['enclosure_length'],
|
||||||
i['enclosure_length'],
|
i['milliseconds'],
|
||||||
i['milliseconds'],
|
i['feedTitle'],
|
||||||
i['feedTitle'],
|
i['primaryColor'],
|
||||||
i['primaryColor'],
|
i['duration'],
|
||||||
i['duration'],
|
i['explicit'],
|
||||||
i['explicit'],
|
i['imagePath'],
|
||||||
i['imagePath'],
|
i['is_new']));
|
||||||
i['is_new']));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (var i in list) {
|
|
||||||
var listened = await isListened(i['enclosure_url']);
|
|
||||||
if (listened == 0) {
|
|
||||||
episodes.add(EpisodeBrief(
|
|
||||||
i['title'],
|
|
||||||
i['enclosure_url'],
|
|
||||||
i['enclosure_length'],
|
|
||||||
i['milliseconds'],
|
|
||||||
i['feedTitle'],
|
|
||||||
i['primaryColor'],
|
|
||||||
i['duration'],
|
|
||||||
i['explicit'],
|
|
||||||
i['imagePath'],
|
|
||||||
i['is_new']));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return episodes;
|
return episodes;
|
||||||
@ -804,13 +910,65 @@ class DBHelper {
|
|||||||
var dbClient = await database;
|
var dbClient = await database;
|
||||||
var episodes = <EpisodeBrief>[];
|
var episodes = <EpisodeBrief>[];
|
||||||
var list = <Map>[];
|
var list = <Map>[];
|
||||||
list = await dbClient.rawQuery(
|
if (hideListened) {
|
||||||
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.is_new,
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.is_new,
|
||||||
|
E.milliseconds, P.title as feed_title, E.duration, E.explicit,
|
||||||
|
P.imagePath, P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
|
LEFT JOIN PlayHistory H ON E.enclosure_url = H.enclosure_url
|
||||||
|
GROUP BY E.enclosure_url HAVING SUM(H.listen_time) is null
|
||||||
|
OR SUM(H.listen_time) = 0 ORDER BY E.milliseconds DESC LIMIT ? """,
|
||||||
|
[top]);
|
||||||
|
} else {
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.is_new,
|
||||||
E.milliseconds, P.title as feed_title, E.duration, E.explicit,
|
E.milliseconds, P.title as feed_title, E.duration, E.explicit,
|
||||||
P.imagePath, P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
P.imagePath, P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
ORDER BY E.milliseconds DESC LIMIT ? """, [top]);
|
ORDER BY E.milliseconds DESC LIMIT ? """, [top]);
|
||||||
|
}
|
||||||
if (list.isNotEmpty) {
|
if (list.isNotEmpty) {
|
||||||
if (!hideListened) {
|
for (var i in list) {
|
||||||
|
episodes.add(EpisodeBrief(
|
||||||
|
i['title'],
|
||||||
|
i['enclosure_url'],
|
||||||
|
i['enclosure_length'],
|
||||||
|
i['milliseconds'],
|
||||||
|
i['feedTitle'],
|
||||||
|
i['primaryColor'],
|
||||||
|
i['duration'],
|
||||||
|
i['explicit'],
|
||||||
|
i['imagePath'],
|
||||||
|
i['is_new']));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return episodes;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<EpisodeBrief>> getGroupRssItem(int top, List<String> group,
|
||||||
|
{bool hideListened = false}) async {
|
||||||
|
var dbClient = await database;
|
||||||
|
var episodes = <EpisodeBrief>[];
|
||||||
|
if (group.length > 0) {
|
||||||
|
var s = group.map<String>((e) => "'$e'").toList();
|
||||||
|
var list = <Map>[];
|
||||||
|
if (hideListened) {
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.is_new,
|
||||||
|
E.milliseconds, P.title as feed_title, E.duration, E.explicit,
|
||||||
|
P.imagePath, P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
|
LEFT JOIN PlayHistory H ON E.enclosure_url = H.enclosure_url
|
||||||
|
WHERE P.id in (${s.join(',')}) GROUP BY E.enclosure_url HAVING SUM(H.listen_time) is null
|
||||||
|
OR SUM(H.listen_time) = 0 ORDER BY E.milliseconds DESC LIMIT ? """,
|
||||||
|
[top]);
|
||||||
|
} else {
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.is_new,
|
||||||
|
E.milliseconds, P.title as feed_title, E.duration, E.explicit,
|
||||||
|
P.imagePath, P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
|
WHERE P.id in (${s.join(',')})
|
||||||
|
ORDER BY E.milliseconds DESC LIMIT ? """, [top]);
|
||||||
|
}
|
||||||
|
if (list.isNotEmpty) {
|
||||||
for (var i in list) {
|
for (var i in list) {
|
||||||
episodes.add(EpisodeBrief(
|
episodes.add(EpisodeBrief(
|
||||||
i['title'],
|
i['title'],
|
||||||
@ -824,73 +982,6 @@ class DBHelper {
|
|||||||
i['imagePath'],
|
i['imagePath'],
|
||||||
i['is_new']));
|
i['is_new']));
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
for (var i in list) {
|
|
||||||
var listened = await isListened(i['enclosure_url']);
|
|
||||||
if (listened == 0) {
|
|
||||||
episodes.add(EpisodeBrief(
|
|
||||||
i['title'],
|
|
||||||
i['enclosure_url'],
|
|
||||||
i['enclosure_length'],
|
|
||||||
i['milliseconds'],
|
|
||||||
i['feedTitle'],
|
|
||||||
i['primaryColor'],
|
|
||||||
i['duration'],
|
|
||||||
i['explicit'],
|
|
||||||
i['imagePath'],
|
|
||||||
i['is_new']));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return episodes;
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<List<EpisodeBrief>> getGroupRssItem(int top, List<String> group,
|
|
||||||
{bool hideListened = false}) async {
|
|
||||||
var dbClient = await database;
|
|
||||||
var episodes = <EpisodeBrief>[];
|
|
||||||
if (group.length > 0) {
|
|
||||||
var s = group.map<String>((e) => "'$e'").toList();
|
|
||||||
List<Map> list = await dbClient.rawQuery(
|
|
||||||
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.is_new,
|
|
||||||
E.milliseconds, P.title as feed_title, E.duration, E.explicit,
|
|
||||||
P.imagePath, P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
|
||||||
WHERE P.id in (${s.join(',')})
|
|
||||||
ORDER BY E.milliseconds DESC LIMIT ? """, [top]);
|
|
||||||
if (list.isNotEmpty) {
|
|
||||||
if (!hideListened) {
|
|
||||||
for (var i in list) {
|
|
||||||
episodes.add(EpisodeBrief(
|
|
||||||
i['title'],
|
|
||||||
i['enclosure_url'],
|
|
||||||
i['enclosure_length'],
|
|
||||||
i['milliseconds'],
|
|
||||||
i['feedTitle'],
|
|
||||||
i['primaryColor'],
|
|
||||||
i['duration'],
|
|
||||||
i['explicit'],
|
|
||||||
i['imagePath'],
|
|
||||||
i['is_new']));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (var i in list) {
|
|
||||||
var listened = await isListened(i['enclosure_url']);
|
|
||||||
if (listened == 0) {
|
|
||||||
episodes.add(EpisodeBrief(
|
|
||||||
i['title'],
|
|
||||||
i['enclosure_url'],
|
|
||||||
i['enclosure_length'],
|
|
||||||
i['milliseconds'],
|
|
||||||
i['feedTitle'],
|
|
||||||
i['primaryColor'],
|
|
||||||
i['duration'],
|
|
||||||
i['explicit'],
|
|
||||||
i['imagePath'],
|
|
||||||
i['is_new']));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return episodes;
|
return episodes;
|
||||||
@ -952,66 +1043,77 @@ class DBHelper {
|
|||||||
var dbClient = await database;
|
var dbClient = await database;
|
||||||
var episodes = <EpisodeBrief>[];
|
var episodes = <EpisodeBrief>[];
|
||||||
List<Map> list;
|
List<Map> list;
|
||||||
//Ordered by date
|
if (hideListened) {
|
||||||
if (mode == 0) {
|
if (mode == 0) {
|
||||||
list = await dbClient.rawQuery(
|
list = await dbClient.rawQuery(
|
||||||
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.download_date, E.is_new,
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.download_date, E.is_new,
|
||||||
|
E.milliseconds, P.title as feed_title, E.duration, E.explicit,
|
||||||
|
P.imagePath, P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
|
LEFT JOIN PlayHistory H ON E.enclosure_url = H.enclosure_url
|
||||||
|
WHERE E.enclosure_url != E.media_id GROUP BY E.enclosure_url HAVING SUM(H.listen_time) is null
|
||||||
|
OR SUM(H.listen_time) = 0 ORDER BY E.download_date DESC""",
|
||||||
|
);
|
||||||
|
} else if (mode == 1) {
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.download_date,E.is_new,
|
||||||
|
E.milliseconds, P.title as feed_title, E.duration, E.explicit,
|
||||||
|
P.imagePath, P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
|
LEFT JOIN PlayHistory H ON E.enclosure_url = H.enclosure_url
|
||||||
|
WHERE E.enclosure_url != E.media_id GROUP BY E.enclosure_url HAVING SUM(H.listen_time) is null
|
||||||
|
OR SUM(H.listen_time) = 0 ORDER BY E.download_date ASC""",
|
||||||
|
);
|
||||||
|
} else if (mode == 2) {
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.download_date,E.is_new,
|
||||||
|
E.milliseconds, P.title as feed_title, E.duration, E.explicit,
|
||||||
|
P.imagePath, P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
|
LEFT JOIN PlayHistory H ON E.enclosure_url = H.enclosure_url
|
||||||
|
WHERE E.enclosure_url != E.media_id GROUP BY E.enclosure_url HAVING SUM(H.listen_time) is null
|
||||||
|
OR SUM(H.listen_time) = 0 ORDER BY E.enclosure_length DESC""",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else //Ordered by date
|
||||||
|
{
|
||||||
|
if (mode == 0) {
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.download_date, E.is_new,
|
||||||
E.milliseconds, P.title as feed_title, E.duration, E.explicit,
|
E.milliseconds, P.title as feed_title, E.duration, E.explicit,
|
||||||
P.imagePath, P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
P.imagePath, P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
WHERE E.enclosure_url != E.media_id
|
WHERE E.enclosure_url != E.media_id
|
||||||
ORDER BY E.download_date DESC""",
|
ORDER BY E.download_date DESC""",
|
||||||
);
|
);
|
||||||
} else if (mode == 1) {
|
} else if (mode == 1) {
|
||||||
list = await dbClient.rawQuery(
|
list = await dbClient.rawQuery(
|
||||||
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.download_date,E.is_new,
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.download_date,E.is_new,
|
||||||
E.milliseconds, P.title as feed_title, E.duration, E.explicit,
|
E.milliseconds, P.title as feed_title, E.duration, E.explicit,
|
||||||
P.imagePath, P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
P.imagePath, P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
WHERE E.enclosure_url != E.media_id
|
WHERE E.enclosure_url != E.media_id
|
||||||
ORDER BY E.download_date ASC""",
|
ORDER BY E.download_date ASC""",
|
||||||
);
|
);
|
||||||
} else if (mode == 2) {
|
} else if (mode == 2) {
|
||||||
list = await dbClient.rawQuery(
|
list = await dbClient.rawQuery(
|
||||||
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.download_date,E.is_new,
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.download_date,E.is_new,
|
||||||
E.milliseconds, P.title as feed_title, E.duration, E.explicit,
|
E.milliseconds, P.title as feed_title, E.duration, E.explicit,
|
||||||
P.imagePath, P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
P.imagePath, P.primaryColor FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
WHERE E.enclosure_url != E.media_id
|
WHERE E.enclosure_url != E.media_id
|
||||||
ORDER BY E.enclosure_length DESC""",
|
ORDER BY E.enclosure_length DESC""",
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (list.isNotEmpty) {
|
if (list.isNotEmpty) {
|
||||||
if (!hideListened) {
|
for (var i in list) {
|
||||||
for (var i in list) {
|
episodes.add(EpisodeBrief(
|
||||||
episodes.add(EpisodeBrief(
|
i['title'],
|
||||||
i['title'],
|
i['enclosure_url'],
|
||||||
i['enclosure_url'],
|
i['enclosure_length'],
|
||||||
i['enclosure_length'],
|
i['milliseconds'],
|
||||||
i['milliseconds'],
|
i['feedTitle'],
|
||||||
i['feedTitle'],
|
i['primaryColor'],
|
||||||
i['primaryColor'],
|
i['duration'],
|
||||||
i['duration'],
|
i['explicit'],
|
||||||
i['explicit'],
|
i['imagePath'],
|
||||||
i['imagePath'],
|
i['is_new'],
|
||||||
i['is_new'],
|
downloadDate: i['download_date']));
|
||||||
downloadDate: i['download_date']));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (var i in list) {
|
|
||||||
var listened = await isListened(i['enclosure_url']);
|
|
||||||
if (listened == 0) {
|
|
||||||
episodes.add(EpisodeBrief(
|
|
||||||
i['title'],
|
|
||||||
i['enclosure_url'],
|
|
||||||
i['enclosure_length'],
|
|
||||||
i['milliseconds'],
|
|
||||||
i['feedTitle'],
|
|
||||||
i['primaryColor'],
|
|
||||||
i['duration'],
|
|
||||||
i['explicit'],
|
|
||||||
i['imagePath'],
|
|
||||||
i['is_new'],
|
|
||||||
downloadDate: i['download_date']));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return episodes;
|
return episodes;
|
||||||
@ -1054,7 +1156,7 @@ class DBHelper {
|
|||||||
return episodes;
|
return episodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
removeGroupNewMark(List<String> group) async {
|
Future<void> removeGroupNewMark(List<String> group) async {
|
||||||
var dbClient = await database;
|
var dbClient = await database;
|
||||||
if (group.length > 0) {
|
if (group.length > 0) {
|
||||||
var s = group.map<String>((e) => "'$e'").toList();
|
var s = group.map<String>((e) => "'$e'").toList();
|
||||||
@ -1065,7 +1167,7 @@ class DBHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
removeEpisodeNewMark(String url) async {
|
Future<void> removeEpisodeNewMark(String url) async {
|
||||||
var dbClient = await database;
|
var dbClient = await database;
|
||||||
await dbClient.transaction((txn) async {
|
await dbClient.transaction((txn) async {
|
||||||
await txn.rawUpdate(
|
await txn.rawUpdate(
|
||||||
@ -1079,51 +1181,52 @@ class DBHelper {
|
|||||||
var dbClient = await database;
|
var dbClient = await database;
|
||||||
var episodes = <EpisodeBrief>[];
|
var episodes = <EpisodeBrief>[];
|
||||||
var list = <Map>[];
|
var list = <Map>[];
|
||||||
if (sortBy == 0) {
|
if (hideListened) {
|
||||||
list = await dbClient.rawQuery(
|
if (sortBy == 0) {
|
||||||
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.milliseconds, P.imagePath,
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.milliseconds, P.imagePath,
|
||||||
|
P.title as feed_title, E.duration, E.explicit, P.primaryColor, E.is_new
|
||||||
|
FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
|
LEFT JOIN PlayHistory H ON E.enclosure_url = H.enclosure_url
|
||||||
|
WHERE E.liked = 1 GROUP BY E.enclosure_url HAVING SUM(H.listen_time) is null
|
||||||
|
OR SUM(H.listen_time) = 0 ORDER BY E.milliseconds DESC LIMIT ?""", [i]);
|
||||||
|
} else {
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.milliseconds, P.imagePath,
|
||||||
|
P.title as feed_title, E.duration, E.explicit, P.primaryColor, E.is_new
|
||||||
|
FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
|
LEFT JOIN PlayHistory H ON E.enclosure_url = H.enclosure_url
|
||||||
|
WHERE E.liked = 1 GROUP BY E.enclosure_url HAVING SUM(H.listen_time) is null
|
||||||
|
OR SUM(H.listen_time) = 0 ORDER BY E.liked_date DESC LIMIT ?""", [i]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (sortBy == 0) {
|
||||||
|
list = await dbClient.rawQuery(
|
||||||
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.milliseconds, P.imagePath,
|
||||||
P.title as feed_title, E.duration, E.explicit, P.primaryColor, E.is_new
|
P.title as feed_title, E.duration, E.explicit, P.primaryColor, E.is_new
|
||||||
FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
WHERE E.liked = 1 ORDER BY E.milliseconds DESC LIMIT ?""", [i]);
|
WHERE E.liked = 1 ORDER BY E.milliseconds DESC LIMIT ?""", [i]);
|
||||||
} else {
|
} else {
|
||||||
list = await dbClient.rawQuery(
|
list = await dbClient.rawQuery(
|
||||||
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.milliseconds, P.imagePath,
|
"""SELECT E.title, E.enclosure_url, E.enclosure_length, E.milliseconds, P.imagePath,
|
||||||
P.title as feed_title, E.duration, E.explicit, P.primaryColor, E.is_new
|
P.title as feed_title, E.duration, E.explicit, P.primaryColor, E.is_new
|
||||||
FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id
|
||||||
WHERE E.liked = 1 ORDER BY E.liked_date DESC LIMIT ?""", [i]);
|
WHERE E.liked = 1 ORDER BY E.liked_date DESC LIMIT ?""", [i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (list.isNotEmpty) {
|
if (list.isNotEmpty) {
|
||||||
if (!hideListened) {
|
for (var i in list) {
|
||||||
for (var i in list) {
|
episodes.add(EpisodeBrief(
|
||||||
episodes.add(EpisodeBrief(
|
i['title'],
|
||||||
i['title'],
|
i['enclosure_url'],
|
||||||
i['enclosure_url'],
|
i['enclosure_length'],
|
||||||
i['enclosure_length'],
|
i['milliseconds'],
|
||||||
i['milliseconds'],
|
i['feedTitle'],
|
||||||
i['feedTitle'],
|
i['primaryColor'],
|
||||||
i['primaryColor'],
|
i['duration'],
|
||||||
i['duration'],
|
i['explicit'],
|
||||||
i['explicit'],
|
i['imagePath'],
|
||||||
i['imagePath'],
|
i['is_new']));
|
||||||
i['is_new']));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (var i in list) {
|
|
||||||
var listened = await isListened(i['enclosure_url']);
|
|
||||||
if (listened == 0) {
|
|
||||||
episodes.add(EpisodeBrief(
|
|
||||||
i['title'],
|
|
||||||
i['enclosure_url'],
|
|
||||||
i['enclosure_length'],
|
|
||||||
i['milliseconds'],
|
|
||||||
i['feedTitle'],
|
|
||||||
i['primaryColor'],
|
|
||||||
i['duration'],
|
|
||||||
i['explicit'],
|
|
||||||
i['imagePath'],
|
|
||||||
i['is_new']));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -695,7 +695,7 @@ class _PodcastDetailState extends State<PodcastDetail> {
|
|||||||
setState(() => _loadMore = true);
|
setState(() => _loadMore = true);
|
||||||
}
|
}
|
||||||
await Future.delayed(Duration(seconds: 3));
|
await Future.delayed(Duration(seconds: 3));
|
||||||
if (mounted) {
|
if (mounted && _loadMore) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_top = _top + 36;
|
_top = _top + 36;
|
||||||
_loadMore = false;
|
_loadMore = false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user