Пример #1
0
        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);
        }
Пример #2
0
        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();
            }
        }
Пример #3
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);

            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();
        }
Пример #4
0
        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);
        }
Пример #5
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();
            }
        }
Пример #6
0
        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; }));
        }
Пример #7
0
 public Task <bool> UpdateEvents(DataBaseWrapper db, User user)
 {
     lock (taskCacheLocker) {
         if (updateEventTask == null)
         {
             updateEventTask = InternalUpdateEvents(db, user);
         }
         return(updateEventTask);
     }
 }
Пример #8
0
        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);
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
        }
Пример #11
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);
            }
        }
Пример #12
0
        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);
        }
Пример #13
0
        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);
        }
Пример #14
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);
        }
Пример #15
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);
                }
            }));
        }
Пример #16
0
        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);
                }
            }));
        }
Пример #17
0
        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);
                    }
                }
            }));
        }
Пример #18
0
 public async Task <bool> AddFriend(DataBaseWrapper db, User user, string name)
 {
     return(true);
 }
Пример #19
0
        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();
            }
        }
Пример #20
0
 public async Task <bool> Data(DataBaseWrapper db, User user, Chat chat, object data)
 {
     return(true);
 }
Пример #21
0
 public async Task <bool> InjectEvent(DataBaseWrapper db, User user, Event e)
 {
     return(true);
 }
Пример #22
0
 public async Task <bool> SetGroupImage(DataBaseWrapper db, User user, Chat chat, object image)
 {
     return(true);
 }
Пример #23
0
 public async Task <bool> SetProfileImage(DataBaseWrapper db, User user, object image)
 {
     return(true);
 }
Пример #24
0
 public async Task <bool> SetStatus(DataBaseWrapper db, User user, string status)
 {
     return(true);
 }
Пример #25
0
 public async Task <bool> SetName(DataBaseWrapper db, User user, string name)
 {
     return(true);
 }
Пример #26
0
 public async Task <bool> RenameChat(DataBaseWrapper db, User user, Chat chat, string name)
 {
     return(true);
 }
Пример #27
0
 public async Task <bool> NewChat(DataBaseWrapper db, User user, List <User> users, string name)
 {
     return(true);
 }
Пример #28
0
        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...
            };
        }