import 'dart:io'; import '../modeller/altyazi_satiri.dart'; /// SRT formatına yazma ve okuma class SrtYardimcisi { static String _formatZaman(double sn) { final saat = (sn ~/ 3600).toString().padLeft(2, '0'); final dk = ((sn % 3600) ~/ 60).toString().padLeft(2, '0'); final saniye = (sn % 60).floor().toString().padLeft(2, '0'); final ms = (((sn * 1000) % 1000).round()).toString().padLeft(3, '0'); return '$saat:$dk:$saniye,$ms'; } static double _zamandanCevir(String t) { // 00:00:05,500 final parts = t.replaceAll(',', '.').split(':'); if (parts.length != 3) return 0; final saat = double.tryParse(parts[0]) ?? 0; final dk = double.tryParse(parts[1]) ?? 0; final ssMs = double.tryParse(parts[2]) ?? 0; return saat * 3600 + dk * 60 + ssMs; } static String yaz(List satirlar) { final sb = StringBuffer(); for (int i = 0; i < satirlar.length; i++) { sb.writeln(i + 1); sb.writeln( '${_formatZaman(satirlar[i].basla)} --> ${_formatZaman(satirlar[i].bit)}'); sb.writeln(satirlar[i].metin); sb.writeln(); } return sb.toString(); } static Future> oku(String dosyaYolu) async { final str = await File(dosyaYolu).readAsString(); final blocklar = str.split(RegExp(r'\n\s*\n')); final sonuc = []; for (final b in blocklar) { final satirlar = b.trim().split('\n'); if (satirlar.length < 3) continue; // satir 0: numara, satir 1: zaman, 2+: metin final zaman = satirlar[1]; final m = RegExp(r'(\S+)\s*-->\s*(\S+)').firstMatch(zaman); if (m == null) continue; sonuc.add(AltyaziSatiri( basla: _zamandanCevir(m.group(1) ?? '0'), bit: _zamandanCevir(m.group(2) ?? '0'), metin: satirlar.skip(2).join('\n'), )); } return sonuc; } }