Exemple #1
0
        public int AddToOutQueue(DbSaveableEntity saveableEntity)
        {
            var asString  = saveableEntity.getJson();
            var outEntity = new OutEntity()
            {
                Id       = saveableEntity.Id.Value,
                DataBlob = asString
            };
            var res = new OutDb().DB.InsertOrReplace(outEntity);

            return(res);
        }
Exemple #2
0
        public async Task <int> doServerSync(Action <string, ToastLength> makeToast)
        {
            makeToast = (string a, ToastLength b) => { };
            //var recs = GetRecordsToSync();
            //if (recs.Count == 0)
            //{
            //    makeToast("No unsynced records", ToastLength.Short);
            //    return 0;
            //}

            var hasConnection = await checkConnection();

            if (!hasConnection)
            {
                isRunning = 0;
                makeToast?.Invoke("No connection detected", ToastLength.Long);
                return(0);
            }
            makeToast("Connected tested", ToastLength.Short);
            var recs = new List <OutEntity>();

            //await GetCloudEntities1("appusers");


            return(recs.Count);

            var cloudDb = new OutDb().DB;

            var recIndex = recs.Count - 1;

            while (recIndex >= 0 && hasConnection)
            {
                var outEntity = recs[recIndex];
                var ppdataset = DbSaveableEntity.fromJson <GeneralEntityDataset>(
                    new KindItem(outEntity.DataBlob));
                var saveable = new DbSaveableEntity(ppdataset)
                {
                    kindName = new KindName(ppdataset.FormName)
                };

                var saved = false;
                for (int i = 0; i < 4; i++)
                {
                    try
                    {
                        await Save(saveable);

                        //we remove this key from the database
                        saved = true;
                    }
                    catch (Google.GoogleApiException gex)
                    {
                        //todo: mark this record as bad to prevent it blocking for life

                        //cloudDb.InsertOrReplace(new OutEntityUnsynced().load(outEntity));
                        //cloudDb.Delete<OutEntity>(saveable.Id.Value);
                        //break;
                    }
                    catch (System.Net.WebException wex)
                    {
                        //perhaps lost connection
                        //we alllow it to spin for now
                    }
                    catch (Exception ex)
                    {
                        //unknown exception
                    }
                    finally { }
                    if (saved)
                    {
                        try
                        {
                            //we delete the record from downloads db
                            //var deleted = cloudDb.Delete<OutEntity>(saveable.Id.Value);
                        }
                        catch
                        {
                        }
                        break;
                    }
                    else
                    {
                        //lets add a 2 second delay in case it failed the first time
                        await Task.Delay(TimeSpan.FromMilliseconds(2000));
                    }
                }
                recIndex--;
                hasConnection = await checkConnection();
            }
            return(0);
        }
Exemple #3
0
        async Task <int> doServerSync(Action <string, ToastLength> makeToast)
        {
            makeToast("Getting records to sync", ToastLength.Short);
            var recs = GetRecordsToSync();

            if (recs.Count == 0)
            {
                makeToast("No unsynced records", ToastLength.Short);
                return(0);
            }

            makeToast("Checking internet connection", ToastLength.Short);

            var hasConnection = await checkConnection();

            if (!hasConnection)
            {
                isRunning = 0;
                makeToast("No connection detected", ToastLength.Long);
                //if (makeToast != null)
                //{
                //    makeToast("No connection detected", ToastLength.Long);
                //}
                return(0);
            }

            makeToast("Connection checked", ToastLength.Short);

            var cloudDb    = new OutDb().DB;
            var totalCount = recs.Count;
            var recIndex   = recs.Count - 1;

            while (recIndex >= 0 && hasConnection)
            {
                makeToast(
                    string.Format("Processing {0} of {1}",
                                  totalCount - recIndex, totalCount)
                    , ToastLength.Short);
                var outEntity = recs[recIndex];
                var ppdataset = DbSaveableEntity.fromJson <GeneralEntityDataset>(new KindItem(outEntity.DataBlob));
                var saveable  = new DbSaveableEntity(ppdataset)
                {
                    kindName = new KindName(ppdataset.FormName)
                };

                var saved = false;
                var shouldCheckConnection = false;
                for (int i = 0; i < 4; i++)
                {
                    makeToast(
                        string.Format("Saving {0} of {1}" + (i == 0 ? "" : " (Attempt {2} of {3})"),
                                      totalCount - recIndex, totalCount, i + 1, 4)
                        , ToastLength.Short);
                    try
                    {
                        await Save(saveable);

                        //we remove this key from the database
                        saved = true;
                    }
                    catch (Google.GoogleApiException gex)
                    {
                        makeToast("Not saved - Google Api Exception", ToastLength.Short);
                        //todo: mark this record as bad to prevent it blocking for life

                        //cloudDb.InsertOrReplace(new OutEntityUnsynced().load(outEntity));
                        //cloudDb.Delete<OutEntity>(saveable.Id.Value);
                        //break;
                    }
                    catch (System.Net.WebException wex)
                    {
                        makeToast("Not saved - Web Exception", ToastLength.Short);
                        //perhaps lost connection
                        //we alllow it to spin for now
                    }
                    catch (Exception ex)
                    {
                        makeToast("Not saved - Other Exception", ToastLength.Short);
                        //unknown exception
                    }
                    finally { }
                    if (saved)
                    {
                        try
                        {
                            var deleted = cloudDb.Delete <OutEntity>(saveable.Id.Value);
                        }
                        catch
                        {
                        }
                        break;
                    }
                    else
                    {
                        //lets add a 2 second delay in case it failed the first time
                        if (i < 3)
                        {
                            makeToast("Not saved. Awaiting for 2 secs", ToastLength.Short);
                            await Task.Delay(TimeSpan.FromMilliseconds(2000));
                        }
                        else
                        {
                            //we check the connection
                            shouldCheckConnection = true;
                        }
                    }
                }
                recIndex--;

                if (recIndex >= 0 && shouldCheckConnection)
                {
                    makeToast("Checking connection", ToastLength.Short);
                    hasConnection = await checkConnection();
                }
            }
            return(0);
        }