Skip to content

Commit 2e2b6cb

Browse files
committed
feat(data): add history data structure
1 parent 8a309ca commit 2e2b6cb

File tree

9 files changed

+400
-0
lines changed

9 files changed

+400
-0
lines changed

lib/main.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ import 'package:app_links/app_links.dart';
2121
import 'package:flutter/material.dart';
2222
import 'package:flutter/foundation.dart' show kIsWeb;
2323
import 'package:flutter/services.dart';
24+
import 'package:hive_flutter/hive_flutter.dart';
25+
import 'models/conversion_history_entry.dart';
26+
import 'models/music_platform.dart';
27+
import 'models/track_metadata.dart';
2428
import 'pages/home_page.dart';
2529
import 'theme/app_theme.dart';
2630
import 'utils/web_share_handler.dart';
@@ -30,6 +34,14 @@ Future<void> main() async {
3034

3135
await SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
3236

37+
await Hive.initFlutter();
38+
39+
Hive.registerAdapter(ConversionHistoryEntryAdapter());
40+
Hive.registerAdapter(MusicPlatformAdapter());
41+
Hive.registerAdapter(TrackMetadataAdapter());
42+
43+
await Hive.openBox<ConversionHistoryEntry>('conversion_history');
44+
3345
runApp(const MusicSharityApp());
3446
}
3547

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
* Music Sharity - Share music across all platforms
3+
* Copyright (C) 2026 Sikelio (Byte Roast)
4+
*
5+
* This program is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU General Public License as published by
7+
* the Free Software Foundation, either version 3 of the License, or
8+
* (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
17+
*/
18+
import 'package:hive/hive.dart';
19+
import 'music_platform.dart';
20+
import 'track_metadata.dart';
21+
22+
part 'conversion_history_entry.g.dart';
23+
24+
@HiveType(typeId: 0)
25+
class ConversionHistoryEntry {
26+
@HiveField(0)
27+
final DateTime timestamp;
28+
29+
@HiveField(1)
30+
final String sourceUrl;
31+
32+
@HiveField(2)
33+
final MusicPlatform sourcePlatform;
34+
35+
@HiveField(3)
36+
final MusicPlatform targetPlatform;
37+
38+
@HiveField(4)
39+
final String targetUrl;
40+
41+
@HiveField(5)
42+
final TrackMetadata? metadata;
43+
44+
ConversionHistoryEntry({
45+
required this.timestamp,
46+
required this.sourceUrl,
47+
required this.sourcePlatform,
48+
required this.targetPlatform,
49+
required this.targetUrl,
50+
this.metadata,
51+
});
52+
53+
@override
54+
String toString() {
55+
return 'ConversionHistoryEntry(timestamp: $timestamp, '
56+
'source: ${sourcePlatform.displayName} -> target: ${targetPlatform.displayName}, '
57+
'track: ${metadata?.title ?? 'Unknown'})';
58+
}
59+
}

lib/models/conversion_history_entry.g.dart

Lines changed: 57 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/models/music_platform.dart

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,31 @@
1515
* You should have received a copy of the GNU General Public License
1616
* along with this program. If not, see <https://www.gnu.org/licenses/>.
1717
*/
18+
import 'package:hive/hive.dart';
19+
20+
part 'music_platform.g.dart';
21+
22+
@HiveType(typeId: 2)
1823
enum MusicPlatform {
24+
@HiveField(0)
1925
spotify,
26+
27+
@HiveField(1)
2028
deezer,
29+
30+
@HiveField(2)
2131
appleMusic,
32+
33+
@HiveField(3)
2234
youtubeMusic,
35+
36+
@HiveField(4)
2337
tidal,
38+
39+
@HiveField(5)
2440
soundCloud,
41+
42+
@HiveField(6)
2543
unknown,
2644
}
2745

lib/models/music_platform.g.dart

Lines changed: 71 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/models/track_metadata.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,22 @@
1515
* You should have received a copy of the GNU General Public License
1616
* along with this program. If not, see <https://www.gnu.org/licenses/>.
1717
*/
18+
import 'package:hive/hive.dart';
19+
20+
part 'track_metadata.g.dart';
21+
22+
@HiveType(typeId: 1)
1823
class TrackMetadata {
24+
@HiveField(0)
1925
final String title;
26+
27+
@HiveField(1)
2028
final String artist;
29+
30+
@HiveField(2)
2131
final String? album;
32+
33+
@HiveField(3)
2234
final String? imageUrl;
2335

2436
TrackMetadata({

lib/models/track_metadata.g.dart

Lines changed: 50 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)