public async Task EvaluateImagesOnline(IProgress <int> progress, CancellationToken cancellationToken)
        {
            // Sign into firebase.
            if (await FirebaseClient.Client.SignInPromptUserIfNecessary())
            {
                // Find all media datas without annotation data.
                var mediaDatasWithoutAnnotationData = MediaDatas.Where(data => data.Meta.AnnotationData == null);

                var evaluated = 0;
                using (new DisposableLogger(GalleryLog.EvaluateOnlineBegin, (sw) => GalleryLog.EvaluateOnlineEnd(sw, evaluated)))
                {
                    IsEvaluating = true;
                    await mediaDatasWithoutAnnotationData.ForEachAsyncConcurrent(async media =>
                    {
                        try
                        {
                            // Evaluate media thumbnail online.
                            await media.EvaluateOnlineAsync(FirebaseClient.accessToken);
                        }
                        catch (Exception e)
                        {
                            // Log Exception.
                            LifecycleLog.Exception(e);
                        }
                        finally
                        {
                            // Update and then report progress.
                            evaluated++;
                            progress.Report(evaluated);
                        }
                    }, cancellationToken, 5);

                    IsEvaluating = false;
                }

                // Save online results to database.
                await DatabaseUtils.SaveAllMetadatasAsync(MediaDatas);
            }
        }