Skip to content

Commit 0860315

Browse files
authored
Further events adding and fixes (#2372)
2 parents cecff7f + 05d8de9 commit 0860315

File tree

7 files changed

+110
-13
lines changed

7 files changed

+110
-13
lines changed

app/lib/pages/apps/widgets/app_section_card.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:omi/pages/apps/app_detail/app_detail.dart';
77
import 'package:omi/providers/app_provider.dart';
88
import 'package:omi/utils/analytics/mixpanel.dart';
99
import 'package:omi/utils/other/temp.dart';
10+
import 'package:omi/widgets/extensions/string.dart';
1011
import 'package:provider/provider.dart';
1112

1213
class AppSectionCard extends StatelessWidget {
@@ -146,7 +147,7 @@ class SectionAppItemCard extends StatelessWidget {
146147
Padding(
147148
padding: const EdgeInsets.only(top: 2.0),
148149
child: Text(
149-
app.getCategoryName(),
150+
app.description.decodeString,
150151
maxLines: 1,
151152
overflow: TextOverflow.ellipsis,
152153
style: const TextStyle(color: Colors.grey, fontSize: 13),

app/lib/pages/apps/widgets/create_options_sheet.dart

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:omi/pages/apps/add_app.dart';
3+
import 'package:omi/pages/persona/persona_profile.dart';
34
import 'package:omi/pages/persona/persona_provider.dart';
45
import 'package:omi/providers/home_provider.dart';
56
import 'package:provider/provider.dart';
@@ -64,8 +65,16 @@ class CreateOptionsSheet extends StatelessWidget {
6465
MixpanelManager().pageOpened('Create Persona');
6566
// Set routing in provider and navigate to Persona Profile page
6667
Provider.of<PersonaProvider>(context, listen: false).setRouting(PersonaProfileRouting.create_my_clone);
67-
Provider.of<HomeProvider>(context, listen: false).setIndex(3);
68-
Provider.of<HomeProvider>(context, listen: false).onSelectedIndexChanged!(3);
68+
Navigator.of(context).push(
69+
MaterialPageRoute(
70+
builder: (context) => const PersonaProfilePage(),
71+
settings: const RouteSettings(
72+
arguments: 'from_settings',
73+
),
74+
),
75+
);
76+
// Provider.of<HomeProvider>(context, listen: false).setIndex(3);
77+
// Provider.of<HomeProvider>(context, listen: false).onSelectedIndexChanged!(3);
6978
},
7079
),
7180
),

app/lib/pages/memories/memories_review_page.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class _MemoriesReviewPageState extends State<MemoriesReviewPage> {
6363
// Process memories with a small delay to allow UI to update
6464
for (var memory in memoriesToProcess) {
6565
await Future.delayed(const Duration(milliseconds: 20));
66-
context.read<MemoriesProvider>().reviewMemory(memory, approve);
66+
context.read<MemoriesProvider>().reviewMemory(memory, approve, 'review_page_batch');
6767
}
6868

6969
setState(() {
@@ -104,7 +104,7 @@ class _MemoriesReviewPageState extends State<MemoriesReviewPage> {
104104
setState(() => _isProcessing = true);
105105

106106
// Process the single memory
107-
context.read<MemoriesProvider>().reviewMemory(memory, approve);
107+
context.read<MemoriesProvider>().reviewMemory(memory, approve, 'review_page_single');
108108

109109
setState(() {
110110
remainingMemories.remove(memory);

app/lib/pages/memories/page.dart

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ class MemoriesPageState extends State<MemoriesPage> with AutomaticKeepAliveClien
145145
onPressed: () {
146146
_searchController.clear();
147147
provider.setSearchQuery('');
148+
MixpanelManager().memorySearchCleared(provider.memories.length);
148149
},
149150
)
150151
]
@@ -161,6 +162,11 @@ class MemoriesPageState extends State<MemoriesPage> with AutomaticKeepAliveClien
161162
),
162163
),
163164
onChanged: (value) => provider.setSearchQuery(value),
165+
onSubmitted: (value) {
166+
if (value.isNotEmpty) {
167+
MixpanelManager().memorySearched(value, provider.filteredMemories.length);
168+
}
169+
},
164170
),
165171
),
166172
);
@@ -303,7 +309,10 @@ class MemoriesPageState extends State<MemoriesPage> with AutomaticKeepAliveClien
303309
return MemoryItem(
304310
memory: memory,
305311
provider: provider,
306-
onTap: _showQuickEditSheet,
312+
onTap: (BuildContext context, Memory tappedMemory, MemoriesProvider tappedProvider) {
313+
MixpanelManager().memoryListItemClicked(tappedMemory);
314+
_showQuickEditSheet(context, tappedMemory, tappedProvider);
315+
},
307316
);
308317
},
309318
),
@@ -400,6 +409,7 @@ class MemoriesPageState extends State<MemoriesPage> with AutomaticKeepAliveClien
400409
}
401410

