public async Task <bool> SendImage(DataBaseWrapper db, User user, Chat chat, Bitmap bitmap) { string encodedJson = escape(String.Format("{{\"id\":\"{0}\", \"data\":{{\"conversation\":\"{1}\"}}}}", user.id, chat.conversation)); var success = false; NameValueCollection nvc = new NameValueCollection(); nvc.Add("msg", encodedJson); string tmp = null; while (tmp == null) { tmp = HttpUploadFile(user.server + "/xjcp.php", bitmap, "uploadedfile", "image/png", nvc); } var result = JsonValue.Parse(tmp); try { success = 0 == await EventHandling(db, result); if (!result.ContainsKey("onData")) { success = false; } } catch (Exception ex) { Log.Error("BlaChat", ex.StackTrace); } return(success); }
protected override void OnCreate(Bundle bundle) { db = new DataBaseWrapper(this.Resources); if ((setting = db.Table <Setting> ().FirstOrDefault()) == null) { db.Insert(setting = new Setting()); } StartupTheme = setting.Theme; SetTheme(setting.Theme); base.OnCreate(bundle); new UpdateChecker(this, db, setting); // Check if the application knows a user. User user = db.Table <User>().FirstOrDefault(); if (user != null && user.user != null) { initializeAuthenticated(user); } else { initializeNotAuthenticated(); } }
protected override void OnCreate(Bundle bundle) { db = new DataBaseWrapper(this.Resources); if ((setting = db.Table <Setting> ().FirstOrDefault()) == null) { db.Insert(setting = new Setting()); } SetTheme(setting.Theme); base.OnCreate(bundle); network = new AsyncNetwork(); db = new DataBaseWrapper(this.Resources); user = db.Table <User>().FirstOrDefault(); if (setting.FontSize == Setting.Size.large) { SetContentView(Resource.Layout.SettingsLarge); } else { SetContentView(Resource.Layout.Settings); } InitializeView(); }
private async Task <int> EventHandling(DataBaseWrapper db, JsonValue result) { if (result.ContainsKey("events")) { JsonArray arr = (JsonArray)result ["events"]; foreach (JsonValue v in arr) { var e = new Event() { type = v ["type"], msg = v ["msg"], nick = v ["nick"], text = v ["text"], time = v ["time"], author = v ["author"] }; db.Insert(e); } if (backgroundService != null) { await backgroundService.UpdateNotifications(); } } if (result.ContainsKey("onLoginError")) { return(1); } return(0); }
public UpdateChecker(Context ctx, DataBaseWrapper db, Setting setting) { if (string.IsNullOrEmpty(setting.NewestVersion)) { setting.NewestVersion = Setting.CurrentVersion; } var connectivityManager = (ConnectivityManager)ctx.GetSystemService(Context.ConnectivityService); if (setting.Synchronisation != Setting.Frequency.wlan || connectivityManager.GetNetworkInfo(ConnectivityType.Wifi).GetState() == NetworkInfo.State.Connected) { new Thread(async() => { string contentsTask; try { using (var httpClient = new HttpClient()) { contentsTask = await httpClient.GetStringAsync("https://raw.githubusercontent.com/Bla-Chat/Android/master/version.txt"); } } catch (Exception e) { Log.Error("BlaChat", e.StackTrace); contentsTask = null; } finally { //semaphore.Release (); } if (contentsTask != null) { setting.NewestVersion = contentsTask; db.Update(setting); } }).Start(); } }
public Task <bool> SendMessage(DataBaseWrapper db, User user, Chat chat, string message) { message = message.Replace("\\", "\\\\"); message = message.Replace("\"", "\\\""); string request = String.Format("\"message\":{{\"conversation\":\"{0}\", \"message\":\"{1}\"}}", chat.conversation, message); return(CommonNetworkOperations(db, request, user, "onMessage", x => { return; })); }
public Task <bool> UpdateEvents(DataBaseWrapper db, User user) { lock (taskCacheLocker) { if (updateEventTask == null) { updateEventTask = InternalUpdateEvents(db, user); } return(updateEventTask); } }
private string getLatestTime(DataBaseWrapper db) { var x = db.Table <Chat>(); string latest_conversation = x.OrderByDescending(e => e.time).First <Chat>().conversation; var y = db.Table <Message>(); Message tmp = y.Where(q => q.conversation == latest_conversation).OrderBy(e => e.time).Last <Message>(); string lastid = String.Format("\"time\":\"{0}\"", tmp.time); return(lastid); }
public async Task <bool> RemoveEvent(DataBaseWrapper db, User user, Event e) { string encodedJson = escape(String.Format("{{\"id\":\"{0}\", \"removeEvent\":{{\"conversation\":\"{1}\"}}}}", user.id, e.msg)); var result = JsonValue.Parse(await Download(user.server + "/xjcp.php?msg=" + encodedJson)); var success = false; try { success = 0 == await EventHandling(db, result); } catch (Exception ex) { Log.Error("BlaChat", ex.StackTrace); } return(success); }
private async Task <int> HandleEvent(DataBaseWrapper db, AsyncNetwork network, User user, Event e) { if (e.type != "onMessage") { return(0); } var chat = db.Get <Chat> (e.msg); if (chat == null) { while (!await network.UpdateChats(db, user)) { await network.Authenticate(db, user); } chat = db.Get <Chat> (e.msg); } chat.time = e.time; db.Update(chat); var msg = new Message(); msg.conversation = chat.conversation; msg.author = e.author; msg.nick = e.nick; msg.text = e.text; msg.time = e.time; db.InsertIfNotContains <Message> (msg); ResetUpdateInterval(); if (e.msg != ActiveConversation && user.user != e.nick) { chat.Marked = true; db.Update(chat); if (chat.Notifications) { await Notify(network, e.nick, e.text); } } if (ChatActivity != null) { ChatActivity.OnUpdateRequested(); } else if (MainActivity != null) { MainActivity.OnUpdateRequested(); } return(0); }
protected override void OnCreate(Bundle bundle) { db = new DataBaseWrapper(this.Resources); if ((setting = db.Table <Setting> ().FirstOrDefault()) == null) { db.Insert(setting = new Setting()); } SetTheme(setting.Theme); base.OnCreate(bundle); if (Intent.ActionSend == Intent.Action) { if (Intent.GetStringExtra(Intent.ExtraText) != null) { textShare = Intent.GetStringExtra(Intent.ExtraText); } else { var uriString = Intent.GetParcelableExtra(Intent.ExtraStream).ToString(); var uri = Android.Net.Uri.Parse(uriString); if (uri != null) { fileset.Add(uri); } } } else if (Intent.ActionSendMultiple == Intent.Action) { var uris = Intent.GetParcelableArrayListExtra(Intent.ExtraStream); if (uris != null) { foreach (var uri in uris) { fileset.Add(Android.Net.Uri.Parse(uri.ToString())); } } } // Check if the application knows a user. User user = db.Table <User>().FirstOrDefault(); if (user != null && user.user != null) { initializeAuthenticated(user); } }
private async Task <bool> InternalUpdateEvents(DataBaseWrapper db, User user) { string encodedJson = escape(String.Format("{{\"id\":\"{0}\"}}", user.id)); var result = JsonValue.Parse(await Download(user.server + "/xjcp.php?msg=" + encodedJson)); var success = false; try { success = 0 == await EventHandling(db, result); } catch (Exception ex) { Log.Error("BlaChat", ex.StackTrace); } updateEventTask = null; return(success); }
private async Task <bool> CommonNetworkOperations(DataBaseWrapper db, String request, User user, String actionKey, Action <JsonValue> action) { string encodedJson = escape(String.Format("{{\"id\":\"{0}\", {1}}}", user.id, request)); var result = JsonValue.Parse(await Download(user.server + "/xjcp.php?msg=" + encodedJson)); bool success = false; try { if (result.ContainsKey(actionKey)) { action.Invoke(result [actionKey]); success = true; } } catch (Exception ex) { Log.Error("BlaChat", ex.StackTrace); } return(success && await EventHandling(db, result) == 0); }
public async Task <bool> Authenticate(DataBaseWrapper db, User user) { string encodedJson = escape(String.Format("{{\"user\":\"{0}\", \"pw\":\"{1}\"}}", user.user, user.password)); bool success = false; var result = JsonValue.Parse(await Download(user.server + "/xjcp.php?msg=" + encodedJson)); try { if (result.ContainsKey("id")) { user.id = result ["id"]; db.Update(user); success = true; } } catch (Exception ex) { Log.Error("BlaChat", ex.StackTrace); } finally { EventHandling(db, result); } return(success && await EventHandling(db, result) == 0); }
public Task <bool> UpdateContacts(DataBaseWrapper db, User user) { string request = String.Format("\"getContacts\":{{}}"); return(CommonNetworkOperations(db, request, user, "onGetContacts", x => { JsonArray arr = (JsonArray)x; foreach (JsonValue v in arr) { var contact = db.Get <Contact> (v ["nick"]); if (contact == null) { contact = new Contact() { nick = v ["nick"] }; db.Insert(contact); } contact.name = v ["name"]; contact.status = v ["status"]; db.Update(contact); } })); }
public Task <bool> UpdateChats(DataBaseWrapper db, User user) { string request = String.Format("\"getChats\":{{}}"); return(CommonNetworkOperations(db, request, user, "onGetChats", x => { JsonArray arr = (JsonArray)x; foreach (JsonValue v in arr) { string conv = v ["conversation"]; var chat = db.Get <Chat> (conv); if (chat == null) { chat = new Chat() { conversation = conv }; db.Insert(chat); } chat.name = v ["name"]; chat.time = v ["time"]; db.Update(chat); } })); }
public Task <bool> UpdateHistory(DataBaseWrapper db, User user, Chat chat, int count) { string request = String.Format("\"getHistory\":{{\"conversation\":\"{0}\", \"count\":\"{1}\"}}", chat.conversation, count); return(CommonNetworkOperations(db, request, user, "onGetHistory", arr => { var msgs = arr ["messages"]; string conversation = arr ["conversation"]; foreach (JsonValue x in msgs) { try { var msg = new Message(); msg.conversation = conversation; msg.author = x ["author"]; msg.nick = x ["nick"]; msg.text = x ["text"]; msg.time = x ["time"]; db.InsertIfNotContains <Message>(msg); } catch (Exception e) { Log.Error("BlaChat", e.StackTrace); } } })); }
public async Task <bool> AddFriend(DataBaseWrapper db, User user, string name) { return(true); }
public void DoWork() { db = new DataBaseWrapper(Resources); network = new AsyncNetwork(); network.SetBackgroundService(this); user = db.Table <User>().FirstOrDefault(); var connectivityManager = (ConnectivityManager)GetSystemService(ConnectivityService); if (user != null && user.user != null) { var t = new Thread(async() => { while (true) { Setting.Frequency f = db.Table <Setting>().FirstOrDefault().Synchronisation; if (f != Setting.Frequency.wlan || connectivityManager.GetNetworkInfo(ConnectivityType.Wifi).GetState() == NetworkInfo.State.Connected) { while (!await network.UpdateEvents(db, user)) { await network.Authenticate(db, user); } } // Wifi connection gets normal updates, other networks get 4 times worse update time. if (connectivityManager.GetNetworkInfo(ConnectivityType.Wifi).GetState() == NetworkInfo.State.Connected) { connectivityMode = 1; } else { connectivityMode = 4; } switch (f) { case Setting.Frequency.often: Mode = 1; break; case Setting.Frequency.normal: Mode = 2; break; case Setting.Frequency.rare: Mode = 4; break; case Setting.Frequency.wlan: Mode = 2; break; } Thread.Sleep(UpdateInterval * Mode * connectivityMode); if (UpdateInterval < 12000) { UpdateInterval += 1000; } else if (UpdateInterval < 30000) { UpdateInterval += 2000; } else { UpdateInterval = 60000; } } } ); t.Start(); } else { StopSelf(); } }
public async Task <bool> Data(DataBaseWrapper db, User user, Chat chat, object data) { return(true); }
public async Task <bool> InjectEvent(DataBaseWrapper db, User user, Event e) { return(true); }
public async Task <bool> SetGroupImage(DataBaseWrapper db, User user, Chat chat, object image) { return(true); }
public async Task <bool> SetProfileImage(DataBaseWrapper db, User user, object image) { return(true); }
public async Task <bool> SetStatus(DataBaseWrapper db, User user, string status) { return(true); }
public async Task <bool> SetName(DataBaseWrapper db, User user, string name) { return(true); }
public async Task <bool> RenameChat(DataBaseWrapper db, User user, Chat chat, string name) { return(true); }
public async Task <bool> NewChat(DataBaseWrapper db, User user, List <User> users, string name) { return(true); }
protected override void OnCreate(Bundle bundle) { db = new DataBaseWrapper(this.Resources); if ((setting = db.Table <Setting> ().FirstOrDefault()) == null) { db.Insert(setting = new Setting()); } StartupTheme = setting.Theme; SetTheme(setting.Theme); base.OnCreate(bundle); SetContentView(Resource.Layout.ChatActivity); conversation = Intent.GetStringExtra("conversation"); chat = db.Get <Chat> (conversation); visibleMessages = chat.VisibleMessages; if (visibleMessages <= 0) { visibleMessages = setting.VisibleMessages; } if (visibleMessages <= 0) { visibleMessages = 30; } Title = SmileyTools.GetSmiledTextUTF(chat.name); ActionBar.SetDisplayHomeAsUpEnabled(true); ActionBar.SetIcon(Resource.Drawable.Icon); user = db.Table <User>().FirstOrDefault(); Button send = FindViewById <Button>(Resource.Id.send); send.Click += delegate { TextView message = FindViewById <TextView>(Resource.Id.message); var msg = message.Text; message.Text = ""; if (msg.Equals("")) { return; } LinearLayout messageList = FindViewById <LinearLayout>(Resource.Id.messageLayout); AddMessage(messageList, new Message() { time = "sending", author = "Du", nick = user.user, text = msg, conversation = this.conversation }); ScrollView scrollView = FindViewById <ScrollView>(Resource.Id.messageScrollView); scrollView.FullScroll(FocusSearchDirection.Down); scrollView.Post(() => scrollView.FullScroll(FocusSearchDirection.Down)); OnBind(); new Thread(async() => { while (!await network.SendMessage(db, user, chat, msg)) { await network.Authenticate(db, user); } }).Start(); }; Button smiley = FindViewById <Button>(Resource.Id.smile); smiley.Click += delegate { // TODO implement smiley stuff... }; }