StreetFoo.Client.ReportItem.PushServerUpdatesAsync C# (CSharp) Method

PushServerUpdatesAsync() static private method

static private PushServerUpdatesAsync ( ) : System.Threading.Tasks.Task
return System.Threading.Tasks.Task
        internal static async Task PushServerUpdatesAsync()
        {
            var logger = LogManagerFactory.DefaultLogManager.GetLogger<ReportItem>();
            logger.Info("Pushing server updates...");

            // get all of the changed reports...
            var reports = await GetLocallyChangedReportsAsync();

            // how many?
            logger.Info("Found '{0}' changed report(s)...", reports.Count());

            // if nothing, quit...
            if (!(reports.Any()))
                return;

            // otherwise...
            var tasks = new List<Task>();
            foreach (var report in reports)
                tasks.Add(report.PushServerUpdateAsync());

            // wait...
            await Task.WhenAll(tasks);

            // finished...
            logger.Info("Finished pushing updates.");
        }

Usage Example

Example #1
0
        protected override async Task DoRunAsync(IBackgroundTaskInstance instance)
        {
            // try and lock...
            if (!(await CreateLockFileAsync()))
            {
                this.Logger.Info("Locked - skipping...");
                return;
            }

            try
            {
                // should we run?
                if (!(await CanRunAsync()))
                {
                    return;
                }

                // send up changes...
                await ReportItem.PushServerUpdatesAsync();

                // still have connectivity?
                if (StreetFooRuntime.HasConnectivity)
                {
                    this.Logger.Info("Getting reports from server...");

                    // get...
                    var proxy   = TinyIoCContainer.Current.Resolve <IGetReportsByUserServiceProxy>();
                    var reports = await proxy.GetReportsByUserAsync();

                    // errors?
                    if (!(reports.HasErrors))
                    {
                        this.Logger.Info("Stashing reports on disk...");

                        // save...
                        var json = JsonConvert.SerializeObject(reports.Reports);
                        var file = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(SpoolFilename, CreationCollisionOption.ReplaceExisting);

                        await FileIO.WriteTextAsync(file, json);
                    }
                }
            }
            finally
            {
                // reset the lock file...
                ResetLockFileAsync();
            }
        }