private void onFavoriteClicked(object obj, EventArgs args)
 {
     try
     {
         if (running)
         {
             return;
         }
         prevButton.IsVisible     = false;
         nextButton.IsVisible     = false;
         FavoriteButton.IsVisible = false;
         FavoriteImage img = engine.Data.Favorites.FirstOrDefault(f => f.Id == imgs[position].Id);
         if (img != default(FavoriteImage))
         {
             engine.Data.Favorites.Remove(img);
             engine.Data.DataChanged(engine.Data, new DataChangedEventArgs(DataEnum.Favorites));
             FavoriteButton.Text      = "Favoris";
             prevButton.IsVisible     = true;
             nextButton.IsVisible     = true;
             FavoriteButton.IsVisible = true;
             return;
         }
         favoriteImage();
     } catch { }
 }
Пример #2
0
        public StatusView(bool hasQuoteView)
        {
            InitializeComponent();
            gridImageWrapper = new GridImageWrapper(MediaGrid);

            RootView.GestureRecognizers.Add(new TapGestureRecognizer()
            {
                Command = new Command(() =>
                {
                    if (Status == null)
                    {
                        return;
                    }
                    App.Navigation.PushAsync(new StatusExpandPage(DisplayStatus));
                })
            });

            HeaderView.GestureRecognizers.Add(new TapGestureRecognizer()
            {
                Command = new Command(async() =>
                {
                    if (Status == null)
                    {
                        return;
                    }
                    var selected = await Util.SelectAccount("유저를 확인할 계정을 선택하세요", Status.Issuer);
                    if (selected == null)
                    {
                        return;
                    }
                    await App.Navigation.PushAsync(new UserDetailPage(Status.Creater, selected));
                })
            });

            if (hasQuoteView)
            {
                quoteView = new StatusView(false);
                QuoteViewFrame.Content = (quoteView);
            }

            ProfileImage.GestureRecognizers.Add(new TapGestureRecognizer
            {
                Command = new Command(() =>
                {
                    //NotificationCell reuse
                    if (BindingContext is DataUser)
                    {
                        var user = BindingContext as DataUser;
                        App.Navigation.PushAsync(new UserDetailPage(user, App.Tail.Account.GetAccountGroup(user.Issuer[0])));
                        return;
                    }
                    App.Navigation.PushAsync(new UserDetailPage(DisplayStatus.Creater, App.Tail.Account.GetAccountGroup(Status.Issuer[0])));
                }),
                NumberOfTapsRequired = 1
            });

            ReplyImage.GestureRecognizers.Add(new TapGestureRecognizer
            {
                Command = new Command(async() =>
                {
                    var page = new ContentPage()
                    {
                        Style = (Style)Application.Current.Resources["backgroundStyle"]
                    };
                    var selected = await Util.SelectAccount("어떤 계정으로 답글을 작성할까요?", Status.Issuer);
                    if (selected == null)
                    {
                        return;
                    }
                    var view = new StatusWriterView(selected)
                    {
                        BindingContext = page
                    };
                    view.SetReplyStatus(Status);

                    page.Content = view;
                    page.Title   = "트윗작성";
#pragma warning disable CS4014 // 이 호출을 대기하지 않으므로 호출이 완료되기 전에 현재 메서드가 계속 실행됩니다.
                    App.Navigation.PushAsync(page);
#pragma warning restore CS4014 // 이 호출을 대기하지 않으므로 호출이 완료되기 전에 현재 메서드가 계속 실행됩니다.
                }),
                NumberOfTapsRequired = 1
            });

            RetweetImage.GestureRecognizers.Add(new TapGestureRecognizer
            {
                Command = new Command(async() =>
                {
                    try
                    {
                        var selected = await Util.SelectAccount("리트윗할 계정을 선택하세요", Status.Issuer);
                        if (selected == null)
                        {
                            return;
                        }
                        var animation = new Animation(v => RetweetImage.Rotation = v, 0, 360);
                        RetweetImage.Animate("Spin", animation, 16, 500, null, null, () => { return(true); });
                        await App.Tail.TwitterAPI.RetweetStatusAsync(selected.AccountForWrite, Status.ID);
                        DisplayStatus.IsRetweetedByUser = true;
                        UpdateButton();
                        RetweetImage.AbortAnimation("Spin");
#pragma warning disable CS4014 // 이 호출을 대기하지 않으므로 호출이 완료되기 전에 현재 메서드가 계속 실행됩니다.
                        RetweetImage.RotateTo(360);
#pragma warning restore CS4014 // 이 호출을 대기하지 않으므로 호출이 완료되기 전에 현재 메서드가 계속 실행됩니다.
                    }
                    catch (Exception e)
                    {
                        Util.HandleException(e);
                    }
                }),
                NumberOfTapsRequired = 1
            });

            FavoriteImage.GestureRecognizers.Add(new TapGestureRecognizer
            {
                Command = new Command(async() =>
                {
                    try
                    {
                        var selected = await Util.SelectAccount("관심글할 계정을 선택하세요", Status.Issuer);
                        if (selected == null)
                        {
                            return;
                        }

                        var animation = new Animation(v => FavoriteImage.Rotation = v, 0, 360);
                        FavoriteImage.Animate("Spin", animation, 16, 500, null, null, () => { return(true); });

                        await App.Tail.TwitterAPI.CreateFavoriteAsync(selected.AccountForWrite, Status.ID);
                        DisplayStatus.IsFavortedByUser = true;
                        UpdateButton();

                        FavoriteImage.AbortAnimation("Spin");
#pragma warning disable CS4014 // 이 호출을 대기하지 않으므로 호출이 완료되기 전에 현재 메서드가 계속 실행됩니다.
                        FavoriteImage.RotateTo(360);
#pragma warning restore CS4014 // 이 호출을 대기하지 않으므로 호출이 완료되기 전에 현재 메서드가 계속 실행됩니다.
                    }
                    catch (Exception e)
                    {
                        Util.HandleException(e);
                    }
                }),
                NumberOfTapsRequired = 1
            });

            DeleteImage.GestureRecognizers.Add(new TapGestureRecognizer
            {
                Command = new Command(async() =>
                {
                    var group = App.Tail.Account.GetAccountGroup(Status.Creater.ID);
                    if (group != null)
                    {
                        if (await Application.Current.MainPage.DisplayAlert("제거 확인", "이 트윗이 제거됩니다, 진행합니까?", "네", "아니오"))
                        {
                            try
                            {
                                await App.Tail.TwitterAPI.DestroyStatusAsync(group.AccountForWrite, Status.ID);
                            }
                            catch (Exception e)
                            {
                                await Application.Current.MainPage.DisplayAlert("오류", e.Message, "확인");
                                return;
                            }
                        }
                        else
                        {
                            return;
                        }
                    }
                    Statuses?.Remove(Status);
                }),
                NumberOfTapsRequired = 1
            });

            MoreImage.GestureRecognizers.Add(new TapGestureRecognizer
            {
                Command = new Command(async() =>
                {
                    try
                    {
                        DataStatus target = Status;
                        if (Status.RetweetedStatus != null)
                        {
                            if (!await Application.Current.MainPage.DisplayAlert("리트윗된 트윗", "이 트윗은 다른 유저가 리트윗한 트윗입니다. 어떤 트윗을 사용합니까?" +
                                                                                 "이 트윗을 사용해 다른 계정에서 리트윗/마음을 찍는경우 리트윗한 사람에게까지 알림이 갈 수 있습니다", "이 트윗", "원본트윗"))
                            {
                                target = Status.RetweetedStatus;
                            }
                        }

                        string[] moreActionSheet =
                        {
                            "다른 계정으로 리트윗",
                            "다른 계정으로 관심글",
                            "트윗 뮤트"
                        };
                        var selected = await Application.Current.MainPage.DisplayActionSheet("이 트윗으로...", "취소", null, moreActionSheet);
                        AccountGroup account;
                        switch (selected)
                        {
                        case "다른 계정으로 리트윗":
                            account = await Util.SelectAccount("리트윗할 계정을 선택하세요");
                            if (account == null)
                            {
                                return;
                            }

                            await App.Tail.TwitterAPI.RetweetStatusAsync(account.AccountForWrite, target.ID);
                            break;

                        case "다른 계정으로 관심글":
                            account = await Util.SelectAccount("관심글할 계정을 선택하세요");
                            if (account == null)
                            {
                                return;
                            }

                            await App.Tail.TwitterAPI.CreateFavoriteAsync(account.AccountForWrite, target.ID);
                            break;

                        case "트윗 뮤트":
                            App.Tail.Mute.RegisterMute(new DataMute()
                            {
                                Target = new DataMute.StatusTarget()
                                {
                                    ID     = Status.ID,
                                    Status = Status
                                }
                            });
                            Statuses?.Remove(Status);
                            break;
                        }
                    }
                    catch (Exception e)
                    {
                        Util.HandleException(e);
                    }
                }),
                NumberOfTapsRequired = 1
            });

            for (int i = 0; i < 4; i++)
            {
                int inx = i; //Value Copy
                gridImageWrapper[i].GestureRecognizers.Add(new TapGestureRecognizer
                {
                    Command = new Command(() =>
                    {
                        App.Navigation.PushAsync(new MediaPage(DisplayStatus, inx));
                    }),
                    NumberOfTapsRequired = 1
                });
            }

            pollViews = new PollView[4];
            for (int i = 0; i < 4; i++)
            {
                pollViews[i] = new PollView();
            }
        }
 private void loadImageProcess(int val)
 {
     try
     {
         if (imgs.Count == 0)
         {
             MainThread.BeginInvokeOnMainThread(() =>
             {
                 titleLabel.Text = "Il n'y a aucune image !";
             });
             running = false;
             return;
         }
         if (position > imgs.Count - 1)
         {
             page++;
             string dat = engine.Network.Getter.GetData(DataEnum.GallerySearch, new List <string>()
             {
                 page.ToString(), entrySearch.Text
             });
             List <SearchImage> tmp = ClientDataHandler.HandleSearchImagesCallBack(dat);
             imgs = imgs.Concat(tmp).ToList();
             loadImageProcess(val);
             return;
         }
         else if (position < 0)
         {
             position = imgs.Count - 1;
         }
         Uri ur = new Uri(imgs[position].Source);
         if (!isImage(ur.AbsolutePath))
         {
             position += val;
             loadImageProcess(val);
             return;
         }
         MainThread.BeginInvokeOnMainThread(() =>
         {
             try
             {
                 img.Source = ImageSource.FromStream(() =>
                 {
                     WebClient client = new WebClient();
                     Stream stream    = client.OpenRead(imgs[position].Source);
                     client.Dispose();
                     return(stream);
                 });
             }
             catch
             {
                 loadImageProcess(val);
                 return;
             }
             titleLabel.Text       = "Titre: " + imgs[position].Title;
             descriptionLabel.Text = imgs[position].Description;
         });
     } catch
     {
         running = false;
     }
     try
     {
         FavoriteImage fav = engine.Data.Favorites.FirstOrDefault(f => f.Id == imgs[position].Id);
         MainThread.BeginInvokeOnMainThread(() =>
         {
             prevButton.IsVisible     = true;
             nextButton.IsVisible     = true;
             FavoriteButton.IsVisible = true;
             if (fav == default(FavoriteImage))
             {
                 FavoriteButton.Text = "Favoris";
             }
             else
             {
                 FavoriteButton.Text = "X";
             }
         });
     } catch { }
     running = false;
 }