Skip to content

Commit 5e78ee5

Browse files
kushchoudhary98Kush Choudhary
andauthored
changed log-database schema (#790)
Co-authored-by: Kush Choudhary <kushchoudhary@Kushs-MacBook-Pro.local>
1 parent 958cd83 commit 5e78ee5

File tree

10 files changed

+213
-86
lines changed

10 files changed

+213
-86
lines changed

android/app/src/main/kotlin/com/ccextractor/ultimate_alarm_clock/ultimate_alarm_clock/AlarmReceiver.kt

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ package com.ccextractor.ultimate_alarm_clock
33
import android.content.BroadcastReceiver
44
import android.content.Context
55
import android.content.Intent
6-
6+
import java.text.SimpleDateFormat
7+
import java.util.Date
8+
import java.util.Locale
79

810
class AlarmReceiver : BroadcastReceiver() {
911
override fun onReceive(context: Context?, intent: Intent?) {
@@ -13,7 +15,7 @@ class AlarmReceiver : BroadcastReceiver() {
1315

1416

1517

16-
val logdbHelper = LogDatabaseHelper(context);
18+
val logdbHelper = LogDatabaseHelper(context)
1719
val flutterIntent = Intent(context, MainActivity::class.java).apply {
1820
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
1921

@@ -34,7 +36,38 @@ class AlarmReceiver : BroadcastReceiver() {
3436
if (Math.abs(screenOnTimeInMillis - screenOffTimeInMillis) < 180000 || screenOnTimeInMillis - screenOffTimeInMillis == 0L) {
3537
println("ANDROID STARTING APP")
3638
context.startActivity(flutterIntent)
39+
40+
if((screenOnTimeInMillis - screenOffTimeInMillis) == 0L) {
41+
// if alarm rings (no smart controls used)
42+
logdbHelper.insertLog(
43+
"Alarm is ringing",
44+
status = LogDatabaseHelper.Status.SUCCESS,
45+
type = LogDatabaseHelper.LogType.NORMAL,
46+
hasRung = 1
47+
)
48+
return
49+
}
50+
51+
logdbHelper.insertLog(
52+
"Alarm is ringing. Your Screen Activity was less than what you specified",
53+
status = LogDatabaseHelper.Status.SUCCESS,
54+
type = LogDatabaseHelper.LogType.NORMAL,
55+
hasRung = 1
56+
)
57+
return
3758
}
59+
60+
logdbHelper.insertLog(
61+
"Alarm didn't ring. Your Screen Activity was more than what you specified",
62+
status = LogDatabaseHelper.Status.WARNING,
63+
type = LogDatabaseHelper.LogType.NORMAL,
64+
hasRung = 0
65+
)
66+
}
67+
68+
private fun getCurrentTime(): String {
69+
val formatter = SimpleDateFormat("HH:mm", Locale.getDefault())
70+
return formatter.format(Date())
3871
}
3972

4073
}

android/app/src/main/kotlin/com/ccextractor/ultimate_alarm_clock/ultimate_alarm_clock/GetLatestAlarm.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,11 @@ fun getLatestAlarm(db: SQLiteDatabase, wantNextAlarm: Boolean, profile: String,c
135135
val logDetails = """
136136
Alarm Scheduled for ${setAlarm.alarmTime}
137137
""".trimIndent()
138-
logdbHelper.insertLog(logDetails)
138+
logdbHelper.insertLog(
139+
"Alarm Scheduled for ${setAlarm.alarmTime}",
140+
LogDatabaseHelper.Status.SUCCESS,
141+
LogDatabaseHelper.LogType.DEV
142+
)
139143

140144
// Return the latest alarm details
141145
val a = mapOf(

android/app/src/main/kotlin/com/ccextractor/ultimate_alarm_clock/ultimate_alarm_clock/LogDatabaseHelper.kt

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,36 @@ class LogDatabaseHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_N
1616
private const val COLUMN_STATUS = "Status"
1717
}
1818

19+
enum class Status(val value: String) {
20+
ERROR("ERROR"),
21+
SUCCESS("SUCCESS"),
22+
WARNING("WARNING");
23+
24+
override fun toString(): String {
25+
return value
26+
}
27+
}
28+
29+
enum class LogType(val value: String) {
30+
DEV("DEV"),
31+
NORMAL("NORMAL");
32+
33+
override fun toString(): String {
34+
return value
35+
}
36+
}
37+
1938
override fun onCreate(db: SQLiteDatabase?) {
2039
// Create the LOG table
2140
val createTableQuery = """
22-
CREATE TABLE $TABLE_NAME (
23-
$COLUMN_LOG_ID INTEGER PRIMARY KEY AUTOINCREMENT,
24-
$COLUMN_LOG_TIME DATETIME NOT NULL,
25-
$COLUMN_STATUS TEXT NOT NULL
41+
CREATE TABLE LOG (
42+
LogID INTEGER PRIMARY KEY AUTOINCREMENT,
43+
LogTime DATETIME NOT NULL,
44+
Status TEXT CHECK(Status IN ('ERROR', 'SUCCESS', 'WARNING')) NOT NULL,
45+
LogType TEXT CHECK(LogType IN ('DEV', 'NORMAL')) NOT NULL,
46+
Message TEXT NOT NULL,
47+
HasRung INTEGER DEFAULT 0,
48+
AlarmID TEXT
2649
)
2750
""".trimIndent()
2851
db?.execSQL(createTableQuery)
@@ -35,11 +58,17 @@ class LogDatabaseHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_N
3558
}
3659

3760
// Insert a log entry
38-
fun insertLog(status: String): Long {
61+
fun insertLog(msg: String, status: Status = Status.WARNING, type: LogType = LogType.DEV, hasRung: Int = 0, alarmID: String = ""): Long {
3962
val db = writableDatabase
63+
val status = status.toString()
64+
val type = type.toString()
4065
val values = ContentValues().apply {
41-
put(COLUMN_LOG_TIME, System.currentTimeMillis()) // Store current time as milliseconds
42-
put(COLUMN_STATUS, status)
66+
put("LogTime", System.currentTimeMillis()) // Store current time as milliseconds
67+
put("Status", status)
68+
put("LogType", type)
69+
put("Message", msg)
70+
put("HasRung", hasRung)
71+
put("AlarmID", alarmID)
4372
}
4473
return db.insert(TABLE_NAME, null, values)
4574
}

android/app/src/main/kotlin/com/ccextractor/ultimate_alarm_clock/ultimate_alarm_clock/Utilities/LocationFetcherService.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ class LocationFetcherService : Service() {
4444
var fetchLocationDeffered = async {
4545
fetchLocation()
4646
}
47+
48+
val logdbHelper = LogDatabaseHelper(this@LocationFetcherService)
4749
var destinationLongitude = 0.0
4850
var currentLongitude = 0.0
4951
var destinationLatitude = 0.0
@@ -92,6 +94,12 @@ class LocationFetcherService : Service() {
9294
Timer().schedule(9000){
9395
println("ANDROID STARTING APP")
9496
this@LocationFetcherService.startActivity(flutterIntent)
97+
logdbHelper.insertLog(
98+
"Alarm is ringing. Alarm rings because you are ${distance}m away from chosen location",
99+
status = LogDatabaseHelper.Status.SUCCESS,
100+
type = LogDatabaseHelper.LogType.NORMAL,
101+
hasRung = 1
102+
)
95103
Timer().schedule(3000){
96104
stopSelf()
97105
}
@@ -100,6 +108,12 @@ class LocationFetcherService : Service() {
100108

101109
}
102110
if(distance < 500.0){
111+
logdbHelper.insertLog(
112+
"Alarm didn't ring. Because you are only ${distance}m away from chosen location",
113+
status = LogDatabaseHelper.Status.WARNING,
114+
type = LogDatabaseHelper.LogType.NORMAL,
115+
hasRung = 0
116+
)
103117
Timer().schedule(9000){
104118
Timer().schedule(3000){
105119
stopSelf()

android/app/src/main/kotlin/com/ccextractor/ultimate_alarm_clock/ultimate_alarm_clock/Utilities/WeatherFetcherService.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ class WeatherFetcherService() : Service() {
7979
}
8080
suspend fun fetchWeather(){
8181
var currentWeather = ""
82+
val logdbHelper = LogDatabaseHelper(this@WeatherFetcherService)
8283
val request = GsonRequest(OPEN_METEO_URL, WeatherModel::class.java,
8384
{ response ->
8485

@@ -105,6 +106,12 @@ class WeatherFetcherService() : Service() {
105106
if(shouldRing==false)
106107

107108
{
109+
logdbHelper.insertLog(
110+
"Alarm didn't ring. Because it is ${currentWeather} outside. And, your specified weather types were: ${weatherTypes}",
111+
status = LogDatabaseHelper.Status.WARNING,
112+
type = LogDatabaseHelper.LogType.NORMAL,
113+
hasRung = 0
114+
)
108115
Timer().schedule(3000) {
109116
stopSelf()
110117
}
@@ -128,6 +135,12 @@ class WeatherFetcherService() : Service() {
128135
Timer().schedule(9000) {
129136
println("ANDROID STARTING APP")
130137
this@WeatherFetcherService.startActivity(flutterIntent)
138+
logdbHelper.insertLog(
139+
"Alarm is ringing. The current weather is ${currentWeather}.",
140+
status = LogDatabaseHelper.Status.SUCCESS,
141+
type = LogDatabaseHelper.LogType.NORMAL,
142+
hasRung = 1
143+
)
131144
Timer().schedule(3000) {
132145
stopSelf()
133146
}

lib/app/data/providers/isar_provider.dart

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,30 @@ import 'package:ultimate_alarm_clock/app/data/providers/get_storage_provider.dar
1414
import 'package:ultimate_alarm_clock/app/utils/utils.dart';
1515
import 'package:sqflite/sqflite.dart';
1616

17+
enum Status {
18+
error('ERROR'),
19+
success('SUCCESS'),
20+
warning('WARNING');
21+
22+
final String value;
23+
const Status(this.value);
24+
25+
@override
26+
String toString() => value;
27+
}
28+
29+
enum LogType {
30+
dev("DEV"),
31+
normal("NORMAL");
32+
33+
final String value;
34+
const LogType(this.value);
35+
36+
@override
37+
String toString() => value;
38+
}
39+
40+
1741
class IsarDb {
1842
static final IsarDb _instance = IsarDb._internal();
1943
late Future<Isar> db;
@@ -67,9 +91,14 @@ class IsarDb {
6791
onCreate: (Database db, int version) async {
6892
await db.execute('''
6993
CREATE TABLE LOG (
70-
LogID INTEGER PRIMARY KEY AUTOINCREMENT,
71-
LogTime DATETIME NOT NULL,
72-
Status VARCHAR(50) NOT NULL)
94+
LogID INTEGER PRIMARY KEY AUTOINCREMENT,
95+
LogTime DATETIME NOT NULL,
96+
Status TEXT CHECK(Status IN ('ERROR', 'SUCCESS', 'WARNING')) NOT NULL,
97+
LogType TEXT CHECK(LogType IN ('DEV', 'NORMAL')) NOT NULL,
98+
Message TEXT NOT NULL,
99+
HasRung INTEGER DEFAULT 0,
100+
AlarmID TEXT
101+
)
73102
''');
74103
},
75104
);
@@ -159,21 +188,26 @@ class IsarDb {
159188
}
160189
return Future.value(Isar.getInstance());
161190
}
162-
Future<int> insertLog(String status) async {
191+
Future<int> insertLog(String msg, {Status status = Status.warning, LogType type = LogType.dev, int hasRung = 0}) async {
163192
try {
164193
final db = await setAlarmLogs();
165194
if (db == null) {
166195
debugPrint('Failed to initialize database for logs');
167196
return -1;
168197
}
198+
String st = status.toString();
199+
String t = type.toString();
169200
final result = await db.insert(
170201
'LOG',
171202
{
172203
'LogTime': DateTime.now().millisecondsSinceEpoch,
173-
'Status': status,
204+
'Status': st,
205+
'LogType': t,
206+
'Message': msg,
207+
'HasRung': hasRung,
174208
},
175209
);
176-
debugPrint('Successfully inserted log: $status');
210+
debugPrint('Successfully inserted log: $msg');
177211
return result;
178212
} catch (e) {
179213
debugPrint('Error inserting log: $e');
@@ -213,19 +247,6 @@ class IsarDb {
213247
}
214248
}
215249

216-
// Update a log entry
217-
Future<int> updateLog(int logId, String newStatus) async {
218-
final db = await setAlarmLogs();
219-
return await db!.update(
220-
'LOG',
221-
{
222-
'Status': newStatus,
223-
},
224-
where: 'LogID = ?',
225-
whereArgs: [logId],
226-
);
227-
}
228-
229250
static Future<AlarmModel> addAlarm(AlarmModel alarmRecord) async {
230251
final isarProvider = IsarDb();
231252
final sql = await IsarDb().getAlarmSQLiteDatabase();
@@ -414,7 +435,7 @@ class IsarDb {
414435
await db.writeTxn(() async {
415436
await db.alarmModels.put(alarmRecord);
416437
});
417-
await IsarDb().insertLog('Alarm updated ${alarmRecord.alarmTime}');
438+
await IsarDb().insertLog('Alarm updated ${alarmRecord.alarmTime}', status: Status.success, type: LogType.normal);
418439
await sql!.update(
419440
'alarms',
420441
alarmRecord.toSQFliteMap(),

lib/app/modules/alarmRing/controllers/alarm_ring_controller.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,6 @@ class AlarmControlController extends GetxController {
185185
}
186186

187187
print('hwyooo ${currentlyRingingAlarm.value.isGuardian}');
188-
IsarDb()
189-
.insertLog('Alarm ringing ${currentlyRingingAlarm.value.alarmTime}');
190188
if (currentlyRingingAlarm.value.isGuardian) {
191189
guardianTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
192190
print(guardianCoundown.value);

lib/app/modules/debug/controllers/debug_controller.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import 'package:get/get.dart';
22
import 'package:flutter/material.dart';
3+
import 'package:get/get_rx/get_rx.dart';
4+
import 'package:get/get_rx/src/rx_types/rx_types.dart';
35
import 'dart:async';
46
import '../../../data/providers/isar_provider.dart';
57
import '../../../modules/settings/controllers/theme_controller.dart';
@@ -16,6 +18,7 @@ class DebugController extends GetxController {
1618
var selectedLogLevel = Rxn<LogLevel>();
1719
var startDate = Rxn<DateTime>();
1820
var endDate = Rxn<DateTime>();
21+
RxBool isDevMode = false.obs;
1922

2023
Timer? _timer;
2124

@@ -35,6 +38,11 @@ class DebugController extends GetxController {
3538
super.onClose();
3639
}
3740

41+
void toggleDevMode() {
42+
isDevMode.value = !isDevMode.value;
43+
fetchLogs();
44+
}
45+
3846
Future<void> fetchLogs() async {
3947
try {
4048
final fetchedLogs = await IsarDb().getLogs();

0 commit comments

Comments
 (0)