public void ScheduleJob(SMSReaderFilterModel smsReaderFilterModel) { Intent smsMessageModelIntent = new Intent(context, typeof(SmsReaderJobIntentService)); smsMessageModelIntent.PutExtra("smsReaderFilterModel", JsonConvert.SerializeObject(smsReaderFilterModel)); SmsReaderJobIntentService.EnqueueWork(context, smsMessageModelIntent); }
public async Task HandleWork(SMSReaderFilterModel smsReaderFilterModel) { var messageList = new Dependency.SMS.AndoidProcessSMS().GetAllSMS(smsReaderFilterModel); var totalList = messageList.Count(); var counter = 1; //Toast.MakeText(context, string.Format("starting sync task size {0}", totalList), ToastLength.Long); foreach (var item in messageList) { try { await SMSSaverRepository.SaveMessageToDb(item); //if (context != null) // Toast.MakeText(context, string.Format("{0} of {1} completed", counter, totalList), ToastLength.Long); } catch (Exception ex) { //if (context != null) // Toast.MakeText(context, string.Format("{0} of {1} failed", counter, totalList), ToastLength.Long); try { await App.Database.DatabaseConnection.InsertAsync(new FailedSyncSMS { Sorted = false, TextMessage = item.TextMessage, TransactionId = item.TransactionCode, UnixTimeStamp = App.Database.GetUnixTimeStamp(), ErrorMessage = ex.Message }); } catch (Exception) { //do not do shit } } counter++; } }
public IEnumerable <SmsMessageModel> GetAllSMS(SMSReaderFilterModel filterModel) { var result = new List <SmsMessageModel>(); string[] projection = new string[] { Telephony.Sms.Inbox.InterfaceConsts.Id, Telephony.Sms.Inbox.InterfaceConsts.Address, Telephony.Sms.Inbox.InterfaceConsts.Body, Telephony.Sms.Inbox.InterfaceConsts.Date, Telephony.Sms.Inbox.InterfaceConsts.DateSent }; List <String> selectionArgs = new List <string>(); //address filter string whereClause = " 1 = 1 "; foreach (var allowedSender in filterModel.SenderId) { whereClause = string.Format("{0} and {1} = ? ", whereClause, Telephony.Sms.Inbox.InterfaceConsts.Address); selectionArgs.Add(allowedSender); } //end address filter //from date filter var universalTimeFrom = filterModel.StartDate.Date; var fromDateUnixTime = App.Database.GetUnixTimeStampFromUniversalTimeOfset(universalTimeFrom).ToUnixTimeMilliseconds(); whereClause = string.Format("{0} and {1} >= ? ", whereClause, Telephony.Sms.Inbox.InterfaceConsts.DateSent); selectionArgs.Add(fromDateUnixTime.ToString()); //to date filter var universalTimeTo = filterModel.EndDate; var toDateUnixTime = App.Database.GetUnixTimeStampFromUniversalTimeOfset(universalTimeTo).ToUnixTimeMilliseconds(); whereClause = string.Format("{0} and {1} < ? ", whereClause, Telephony.Sms.Inbox.InterfaceConsts.DateSent); selectionArgs.Add(toDateUnixTime.ToString()); var sortOrder = string.Format("{0} desc", Telephony.Sms.Inbox.InterfaceConsts.DateSent); var cursor = context.ContentResolver.Query(Telephony.Sms.Inbox.ContentUri, projection, whereClause, selectionArgs.ToArray(), sortOrder); if (cursor != null && cursor.MoveToFirst()) { do { String id = cursor.GetString(cursor.GetColumnIndexOrThrow(Telephony.Sms.Inbox.InterfaceConsts.Id)); String address = cursor.GetString(cursor.GetColumnIndexOrThrow(Telephony.Sms.Inbox.InterfaceConsts.Address)); String body = cursor.GetString(cursor.GetColumnIndexOrThrow(Telephony.Sms.Inbox.InterfaceConsts.Body)); String date = cursor.GetString(cursor.GetColumnIndexOrThrow(Telephony.Sms.Inbox.InterfaceConsts.Date)); String dateSent = cursor.GetString(cursor.GetColumnIndexOrThrow(Telephony.Sms.Inbox.InterfaceConsts.DateSent)); DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(Convert.ToInt64(dateSent)); result.Add(new SmsMessageModel { SenderId = address, TextMessage = body, SentDate = dateTimeOffset.UtcDateTime }); } while (cursor.MoveToNext()); } return(result); }