public void Post()
        {
            if (Text.Length == 0 || !IsTextBoxEnabled)
            {
                return;
            }

            IsTextBoxEnabled = false;
            Task.Run(() => {
                var mail = Mail;

                //公式動画は184を付けて投稿出来ない
                if (Settings.Instance.Use184)
                {
                    mail += " 184";
                }
                var no = "";// Owner.CommentInstance.Post(Text, mail, Vpos);

                if (no != null)
                {
                    var entry     = new NicoNicoCommentEntry();
                    entry.No      = no;
                    entry.Mail    = Mail;
                    entry.Vpos    = Vpos;
                    entry.Content = Text;

                    // Owner.Proxy.Call("AsInjectMyComment", entry.ToJson());
                    Text = "";
                }
                IsTextBoxEnabled = true;
            });
        }
        public void Post()
        {
            if (Text.Length == 0 || !IsTextBoxEnabled)
            {
                return;
            }

            IsTextBoxEnabled = false;
            Task.Run(() => {
                var mail = Mail;

                //公式動画は184を付けて投稿出来ない
                if (Settings.Instance.Use184 && !Owner.VideoData.ApiData.IsOfficial)
                {
                    mail += " 184";
                }
                var no = Owner.CommentInstance.Post(Text, mail, Vpos);

                if (no != null)
                {
                    var entry  = new NicoNicoCommentEntry();
                    entry.No   = no;
                    entry.Mail = Mail;
                    entry.Vpos = Vpos;

                    entry.Content = Text;

                    Owner.Handler.InvokeScript("AsInjectMyComment", entry.ToJson());
                    Text = "";
                }
                IsTextBoxEnabled = true;
            });
        }
Beispiel #3
0
        //コメント投下
        public async void Post()
        {
            //連打して2回ポストされないように
            //割りと重要かなって
            if (PostPending || Text.TrimEnd().Length == 0)
            {
                return;
            }
            PostPending = true;
            var vpos = CurrentVpos;


            VideoCommentListViewModel target = null;

            if (Owner.Owner.ApiData.IsChannelVideo)
            {
                target = Owner.CommentListList.Where(e => e.CommentListInstance.ListName == "チャンネルコメント").First();
            }
            else
            {
                target = Owner.CommentListList.Where(e => e.CommentListInstance.ListName == "通常コメント").First();
            }
            //コメントを投稿してコメントナンバーを取得する
            var number = await Owner.CommentInstance.PostAsync(target.CommentListInstance, vpos, Mail, Text);

            //APIを叩いて返ってきたコメント番号をもとにhtml5で描画してみる
            //APIの応答が遅いと表示される前に描画タイミングが過ぎてしまうかもね
            if (number != -1)
            {
                var entry = new NicoNicoCommentEntry()
                {
                    Number     = number,
                    Vpos       = vpos,
                    PostedAt   = UnixTime.ToUnixTime(DateTime.Now),
                    Anonymity  = Settings.Instance.Use184,
                    UserId     = App.ViewModelRoot.CurrentUser.UserId,
                    Mail       = Mail,
                    Content    = Text,
                    JustPosted = true
                };
                entry.DisassembleMail();
                target.CommentList.Add(new VideoCommentEntryViewModel(Owner, entry));

                //TextBoxを空にする
                Text = "";
            }

            //処理終わり
            PostPending = false;
        }
Beispiel #4
0
 public CommentEntryViewModel(NicoNicoCommentEntry entry)
 {
     Entry = entry;
 }
Beispiel #5
0
        //コメントをフィルタリングする アウトならtrue、セーフならfalse
        public static bool Filter(NicoNicoCommentEntry entry)
        {
            foreach(NGCommentEntry ng in Settings.Instance.NGList) {

                if(!ng.IsEnabled) {

                    continue;
                }

                switch(ng.Type) {
                    case NGType.RegEx:

                        if(Regex.Match(entry.Content, ng.Content).Success) {

                            return true;
                        }
                        break;
                    case NGType.Command:

                        if(entry.Mail.Contains(ng.Content)) {

                            return true;
                        }

                        break;
                    case NGType.UserId:

                        if(entry.UserId == ng.Content) {

                            return true;
                        }
                        break;
                    case NGType.Word:

                        if(entry.Content == ng.Content) {

                            return true;
                        }
                        break;
                    case NGType.WordContains:

                        if(entry.Content.Contains(ng.Content)) {

                            return true;
                        }
                        break;
                }

            }

            return false;
        }
