Skip to content

Commit 7a6fcbd

Browse files
committed
Small fixes for UpdateDeezer command
1 parent 63cc49c commit 7a6fcbd

4 files changed

Lines changed: 56 additions & 45 deletions

File tree

MiniMediaScanner/Callbacks/UpdateDeezerCallback.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,6 @@ public UpdateDeezerCallback(
4444
this.ArtistId = artistId;
4545
this.Status = status;
4646
}
47+
48+
public string UpdateKey => $"{ArtistId}{ArtistName}";
4749
}

MiniMediaScanner/Commands/UpdateDeezerCommandHandler.cs

Lines changed: 49 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Collections.Concurrent;
12
using MiniMediaScanner.Callbacks.Status;
23
using MiniMediaScanner.Helpers;
34
using MiniMediaScanner.Repositories;
@@ -52,53 +53,65 @@ await _deezerService.UpdateArtistByNameAsync(artistName, callback =>
5253

5354
public async Task UpdateAllDeezerArtistsAsync()
5455
{
55-
56-
await AnsiConsole.Status()
57-
.Spinner(Spinner.Known.Dots)
58-
.StartAsync(Markup.Escape($"Updating all Deezer Artist..."), async ctx =>
56+
await AnsiConsole.Progress()
57+
.HideCompleted(true)
58+
.AutoClear(true)
59+
.Columns(new ProgressColumn[]
60+
{
61+
new TaskDescriptionColumn()
62+
{
63+
Alignment = Justify.Left
64+
},
65+
new ProgressBarColumn(),
66+
new PercentageColumn(),
67+
new RemainingTimeColumn(),
68+
})
69+
.StartAsync(async ctx =>
5970
{
6071
await _deezerService.PrepareProxiesAsync();
61-
62-
int offset = 0;
63-
64-
while (true)
72+
73+
var artistIds = await _deezerRepository.GetAllDeezerArtistIdsAsync();
74+
75+
await ParallelHelper.ForEachAsync(artistIds, _threads, async artistId =>
6576
{
66-
var artistIds = await _deezerRepository.GetAllDeezerArtistIdsAsync(offset);
67-
offset += DeezerRepository.PagingSize;
68-
69-
if (artistIds.Count == 0)
70-
{
71-
break;
72-
}
77+
ConcurrentDictionary<string, ProgressTask> tasks = new ConcurrentDictionary<string, ProgressTask>();
7378

74-
await ParallelHelper.ForEachAsync(artistIds, _threads, async artistId =>
79+
try
7580
{
76-
try
81+
await _deezerService.UpdateArtistByIdAsync(artistId, callback =>
7782
{
78-
await _deezerService.UpdateArtistByIdAsync(artistId, callback =>
83+
if (callback.Status == UpdateDeezerStatus.Updating)
7984
{
80-
if (callback.Status == UpdateDeezerStatus.Updating)
85+
if (string.IsNullOrWhiteSpace(callback.ExtraInfo))
8186
{
82-
if (string.IsNullOrWhiteSpace(callback.ExtraInfo))
83-
{
84-
AnsiConsole.WriteLine(Markup.Escape(
85-
$"Importing Album '{callback.AlbumName}', Artist '{callback.ArtistName}'"));
86-
}
87-
88-
ctx.Status(Markup.Escape($"Updating Deezer Artist '{callback.ArtistName}' Albums {callback.Progress} of {callback.AlbumCount}{callback.ExtraInfo}"));
87+
AnsiConsole.WriteLine(Markup.Escape($"Importing Album '{callback.AlbumName}', Artist '{callback.ArtistName}'"));
8988
}
90-
else if(callback.Status == UpdateDeezerStatus.SkippedSyncedWithin)
89+
90+
if (!tasks.ContainsKey(callback.UpdateKey))
9191
{
92-
AnsiConsole.WriteLine(Markup.Escape($"Skipped synchronizing for Deezer ArtistId '{callback?.ArtistId}' synced already within {_deezerService.PreventUpdateWithinDays}days"));
92+
tasks.TryAdd(callback.UpdateKey, ctx.AddTask(Markup.Escape($"Updating Deezer Artist '{callback.ArtistName}'")));
9393
}
94-
});
95-
}
96-
catch (Exception e)
97-
{
98-
Console.WriteLine(e.Message);
99-
}
100-
});
101-
}
94+
95+
ProgressTask? task = tasks[callback.UpdateKey];
96+
97+
if (task != null)
98+
{
99+
task.MaxValue = callback.AlbumCount;
100+
task.Value = callback.Progress;
101+
task.Description = Markup.Escape( $"Updating Deezer Artist '{callback.ArtistName}' Albums {callback.Progress} of {callback.AlbumCount}{callback.ExtraInfo}");
102+
}
103+
}
104+
else if(callback.Status == UpdateDeezerStatus.SkippedSyncedWithin)
105+
{
106+
AnsiConsole.WriteLine(Markup.Escape($"Skipped synchronizing for Deezer ArtistId '{callback?.ArtistId}' synced already within {_deezerService.PreventUpdateWithinDays}days"));
107+
}
108+
});
109+
}
110+
catch (Exception e)
111+
{
112+
Console.WriteLine(e.Message);
113+
}
114+
});
102115
});
103116
}
104117
}

MiniMediaScanner/Models/Deezer/DeezerTrackDbModel.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public class DeezerTrackDbModel
77
public long AlbumId { get; set; }
88
public int DiscNumber { get; set; }
99
public TimeSpan Duration { get; set; }
10+
public string Preview { get; set; }
1011
public bool ExplicitLyrics { get; set; }
1112
public string TrackHref { get; set; }
1213
public int TrackPosition { get; set; }

MiniMediaScanner/Repositories/DeezerRepository.cs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -147,21 +147,16 @@ from deezer_track track
147147
return tracks;
148148
}
149149

150-
public async Task<List<int>> GetAllDeezerArtistIdsAsync(int offset)
150+
public async Task<List<int>> GetAllDeezerArtistIdsAsync()
151151
{
152152
string query = @"SELECT artistid FROM deezer_artist
153-
order by name asc
154-
offset @offset
155-
limit @PagingSize";
153+
order by lastsynctime asc, nbalbum asc";
156154

157155
await using var conn = new NpgsqlConnection(_connectionString);
158156

159157
return (await conn
160-
.QueryAsync<int>(query, param: new
161-
{
162-
offset,
163-
PagingSize
164-
}))
158+
.QueryAsync<int>(query))
165159
.ToList();
166160
}
161+
167162
}

0 commit comments

Comments
 (0)