1
1
import 'dart:io' ;
2
+
2
3
import 'package:drift/drift.dart' ;
3
4
import 'package:flutter/foundation.dart' hide Category;
4
5
import 'package:iptv_player/drift_flutter.dart' ;
5
6
import 'package:iptv_player/models/category.dart' ;
7
+ import 'package:iptv_player/models/content_type.dart' ;
6
8
import 'package:iptv_player/models/live_stream.dart' ;
7
9
import 'package:iptv_player/models/series.dart' ;
8
10
import 'package:iptv_player/models/vod_streams.dart' ;
@@ -189,6 +191,22 @@ class Episodes extends Table {
189
191
RealColumn get rating => real ().nullable ()();
190
192
}
191
193
194
+ @DataClassName ('WatchHistoriesData' )
195
+ class WatchHistories extends Table {
196
+ TextColumn get playlistId => text ()();
197
+ IntColumn get contentType => intEnum <ContentType >()();
198
+ TextColumn get streamId => text ()();
199
+ TextColumn get seriesId => text ().nullable ()();
200
+ IntColumn get watchDuration => integer ().nullable ()();
201
+ IntColumn get totalDuration => integer ().nullable ()();
202
+ DateTimeColumn get lastWatched => dateTime ()();
203
+ TextColumn get imagePath => text ().nullable ()();
204
+ TextColumn get title => text ()();
205
+
206
+ @override
207
+ Set <Column > get primaryKey => {playlistId, streamId};
208
+ }
209
+
192
210
@DriftDatabase (
193
211
tables: [
194
212
Playlists ,
@@ -201,14 +219,15 @@ class Episodes extends Table {
201
219
SeriesInfos ,
202
220
Seasons ,
203
221
Episodes ,
222
+ WatchHistories ,
204
223
],
205
224
)
206
225
class AppDatabase extends _$AppDatabase {
207
226
AppDatabase ([QueryExecutor ? e])
208
227
: super (
209
228
e ??
210
229
driftDatabase (
211
- name: 'todo-app ' ,
230
+ name: 'another-iptv-player ' ,
212
231
native : const DriftNativeOptions (
213
232
databaseDirectory: getApplicationSupportDirectory,
214
233
),
@@ -227,7 +246,7 @@ class AppDatabase extends _$AppDatabase {
227
246
),
228
247
);
229
248
@override
230
- int get schemaVersion => 8 ;
249
+ int get schemaVersion => 1 ;
231
250
// === PLAYLIST İŞLEMLERİ ===
232
251
233
252
// Playlist oluştur
@@ -985,6 +1004,26 @@ class AppDatabase extends _$AppDatabase {
985
1004
.get ();
986
1005
}
987
1006
1007
+ Future <EpisodesData ?> findEpisodesById (String episodeId, String playlistId) {
1008
+ return (select (episodes)..where (
1009
+ (tbl) =>
1010
+ tbl.playlistId.equals (playlistId) &
1011
+ tbl.episodeId.equals (episodeId),
1012
+ ))
1013
+ .getSingleOrNull ();
1014
+ }
1015
+
1016
+ Future <VodStream ?> findMovieById (String streamId, String playlistId) async {
1017
+ var vodStreamData = await (select (vodStreams)..where (
1018
+ (tbl) =>
1019
+ tbl.playlistId.equals (playlistId) &
1020
+ tbl.streamId.equals (streamId),
1021
+ ))
1022
+ .getSingleOrNull ();
1023
+
1024
+ return vodStreamData != null ? VodStream .fromDriftVodStream (vodStreamData) : null ;
1025
+ }
1026
+
988
1027
// Clear operations
989
1028
Future <int > clearSeriesData (String seriesId, String playlistId) async {
990
1029
await (delete (episodes)..where (
@@ -1066,44 +1105,25 @@ class AppDatabase extends _$AppDatabase {
1066
1105
await m.createAll ();
1067
1106
},
1068
1107
onUpgrade: (Migrator m, int from, int to) async {
1069
- if (from < 2 ) {
1108
+ if (from <= 2 ) {
1070
1109
// Kategori tablosunu ekle
1071
1110
await m.createTable (categories);
1072
- }
1073
- if (from < 3 ) {
1074
- // UserInfo ve ServerInfo tablolarını ekle
1075
1111
await m.createTable (userInfos);
1076
1112
await m.createTable (serverInfos);
1077
- }
1078
- if (from < 4 ) {
1079
- // LiveStreams tablosunu oluştur
1080
1113
await m.createTable (liveStreams);
1081
- }
1082
- if (from < 5 ) {
1083
1114
await m.createTable (vodStreams);
1084
- }
1085
- if (from < 6 ) {
1086
1115
await m.createTable (seriesStreams);
1087
- }
1088
- if (from <= 6 ) {
1089
- // Yeni kolonları varsayılan değerlerle ekle
1090
1116
await m.addColumn (seriesStreams, seriesStreams.lastModified);
1091
1117
await m.addColumn (seriesStreams, seriesStreams.backdropPath);
1092
-
1093
- // Varolan kayıtlar için varsayılan değerler set etmek isterseniz:
1094
1118
await customStatement ('''
1095
1119
UPDATE series_streams
1096
1120
SET last_modified = '0', backdrop_path = '[]'
1097
1121
WHERE last_modified IS NULL OR backdrop_path IS NULL
1098
1122
''' );
1099
- }
1100
- if (from <= 7 ) {
1101
- // SeriesInfo tablosu oluştur
1102
1123
await m.createTable (seriesInfos);
1103
- // Seasons tablosu oluştur
1104
1124
await m.createTable (seasons);
1105
- // Episodes tablosu oluştur
1106
1125
await m.createTable (episodes);
1126
+ await m.createTable (watchHistories);
1107
1127
}
1108
1128
},
1109
1129
);
@@ -1112,7 +1132,7 @@ class AppDatabase extends _$AppDatabase {
1112
1132
Future <void > deleteDatabase () async {
1113
1133
await close (); // Önce bağlantıyı kapat
1114
1134
final dbFolder = await getApplicationDocumentsDirectory ();
1115
- final file = File (p.join (dbFolder.path, 'playlists.db ' ));
1135
+ final file = File (p.join (dbFolder.path, 'playlists.sqlite ' ));
1116
1136
1117
1137
if (await file.exists ()) {
1118
1138
await file.delete ();
0 commit comments