Esempio n. 1
0
        public static IEnumerable <string> GetAttributeValues(this string html, string tagName, string attributeName)
        {
            var reader = new SgmlReader
            {
                DocType            = "html",
                WhitespaceHandling = WhitespaceHandling.All,
                InputStream        = new StringReader(string.Format("<html>{0}</html>", html))
            };

            while (reader.Read() && !reader.EOF)
            {
                if (reader.NodeType == XmlNodeType.Element && reader.LocalName == tagName)
                {
                    yield return(reader.GetAttribute(attributeName));
                }
            }
        }
Esempio n. 2
0
        public static AlbumItem AddVideo(UserContainer currContext, Guid albumId, string title, string description, string url, string embedCode)
        {
            var album = DataService.PerThread.AlbumSet.SingleOrDefault(x => x.Id == albumId);

            if (album == null)
            {
                throw new BusinessLogicException("Указан неверный идентификатор");
            }

            if (string.IsNullOrWhiteSpace(title))
            {
                throw new BusinessLogicException("Не указано название видео");
            }

            if (currContext != null)
            {
                if (album.GroupId.HasValue)
                {
                    var gm = GroupService.UserInGroup(currContext.Id, album.GroupId.Value);
                    if (gm == null)
                    {
                        throw new BusinessLogicException("Вы не состоите в группе");
                    }

                    if (album.IsOpen)
                    {
                        if (!(gm.State == (byte)GroupMemberState.Approved || gm.State == (byte)GroupMemberState.Moderator))
                        {
                            throw new BusinessLogicException("Только члены группы могут добавлять видео в альбом");
                        }
                    }
                    else if (gm.State != (byte)GroupMemberState.Moderator)
                    {
                        throw new BusinessLogicException("Только модераторы могут добавлять видео в альбом");
                    }
                }
                else if (album.UserId.HasValue)
                {
                    if (album.UserId != currContext.Id)
                    {
                        throw new BusinessLogicException("Нельзя добавлять видео в чужой альбом");
                    }
                }
                else
                {
                    throw new BusinessLogicException("Альбом ни к чему не привязан");
                }
            }

            string src;

            if (!string.IsNullOrWhiteSpace(embedCode))
            {
                using (var sgml = new SgmlReader())
                {
                    sgml.InputStream = new StringReader(embedCode);
                    sgml.Read();
                    src = sgml.GetAttribute("src");
                }
            }
            else if (!string.IsNullOrWhiteSpace(url))
            {
                var uri = new Uri(url);
                src = url; // TODO: мб лучше regexp для вычленения src

                switch (uri.Host.Replace("www.", string.Empty))
                {
                case "youtube.com":
                    //src = uri.Scheme + "://" + uri.Host + "/embed/" + HttpUtility.ParseQueryString(uri.Query).GetValues("v").First(); // это для iframe
                    src = uri.Scheme + "://" + uri.Host + "/v/" + HttpUtility.ParseQueryString(uri.Query).GetValues("v").First();
                    break;

                case "youtu.be":
                    //src = uri.Scheme + "://youtube.com/embed/" + uri.Segments[1]; // это для iframe
                    src = uri.Scheme + "://youtube.com/v/" + uri.Segments[1];
                    break;

                /*case "vimeo.com":
                 *  src = uri.Scheme + "://" + "player." + uri.Host + "/video" + uri.PathAndQuery;
                 *  break;
                 *
                 * case "dailymotion.com":
                 *  var query = uri.Fragment.Replace("#", string.Empty);
                 *  src = uri.Scheme + "://" + uri.Host + "/embed/video/" + HttpUtility.ParseQueryString(query).GetValues("videoId").First();
                 *  break;*/

                case "e2-e4.tv":
                    src = uri.Scheme + "://" + uri.Host + uri.PathAndQuery + "/swf/player2.swf";
                    break;

                case "e2e4.tv":
                    src = uri.Scheme + "://" + uri.Host + uri.PathAndQuery + "/swf/player2.swf";
                    break;
                }
            }
            else
            {
                throw new BusinessLogicException("Источник видео не указан");
            }

            var albumItem = new AlbumItem
            {
                AlbumId      = albumId,
                Title        = title,
                Description  = description,
                Type         = (byte)AlbumItemType.Video,
                Src          = src,
                CreationDate = DateTime.Now
            };

            DataService.PerThread.AlbumItemSet.AddObject(albumItem);
            DataService.PerThread.LoadProperty(albumItem, x => x.Album);

            albumItem.Album.ChangeDate = DateTime.Now;

            DataService.PerThread.SaveChanges();

            return(albumItem);
        }