Beispiel #6
0
 public CommentEntryViewModel(NicoNicoCommentEntry entry, VideoViewModel vm)
 {
     Entry = entry;
     Owner = vm;
 }
        public void Post()
        {
            if(Text.Length == 0 || !IsTextBoxEnabled) {

                return;
            }

            IsTextBoxEnabled = false;
            Task.Run(() => {

                var mail = Mail;

                //公式動画は184を付けて投稿出来ない
                if(Settings.Instance.Use184) {

                    mail += " 184";
                }
                var no = "";// Owner.CommentInstance.Post(Text, mail, Vpos);

                if(no != null) {

                    var entry = new NicoNicoCommentEntry();
                    entry.No = no;
                    entry.Mail = Mail;
                    entry.Vpos = Vpos;
                    entry.Content = Text;

                   // Owner.Proxy.Call("AsInjectMyComment", entry.ToJson());
                    Text = "";

                }
                IsTextBoxEnabled = true;
            });
        }
 public CommentEntryViewModel(NicoNicoCommentEntry entry)
 {
     Entry = entry;
 }
        public void Filter(NicoNicoCommentEntry entry)
        {
            if (Settings.Instance.HideWiiUComment)
            {
                if (entry.Mail.Contains("device:WiiU"))
                {
                    entry.Rejected = true;
                    return;
                }
            }
            if (Settings.Instance.Hide3DSComment)
            {
                if (entry.Mail.Contains("device:3DS"))
                {
                    entry.Rejected = true;
                    return;
                }
            }

            switch (Settings.Instance.NGSharedLevel)
            {
            case "無":
                break;

            case "弱":
                if (entry.Score <= -10000)
                {
                    entry.Rejected = true;
                    return;
                }
                break;

            case "中":
                if (entry.Score <= -4800)
                {
                    entry.Rejected = true;
                    return;
                }
                break;

            case "強":
                if (entry.Score <= -1000)
                {
                    entry.Rejected = true;
                    return;
                }
                break;

            case "最強":
                if (entry.Score < 0)
                {
                    entry.Rejected = true;
                    return;
                }
                break;
            }

            foreach (var ng in NGFilter.NGList)
            {
                if (!ng.IsEnabled)
                {
                    continue;
                }
                switch (ng.Type)
                {
                case NGType.RegEx:

                    if (Regex.Match(entry.Content, ng.Content).Success)
                    {
                        entry.Rejected = true;
                        return;
                    }
                    break;

                case NGType.Command:

                    if (entry.Mail.Contains(ng.Content))
                    {
                        entry.Rejected = true;
                        return;
                    }

                    break;

                case NGType.UserId:

                    if (entry.UserId == ng.Content)
                    {
                        entry.Rejected = true;
                        return;
                    }
                    break;

                case NGType.Word:

                    if (entry.Content == ng.Content)
                    {
                        entry.Rejected = true;
                        return;
                    }
                    break;

                case NGType.WordContains:

                    if (entry.Content.Contains(ng.Content))
                    {
                        entry.Rejected = true;
                        return;
                    }
                    break;
                }
            }
        }
        private void OnReceive(object sender, XmlSocketReceivedEventArgs e)
        {
            var xml = new XmlDocument();

            try {

                xml.LoadXml(e.Xml);

                Console.WriteLine(e.Xml);

                var thread = xml.SelectSingleNode("/thread");
                if(thread != null) {

                    Ticket = thread.Attributes["ticket"].Value;
                    if(thread.Attributes["last_res"] != null) {

                        LastRes = int.Parse(thread.Attributes["last_res"].Value);
                    }
                    ResFrom = LastRes + 1;

                    return;
                }

                var chat = xml.SelectSingleNode("/chat");
                if(chat != null) {

                    var comment = new NicoNicoCommentEntry();
                    comment.No = (++CommentNum).ToString();
                    comment.Vpos = chat.Attributes["vpos"].Value;
                    comment.Mail = chat.Attributes["mail"] != null ? chat.Attributes["mail"].Value : "";
                    comment.Score = chat.Attributes["score"] != null ? int.Parse(chat.Attributes["score"].Value) : 0;
                    comment.UserId = chat.Attributes["user_id"].Value;
                    comment.Date = NicoNicoUtil.GetTimeFromVpos(Status, comment.Vpos);
                    comment.Content = chat.InnerText;

                    Owner.CommentList.Add(comment);

                    //コマンドは弾く
                    if(chat.InnerText.StartsWith("/")) {

                        return;
                    }
                    //Handler.InvokeScript("AsInjectOneComment", comment.ToJson());

                }

            } catch(XmlException) {

                return;
            }
        }
        public async void Post() {
            
            if(Text.Length == 0 || !IsTextBoxEnabled) {

                return;
            }

            IsTextBoxEnabled = false;

            var mail = Mail;

            //公式動画は184を付けて投稿出来ない
            if(Settings.Instance.Use184 && !Owner.VideoData.ApiData.IsOfficial) {
                    
                mail += " 184";
            }
            var no = await Owner.CommentInstance.PostAsync(Text, mail, Vpos);

            if(no != null) {

                var entry = new NicoNicoCommentEntry();
                entry.No = no;
                entry.Mail = Mail;
                entry.Vpos = Vpos;
                   
                entry.Content = Text;

                Owner.Handler.InjectPostedComment(entry.ToJson());
                Text = "";
                   
            }
            IsTextBoxEnabled = true;
        }
        public void RegisterNGUser(NicoNicoCommentEntry entry) {

            App.ViewModelRoot.Config.NGFilter.AddNGEntry(NGType.UserId, entry.UserId);
            Owner.Status = "NG登録しました。 ユーザーID:" + entry.UserId;
        }
        public void RegisterNGComment(NicoNicoCommentEntry entry) {

            App.ViewModelRoot.Config.NGFilter.AddNGEntry(NGType.Word, entry.Content);
            Owner.Status = "NG登録しました。ワード:" + entry.Content;
        }
Beispiel #14
0
 public VideoCommentEntryViewModel(VideoCommentViewModel owner, NicoNicoCommentEntry vm)
 {
     Owner = owner;
     Item  = vm;
 }
 public void RegisterNGUser(NicoNicoCommentEntry entry)
 {
     App.ViewModelRoot.Config.NGFilter.AddNGEntry(NGType.UserId, entry.UserId);
     Owner.Status = "NG登録しました。 ユーザーID:" + entry.UserId;
 }
 public void RegisterNGComment(NicoNicoCommentEntry entry)
 {
     App.ViewModelRoot.Config.NGFilter.AddNGEntry(NGType.Word, entry.Content);
     Owner.Status = "NG登録しました。ワード:" + entry.Content;
 }