mirror of
https://github.com/dz0ny/meshcore-sar.git
synced 2026-08-11 16:30:28 +00:00
Merge pull request #24 from dz0ny/feat/update-changelog-highlights
Add weekly changelog highlights
This commit is contained in:
13
CHANGELOG.md
Normal file
13
CHANGELOG.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
## 2026-03-08 to 2026-03-14
|
||||||
|
|
||||||
|
- Discovery and contacts: finished the discovery flow, removed artificial UI delays, added profile storage and sync, and allowed contact name overrides.
|
||||||
|
- Messaging and channels: fixed channel sync, deduplication, overwrite and deletion issues, cleared message input after send, and added delayed-message warning tracking.
|
||||||
|
- Voice and transport: improved voice playback quality, improved scan and advert parsing, and kept route path data visible in logs.
|
||||||
|
- Maps and field operations: enabled iOS background GPS updates, added GPX trail import/export, introduced a fullscreen repeater map, and added live mesh traffic views.
|
||||||
|
- Localization and UI polish: added multilingual localization coverage, updated locale strings, fixed onboarding layout issues, and refined channel and contacts presentation.
|
||||||
|
|
||||||
|
## Key PRs
|
||||||
|
|
||||||
|
- [#16](https://github.com/dz0ny/meshcore-sar/pull/16) Merge pull request #16 from `MGJ520/main`
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
import 'package:shared_preferences/shared_preferences.dart';
|
|
||||||
import '../utils/voice_message_parser.dart';
|
|
||||||
|
|
||||||
class VoiceCodecPreferences {
|
|
||||||
static const String _codecKey = 'voice_codec';
|
|
||||||
static const VoiceCodecKind defaultCodec = VoiceCodecKind.codec2;
|
|
||||||
|
|
||||||
static Future<VoiceCodecKind> getCodec() async {
|
|
||||||
final prefs = await SharedPreferences.getInstance();
|
|
||||||
final raw = prefs.getString(_codecKey);
|
|
||||||
return VoiceCodecKind.values.firstWhere(
|
|
||||||
(codec) => codec.name == raw,
|
|
||||||
orElse: () => defaultCodec,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
static Future<void> setCodec(VoiceCodecKind codec) async {
|
|
||||||
final prefs = await SharedPreferences.getInstance();
|
|
||||||
await prefs.setString(_codecKey, codec.name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -11,36 +11,26 @@ const int _defaultLoRaCrcEnabled = 1;
|
|||||||
const int _defaultLoRaExplicitHeader = 1;
|
const int _defaultLoRaExplicitHeader = 1;
|
||||||
const double _defaultAirtimeBudgetFactor = 1.0; // one half duty-cycle
|
const double _defaultAirtimeBudgetFactor = 1.0; // one half duty-cycle
|
||||||
|
|
||||||
enum VoiceCodecKind {
|
|
||||||
codec2(0, 'Codec2');
|
|
||||||
|
|
||||||
const VoiceCodecKind(this.id, this.label);
|
|
||||||
final int id;
|
|
||||||
final String label;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Identifies which voice codec/mode was used for a packet.
|
/// Identifies which voice codec/mode was used for a packet.
|
||||||
/// Matches the modeId byte in the text/binary packet header.
|
/// Matches the modeId byte in the text/binary packet header.
|
||||||
enum VoicePacketMode {
|
enum VoicePacketMode {
|
||||||
mode700c(0, '700C', VoiceCodecKind.codec2, 8000, 100, 1600),
|
mode700c(0, '700C', 8000, 100, 1600),
|
||||||
mode1200(1, '1200', VoiceCodecKind.codec2, 8000, 150, 1040),
|
mode1200(1, '1200', 8000, 150, 1040),
|
||||||
mode2400(2, '2400', VoiceCodecKind.codec2, 8000, 300, 520),
|
mode2400(2, '2400', 8000, 300, 520),
|
||||||
mode1300(3, '1300', VoiceCodecKind.codec2, 8000, 175, 880),
|
mode1300(3, '1300', 8000, 175, 880),
|
||||||
mode1400(4, '1400', VoiceCodecKind.codec2, 8000, 175, 880),
|
mode1400(4, '1400', 8000, 175, 880),
|
||||||
mode1600(5, '1600', VoiceCodecKind.codec2, 8000, 200, 800),
|
mode1600(5, '1600', 8000, 200, 800),
|
||||||
mode3200(6, '3200', VoiceCodecKind.codec2, 8000, 400, 400);
|
mode3200(6, '3200', 8000, 400, 400);
|
||||||
|
|
||||||
const VoicePacketMode(
|
const VoicePacketMode(
|
||||||
this.id,
|
this.id,
|
||||||
this.label,
|
this.label,
|
||||||
this.codec,
|
|
||||||
this.sampleRateHz,
|
this.sampleRateHz,
|
||||||
this.bytesPerSecond,
|
this.bytesPerSecond,
|
||||||
this.packetDurationMs,
|
this.packetDurationMs,
|
||||||
);
|
);
|
||||||
final int id;
|
final int id;
|
||||||
final String label;
|
final String label;
|
||||||
final VoiceCodecKind codec;
|
|
||||||
final int sampleRateHz;
|
final int sampleRateHz;
|
||||||
final int bytesPerSecond;
|
final int bytesPerSecond;
|
||||||
final int packetDurationMs;
|
final int packetDurationMs;
|
||||||
|
|||||||
Reference in New Issue
Block a user