public void CreateGroup(int idx) { this.idx = idx; header = Create <AlbumHeader>(); header.name = "header"; AddChild(header); header.transform.localPosition = new Vector3(0, -1, 0); header.transform.localScale = new Vector3(0.84f, 0.93f, 0.84f); Album album; for (int i = 0; i < 8; i++) { album = Create <Album>(); AddChild(album); album.name = "album" + i; album.idx = i; album.posIdx = i <= 3 ? i : 4; album.SetTexture("album_0" + (i % 4)); album.transform.parent = transform; album.transform.localPosition = new Vector3(0, -1f, DISTANCE_Z * ((i < 3) ? i : 2)); album.transform.localScale = new Vector3(0.84f, 0.93f, 0.84f); albums.Add(album); } iter = new Interator <Album>(albums); }
private void EditHeader_Tap(object sender, System.Windows.Input.GestureEventArgs e) { FrameworkElement frameworkElement = sender as FrameworkElement; AlbumHeader albumHeader = (frameworkElement != null ? frameworkElement.DataContext : null) as AlbumHeader; if (albumHeader == null) { return; } this.ShowEditAlbum(albumHeader.Album); }
private void Albums_SelectionChanged_1(object sender, SelectionChangedEventArgs e) { AlbumHeader selectedItem = this.listBoxAlbums.SelectedItem as AlbumHeader; if (selectedItem == null) { return; } this.listBoxAlbums.SelectedItem = null; Navigator.Current.NavigateToVideoAlbum(selectedItem.VideoAlbum.album_id, selectedItem.Title, this.CommonParameters.PickMode, this.CommonParameters.UserOrGroupId, this.CommonParameters.IsGroup); }
private void Albums_SelectionChanged_1(object sender, SelectionChangedEventArgs e) { AlbumHeader selectedItem = this.listBoxAlbums.SelectedItem as AlbumHeader; if (selectedItem == null) { return; } this.listBoxAlbums.SelectedItem = null; this.AddVideoToAlbum(selectedItem.VideoAlbum.id); }
private void Image_Tap(object sender, System.Windows.Input.GestureEventArgs e) { FrameworkElement frameworkElement = sender as FrameworkElement; AlbumHeader albumHeader = (frameworkElement != null ? frameworkElement.DataContext : null) as AlbumHeader; if (albumHeader == null) { return; } if (!this._selectForMove) { INavigator current = Navigator.Current; long userOrGroupId = this.PhotoMainVM.UserOrGroupId; int num1 = this.PhotoMainVM.IsGroup ? 1 : 0; string type = albumHeader.AlbumType.ToString(); string albumId = albumHeader.AlbumId; string albumName = albumHeader.AlbumName; int photosCount = albumHeader.PhotosCount; string title = this.PhotoMainVM.Title; string description = albumHeader.Album == null ? "" : albumHeader.Album.description ?? ""; int num2 = this.CommonParameters.PickMode ? 1 : 0; int adminLevel = this._adminLevel; Album album = albumHeader.Album; int num3 = album != null ? (album.can_upload == 1 ? 1 : 0) : 0; current.NavigateToPhotoAlbum(userOrGroupId, num1 != 0, type, albumId, albumName, photosCount, title, description, num2 != 0, adminLevel, num3 != 0); } else { PhotosToMoveInfo photosToMoveInfo = new PhotosToMoveInfo(); photosToMoveInfo.albumId = albumHeader.AlbumId; photosToMoveInfo.albumName = albumHeader.AlbumName; photosToMoveInfo.photos = this._selectedPhotos; PhotoAlbumViewModel.PhotoAlbumViewModelInput albumViewModelInput = new PhotoAlbumViewModel.PhotoAlbumViewModelInput(); albumViewModelInput.AlbumDescription = albumHeader.Album == null ? "" : albumHeader.Album.description ?? ""; albumViewModelInput.AlbumId = albumHeader.AlbumId; albumViewModelInput.AlbumName = albumHeader.AlbumName; albumViewModelInput.AlbumType = albumHeader.AlbumType; int num = this.PhotoMainVM.IsGroup ? 1 : 0; albumViewModelInput.IsGroup = num != 0; string photoPageTitle2 = this.PhotoMainVM.PhotoPageTitle2; albumViewModelInput.PageTitle = photoPageTitle2; int photosCount = albumHeader.PhotosCount; albumViewModelInput.PhotosCount = photosCount; long userOrGroupId = this.PhotoMainVM.UserOrGroupId; albumViewModelInput.UserOrGroupId = userOrGroupId; photosToMoveInfo.TargetAlbumInputData = albumViewModelInput; ParametersRepository.SetParameterForId("PhotosToMove", photosToMoveInfo); ((Page)this).NavigationService.GoBackSafe(); } }
private void itemsControlAlbums_Link(object sender, LinkUnlinkEventArgs e) { AlbumHeader content = e.ContentPresenter.Content as AlbumHeader; if (content == null) { return; } foreach (Group <AlbumHeader> group in (Collection <Group <AlbumHeader> >) this.PhotosMainVM.AlbumsVM.Collection) { int count = ((Collection <AlbumHeader>)group).Count; if (count > 20 && ((Collection <AlbumHeader>)group)[count - 20] == content) { this.PhotosMainVM.AlbumsVM.LoadData(false, false, null, false); } } }
private void Image_Tap(object sender, System.Windows.Input.GestureEventArgs e) { FrameworkElement frameworkElement = sender as FrameworkElement; AlbumHeaderTwoInARow dataContext = frameworkElement.DataContext as AlbumHeaderTwoInARow; if (dataContext == null) { return; } AlbumHeader albumHeader = frameworkElement.Tag.ToString() == "1" ? dataContext.AlbumHeader1 : dataContext.AlbumHeader2; if (albumHeader == null) { return; } this.SelectedAlbumCallback(albumHeader.AlbumId); }
public void Handle(VideoAlbumEditedEvent message) { if (message.OwnerId != this.OwnerId) { return; } AlbumHeader albumHeader = this._albumsVM.Collection.FirstOrDefault <AlbumHeader>((Func <AlbumHeader, bool>)(a => { if (a.VideoAlbum.album_id == message.AlbumId) { return(a.VideoAlbum.owner_id == message.OwnerId); } return(false); })); if (albumHeader == null) { return; } albumHeader.VideoAlbum.privacy = message.Privacy.ToStringList(); albumHeader.VideoAlbum.title = message.Name; }
private void ah_PropertyChanged(object sender, PropertyChangedEventArgs e) { AlbumHeader albumHeader = sender as AlbumHeader; if (albumHeader == null) { return; } if (!this._addedRemovedDict.Keys.Contains <long>(albumHeader.VideoAlbum.id)) { if (albumHeader.IsSelected) { this._addedRemovedDict[albumHeader.VideoAlbum.id] = true; } else { this._addedRemovedDict[albumHeader.VideoAlbum.id] = false; } } else { this._addedRemovedDict.Remove(albumHeader.VideoAlbum.id); } }
public void TryGrabAndParsePage_Album() { AlbumHeader expected_album_header = new AlbumHeader( "The Chronicles Of Riddick - OST / Хроники Риддика - Саундтрек [Score] (2004)", "OST", "Graeme Revell", "2004", "Саундтрек", 22, "mp3", "Fluffy", "Lannna", "", new Uri("http://fp42.myzuka.ru/Download.aspx?lid=727400&mid=5258695&date=20140130203947&sum=20dd0e5d919bd6def71c53aed0b47cdd&name=&ic=False&cr=False&ex=.jpg&il=False"), new Uri("http://myzuka.ru/Album/12059/Graeme-Revell-The-Chronicles-Of-Riddick-Ost-Хроники-Риддика-Саундтрек-Score-2004") ); ACommonData result1 = Core.TryGrabAndParsePage( new Uri("http://myzuka.ru/Album/12059/Graeme-Revell-The-Chronicles-Of-Riddick-Ost-Хроники-Риддика-Саундтрек-Score-2004"), "Mozilla/5.0 (Windows; I; Windows NT 5.1; ru; rv:1.9.2.13) Gecko/20100101 Firefox/4.0", true, false, CancellationToken.None); Assert.NotNull(result1); Assert.IsInstanceOf(typeof(ParsedAlbum), result1); ParsedAlbum conv_result1 = (ParsedAlbum) result1; Assert.IsTrue(conv_result1.Header.Equals(expected_album_header)); Assert.IsTrue(conv_result1.Songs.Count == 22); Assert.IsTrue( conv_result1.Songs.TrueForAll( osh => osh.Artist.Equals("Graeme Revell", StringComparison.OrdinalIgnoreCase) && osh.Album.Equals ("The Chronicles Of Riddick - OST / Хроники Риддика - Саундтрек [Score] (2004)", StringComparison.OrdinalIgnoreCase))); }
/// <summary> /// Парсит все песни на странице альбома и возвращает результат в виде списка моделей песен /// </summary> /// <param name="InputHTML">HTML-код страницы альбома в виде подготовленного HTML-документа</param> /// <param name="AHeader">Распарсенный хидер альбома, информацию о песнях которого следует извлечь</param> /// <returns></returns> internal static List<OneSongHeader> ParseAllSongsInAlbum(HtmlDocument InputHTML, AlbumHeader AHeader) { if(InputHTML==null) {throw new ArgumentNullException("InputHTML");} if(AHeader == null) {throw new ArgumentNullException("AHeader");} List<OneSongHeader> output = new List<OneSongHeader>(); HtmlNodeCollection raw_songs_list = InputHTML.DocumentNode.SelectNodes( "//table[normalize-space(@width)='100%' and normalize-space(@class)='rectable rectable_center']" + "/tr[starts-with(@id,'trSong_')]"); if (raw_songs_list == null) {throw new InvalidOperationException("Невозможно извлечь блок HTML-кода с метаинформацией по всем песням в альбоме");} foreach (HtmlNode one_raw_song in raw_songs_list) { String inner_block = "<root>" + one_raw_song.InnerHtml + "</root>"; HtmlDocument inner_doc = new HtmlDocument(); inner_doc.LoadHtml(inner_block); String number = inner_doc.DocumentNode.SelectSingleNode( "/root/td[2]").InnerHtml.CleanString().Trim(); String artist = inner_doc.DocumentNode.SelectSingleNode( "/root/td[3]").InnerHtml; artist = ExtractFromHTML(artist); HtmlNode raw_title_node = inner_doc.DocumentNode.SelectSingleNode("/root/td[5][@class]/div"); if(raw_title_node==null) { throw new InvalidOperationException("Невозможно извлечь блок HTML-кода с названием песни, которая имеет номер "+number); } String raw_title_text = raw_title_node.InnerText.CleanString(); String title = HttpUtility.HtmlDecode(raw_title_text.TrimEnd("Файл утерян", StringComparison.OrdinalIgnoreCase, false)); Boolean is_available = !raw_title_text.Contains("Файл утерян", StringComparison.InvariantCultureIgnoreCase); String duration = inner_doc.DocumentNode.SelectSingleNode( "/root/td[6]").InnerHtml.CleanString().Trim(); String size = inner_doc.DocumentNode.SelectSingleNode( "/root/td[7]").InnerHtml.CleanString().Trim(); String bitrate = inner_doc.DocumentNode.SelectSingleNode( "/root/td[8]").InnerHtml.CleanString().Trim(); HtmlNode raw_URI_node = inner_doc.DocumentNode.SelectSingleNode( "/root/td[@class='downloadSong']/a[@href and @title]"); if (raw_URI_node == null) { throw new InvalidOperationException(String.Format("Невозможно извлечь из страницы альбома блок HTML-кода со ссылкой на страницу песни '{0}-{1}'", number, title)); } String raw_URI = raw_URI_node.GetAttributeValue("href", ""); if(raw_URI.IsStringNullOrEmpty()==true) { throw new InvalidOperationException(String.Format( "Невозможно извлечь ссылку на страницу песни '{0}-{1}' из HTML-кода '{2}'", number, title, raw_URI_node.OuterHtml)); } String err_mes; Uri song_link = TryFixReturnURI(raw_URI, out err_mes); if (song_link == null) { throw new InvalidOperationException(String.Format( "Невозможно извлечь из страницы альбома URI на страницу песни, полученную из строки '{0}': {1}", raw_URI, err_mes)); } output.Add( new OneSongHeader(Byte.Parse(number), title, title, artist, AHeader.Title, AHeader.Genre, duration, size, bitrate, AHeader.Format, AHeader.Uploader, null, song_link, is_available) ); } return output; }
internal static AlbumHeader ParseAlbumHeader(HtmlDocument HTMLPage) { if (HTMLPage == null) { throw new ArgumentNullException("HTMLPage", "Входной документ не может быть NULL"); } String caption = CoreInternal.TryGrabCaption(HTMLPage); HtmlNode main_body = HTMLPage.DocumentNode.SelectSingleNode( "//div[@class='centerblock gr']/div[starts-with(@class, 'in2')]/table[1]/tr/td[2]" ); if(main_body==null) {throw new InvalidOperationException("Невозможно извлечь блок HTML-кода с метаинформацией по альбому");} HtmlNodeCollection uploader_and_updater = main_body.SelectNodes("//div[@class='loaderSong']/a[@class and @href]"); if (uploader_and_updater.IsNullOrEmpty()==true) { throw new InvalidOperationException("Невозможно извлечь блок HTML-кода с данными о пользователях, загрузивших и обновивших альбом"); } String uploader = uploader_and_updater[0].InnerText.Trim(); String updater = ""; if (uploader_and_updater.Count == 2) { updater = uploader_and_updater[1].InnerText.Trim(); } String main_body_html = main_body.InnerHtml; Int32 pos_input; String genre = StringTools.SubstringHelpers.GetInnerStringBetweenTokens (main_body_html, "Жанр:", "Исполнитель", 0, StringComparison.OrdinalIgnoreCase, out pos_input); if (genre.Contains("Нет данных", StringComparison.OrdinalIgnoreCase) == true) { genre = "Нет данных"; } else { genre = HtmlTools.IntelliRemoveHTMLTags(genre).CleanString().Trim(); genre = StringTools.SubstringHelpers.ShrinkSpaces(genre); } String artist = StringTools.SubstringHelpers.GetInnerStringBetweenTokens (main_body_html, "Исполнитель:", "<br>", pos_input, StringComparison.OrdinalIgnoreCase, out pos_input).Trim(); artist = HtmlTools.IntelliRemoveHTMLTags(artist).CleanString().Trim(); artist = StringTools.SubstringHelpers.ShrinkSpaces(artist); String release_date = StringTools.SubstringHelpers.GetInnerStringBetweenTokens (main_body_html, "Дата релиза:", "<br>", pos_input, StringComparison.OrdinalIgnoreCase, out pos_input).Trim(); String type = StringTools.SubstringHelpers.GetInnerStringBetweenTokens (main_body_html, "Тип:", "<br>", pos_input, StringComparison.OrdinalIgnoreCase, out pos_input).Trim(); String count = StringTools.SubstringHelpers.GetInnerStringBetweenTokens (main_body_html, "Кол-во песен:", "<br>", pos_input, StringComparison.OrdinalIgnoreCase, out pos_input).Trim(); Byte count_parsed = Byte.Parse(count); String format = StringTools.SubstringHelpers.GetInnerStringBetweenTokens (main_body_html, "Формат:", "<br>", pos_input, StringComparison.OrdinalIgnoreCase, out pos_input).Trim(); String description = StringTools.SubstringHelpers.GetInnerStringBetweenTokens (main_body_html, "Описание: <br>", "GetVipAccount", pos_input, StringComparison.OrdinalIgnoreCase, out pos_input); description = CoreInternal.ExtractFromHTML(description); if (caption.StartsWith(artist, StringComparison.OrdinalIgnoreCase) == true) { caption = caption.TrimStart(artist, StringComparison.OrdinalIgnoreCase, false); caption = caption.TrimStart(new char[2] { ' ', '-' }); } AlbumHeader output = new AlbumHeader (caption, genre, artist, release_date, type, count_parsed, format, uploader, updater, description, CoreInternal.TryGrabImageUri(HTMLPage), CoreInternal.ExtractAlbumUri(HTMLPage)); return output; }