Skip to content

Commit 016ee43

Browse files
committed
Delete cached media files on schedule deletion
1 parent 73b4ea0 commit 016ee43

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

src/Bible.Alarm/Services/Media/Interfaces/IMediaCacheService.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ public interface IMediaCacheService : IDisposable
1212
Task<bool> SetupAlarmCacheAsync(int alarmScheduleId);
1313
Task CleanUpAsync();
1414
Task<string?> GetOrDownloadTrackUriAsync(PlayItem playItem);
15+
Task DeleteScheduleCacheAsync(int scheduleId);
1516
}
1617

src/Bible.Alarm/Services/Media/MediaCacheService.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,31 @@ private Task DeleteFilesAsync(HashSet<string> filePathsToDelete)
198198
return Task.CompletedTask;
199199
}
200200

201+
public async Task DeleteScheduleCacheAsync(int scheduleId)
202+
{
203+
try
204+
{
205+
var playlist = await mediaPlayService.NextTracks(scheduleId);
206+
var filePathsToDelete = new HashSet<string>();
207+
208+
foreach (var playItem in playlist)
209+
{
210+
var cacheFilePath = GetCacheFilePath(playItem.Url);
211+
if (await storageService.FileExists(cacheFilePath))
212+
{
213+
filePathsToDelete.Add(cacheFilePath);
214+
}
215+
}
216+
217+
await DeleteFilesAsync(filePathsToDelete);
218+
_logger.Information($"Deleted {filePathsToDelete.Count} cache files for schedule {scheduleId}");
219+
}
220+
catch (Exception ex)
221+
{
222+
_logger.Error(ex, $"Error deleting cache files for schedule {scheduleId}");
223+
}
224+
}
225+
201226
public void Dispose()
202227
{
203228
// Note: DbContext instances are now created via IServiceScopeFactory and disposed by the scope

src/Bible.Alarm/Services/Scheduler/SchedulePersistenceService.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Bible.Alarm.Common;
22
using Bible.Alarm.Services.Scheduler.Interfaces;
3+
using Bible.Alarm.Services.Media.Interfaces;
34
using Bible.Alarm.Database;
45
using Bible.Alarm.Models.Schedule;
56
using Bible.Alarm.Shared.Database;
@@ -15,13 +16,15 @@ public class SchedulePersistenceService(
1516
ILogger logger,
1617
IServiceScopeFactory scopeFactory,
1718
IAlarmService alarmService,
18-
IDispatcher dispatcher)
19+
IDispatcher dispatcher,
20+
IMediaCacheService mediaCacheService)
1921
: ISchedulePersistenceService
2022
{
2123
private readonly ILogger _logger = logger;
2224
private readonly IServiceScopeFactory _scopeFactory = scopeFactory;
2325
private readonly IAlarmService _alarmService = alarmService;
2426
private readonly IDispatcher _dispatcher = dispatcher;
27+
private readonly IMediaCacheService _mediaCacheService = mediaCacheService;
2528

2629
public async Task<bool> SaveScheduleAsync(AlarmSchedule schedule, bool isNewSchedule, bool musicUpdated = true, bool bibleReadingUpdated = true)
2730
{
@@ -143,6 +146,9 @@ public async Task DeleteScheduleAsync(int scheduleId)
143146
return;
144147
}
145148

149+
// Delete cached media files for this schedule
150+
await _mediaCacheService.DeleteScheduleCacheAsync(scheduleId);
151+
146152
// Delete from database
147153
await Task.Run(async () =>
148154
{

0 commit comments

Comments
 (0)