402411
void _showMemoryManagementSheet(BuildContext context, MemoriesProvider provider) {
412+
MixpanelManager().memoriesManagementSheetOpened();
403413
showModalBottomSheet(
404414
context: context,
405415
backgroundColor: Colors.transparent,

app/lib/pages/memories/widgets/memory_review_sheet.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class MemoriesReviewSheet extends StatelessWidget {
2929
margin: const EdgeInsets.only(bottom: 12),
3030
child: Column(
3131
children: [
32+
const SizedBox(height: 10),
3233
Row(
3334
mainAxisAlignment: MainAxisAlignment.spaceBetween,
3435
children: [

app/lib/providers/memories_provider.dart

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'package:omi/backend/http/api/memories.dart';
33
import 'package:omi/backend/preferences.dart';
44
import 'package:omi/backend/schema/memory.dart';
55
import 'package:omi/providers/base_provider.dart';
6+
import 'package:omi/utils/analytics/mixpanel.dart';
67
import 'package:tuple/tuple.dart';
78
import 'package:uuid/uuid.dart';
89
import 'package:flutter/foundation.dart';
@@ -86,9 +87,13 @@ class MemoriesProvider extends ChangeNotifier {
8687
}
8788

8889
void deleteAllMemories() async {
90+
final int countBeforeDeletion = _memories.length;
8991
await deleteAllMemoriesServer();
9092
_memories.clear();
9193
_unreviewed.clear();
94+
if (countBeforeDeletion > 0) {
95+
MixpanelManager().memoriesAllDeleted(countBeforeDeletion);
96+
}
9297
_setCategories();
9398
}
9499

@@ -117,9 +122,12 @@ class MemoriesProvider extends ChangeNotifier {
117122

118123
final idx = _memories.indexWhere((m) => m.id == memory.id);
119124
if (idx != -1) {
120-
memory.visibility = visibility;
121-
_memories[idx] = memory;
122-
_unreviewed.remove(memory);
125+
Memory memoryToUpdate = _memories[idx];
126+
memoryToUpdate.visibility = visibility;
127+
_memories[idx] = memoryToUpdate;
128+
_unreviewed.removeWhere((m) => m.id == memory.id);
129+
130+
MixpanelManager().memoryVisibilityChanged(memoryToUpdate, visibility);
123131
_setCategories();
124132
}
125133
}
@@ -147,7 +155,9 @@ class MemoriesProvider extends ChangeNotifier {
147155
}
148156
}
149157

150-
void reviewMemory(Memory memory, bool approved) async {
158+
void reviewMemory(Memory memory, bool approved, String source) async {
159+
MixpanelManager().memoryReviewed(memory, approved, source);
160+
151161
await reviewMemoryServer(memory.id, approved);
152162

153163
final idx = _memories.indexWhere((m) => m.id == memory.id);
@@ -176,13 +186,29 @@ class MemoriesProvider extends ChangeNotifier {
176186

177187
Future<void> updateAllMemoriesVisibility(bool makePrivate) async {
178188
final visibility = makePrivate ? MemoryVisibility.private : MemoryVisibility.public;
189+
int updatedCount = 0;
190+
List<Memory> memoriesSuccessfullyUpdated = [];
179191

180-
for (var memory in _memories) {
192+
for (var memory in List.from(_memories)) {
181193
if (memory.visibility != visibility) {
182-
await updateMemoryVisibility(memory, visibility);
194+
try {
195+
await updateMemoryVisibilityServer(memory.id, visibility.name);
196+
final idx = _memories.indexWhere((m) => m.id == memory.id);
197+
if (idx != -1) {
198+
_memories[idx].visibility = visibility;
199+
memoriesSuccessfullyUpdated.add(_memories[idx]);
200+
updatedCount++;
201+
}
202+
} catch (e) {
203+
print('Failed to update visibility for memory ${memory.id}: $e');
204+
}
183205
}
184206
}
185207

186-
notifyListeners();
208+
if (updatedCount > 0) {
209+
MixpanelManager().memoriesAllVisibilityChanged(visibility, updatedCount);
210+
}
211+
212+
_setCategories();
187213
}
188214
}

app/lib/utils/analytics/mixpanel.dart

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,56 @@ class MixpanelManager {
167167
void memoriesPageCreatedMemory(MemoryCategory category) =>
168168
track('Fact Page Created Fact', properties: {'fact_category': category.toString().split('.').last});
169169

170+
void memorySearched(String query, int resultsCount) {
171+
track('Fact Searched', properties: {
172+
'search_query_length': query.length,
173+
'results_count': resultsCount,
174+
});
175+
}
176+
177+
void memorySearchCleared(int totalFactsCount) {
178+
track('Fact Search Cleared', properties: {'total_facts_count': totalFactsCount});
179+
}
180+
181+
void memoryListItemClicked(Memory memory) {
182+
track('Fact List Item Clicked', properties: {
183+
'fact_id': memory.id,
184+
'fact_category': memory.category.toString().split('.').last,
185+
});
186+
}
187+
188+
void memoryVisibilityChanged(Memory memory, MemoryVisibility newVisibility) {
189+
track('Fact Visibility Changed', properties: {
190+
'fact_id': memory.id,
191+
'fact_category': memory.category.toString().split('.').last,
192+
'new_visibility': newVisibility.name,
193+
});
194+
}
195+
196+
void memoriesAllVisibilityChanged(MemoryVisibility newVisibility, int count) {
197+
track('All Facts Visibility Changed', properties: {
198+
'new_visibility': newVisibility.name,
199+
'facts_count': count,
200+
});
201+
}
202+
203+
void memoryReviewed(Memory memory, bool approved, String source) {
204+
track('Fact Reviewed', properties: {
205+
'fact_id': memory.id,
206+
'fact_category': memory.category.toString().split('.').last,
207+
'status': approved ? 'approved' : 'discarded',
208+
'source': source,
209+
});
210+
}
211+
212+
void memoriesAllDeleted(int countBeforeDeletion) {
213+
track('All Facts Deleted', properties: {
214+
'facts_count_before_deletion': countBeforeDeletion,
215+
});
216+
}
217+
218+
void memoriesManagementSheetOpened() => track('Facts Management Sheet Opened');
219+
170220
Map<String, dynamic> _getTranscriptProperties(String transcript) {
171221
String transcriptCopy = transcript.substring(0, transcript.length);
172222
int speakersCount = 0;

0 commit comments

Comments
 (0)