Skip to content

Commit b1f4ddb

Browse files
committed
yt queue, Chrisye font
1 parent 82f8a9f commit b1f4ddb

4 files changed

Lines changed: 447 additions & 195 deletions

File tree

assets/fonts/Chrisye.otf

48.4 KB
Binary file not shown.

lib/services/font_database.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ class FontDatabase {
2323
'Catwalzhari': FontMetadata(fontName: 'Catwalzhari', mainCategory: FontCategory.free, subCategories: [], studio: FontCategory.various),
2424
'Ceria Lebaran': FontMetadata(fontName: 'Ceria Lebaran', mainCategory: FontCategory.free, subCategories: [], studio: FontCategory.various),
2525
'Chicle': FontMetadata(fontName: 'Chicle', mainCategory: FontCategory.free, subCategories: [], studio: FontCategory.various),
26+
'Chrisye': FontMetadata(fontName: 'Chrisye', mainCategory: FontCategory.free, subCategories: [], studio: FontCategory.various),
2627
'Cimbrian': FontMetadata(fontName: 'Cimbrian', mainCategory: FontCategory.free, subCategories: [], studio: FontCategory.various),
2728
'Cofenauts': FontMetadata(fontName: 'Cofenauts', mainCategory: FontCategory.free, subCategories: [], studio: FontCategory.various),
2829
'Devinne Swash': FontMetadata(fontName: 'Devinne Swash', mainCategory: FontCategory.free, subCategories: [], studio: FontCategory.various),

lib/services/youtube_service.dart

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,50 @@ class YouTubeService {
276276
}
277277
}
278278

279+
static Future<Map<String, String>?> getVideoInfo(String youtubeUrl) async {
280+
if (_ytdlpPath == null && !await isYtdlpAvailable()) {
281+
return null;
282+
}
283+
284+
try {
285+
final result = await Process.run(_ytdlpPath!, [
286+
'--dump-json',
287+
'--no-playlist',
288+
youtubeUrl,
289+
]);
290+
291+
if (result.exitCode != 0) {
292+
return null;
293+
}
294+
295+
final data = jsonDecode(result.stdout.toString()) as Map<String, dynamic>;
296+
297+
final title = data['title']?.toString() ?? 'YouTube Audio';
298+
final channel =
299+
data['channel']?.toString() ?? data['uploader']?.toString() ?? '';
300+
301+
String duration = '';
302+
final rawDuration = data['duration'];
303+
if (rawDuration != null) {
304+
final totalSeconds = (rawDuration as num).toInt();
305+
final h = totalSeconds ~/ 3600;
306+
final m = (totalSeconds % 3600) ~/ 60;
307+
final s = totalSeconds % 60;
308+
if (h > 0) {
309+
duration =
310+
'$h:${m.toString().padLeft(2, '0')}:${s.toString().padLeft(2, '0')}';
311+
} else {
312+
duration = '$m:${s.toString().padLeft(2, '0')}';
313+
}
314+
}
315+
316+
return {'title': title, 'channel': channel, 'duration': duration};
317+
} catch (e) {
318+
print('Error getting video info: $e');
319+
return null;
320+
}
321+
}
322+
279323
static Future<String?> _findWorkingCookieArg(String youtubeUrl) async {
280324
final browsers = ['firefox'];
281325

0 commit comments

Comments
 (0)