private void updateImage(ThumbnailInfo info) { updateOnlineStatus(); System.Drawing.Image bmp = info.Thumbnail; using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) { bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);// 格式自处理,这里用 bitmap try { WindowUtil.BeginInvoke(() => { var bi = new System.Windows.Media.Imaging.BitmapImage(); bi.BeginInit(); bi.StreamSource = new MemoryStream(ms.ToArray()); // 不要直接使用 ms bi.EndInit(); Thumbnail = bi; }); } catch { Dispose(); } } }
private ContextMenu CreateContextMenu(ThumbnailInfo thumb) { var contextMenu = new ContextMenu(); contextMenu.MenuItems.Add(CreateImageSearchMenuItem(thumb)); return(contextMenu); }
public void TestAttachmentMD5() { Attachment a = new Attachment(); byte[] data = new byte[100]; for (int i = 0; i < data.Length; i++) { data[i] = (byte)i; } a.RawData = new ArraySegment <byte>(data); ThumbnailInfo thumb = new ThumbnailInfo(); thumb.RawData = data; System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create(); byte[] hash = md5.ComputeHash(data); StringBuilder builder = new StringBuilder(); for (int i = 0; i < hash.Length; i++) { builder.Append(hash[i].ToString("x2")); } Assert.AreEqual(builder.ToString(), a.md5); Assert.AreEqual(builder.ToString(), thumb.md5); }
private MenuItem CreateImageSearchMenuItem(ThumbnailInfo thumb) { var item = new MenuItem(); item.Text = Properties.Resources.SearchSimilarImageText; string search_targe_url = thumb.FullSizeImageUrl != null ? thumb.FullSizeImageUrl : thumb.ThumbnailUrl != null ? thumb.ThumbnailUrl : null; if (search_targe_url != null) { item.Click += (sender, e) => { string uri = GetImageSearchUri(search_targe_url); if (this.ThumbnailImageSearchClick != null) { this.ThumbnailImageSearchClick(this, new ThumbnailImageSearchEventArgs(uri)); } }; } else { item.Enabled = false; } return(item); }
private void SetThumbnailInfo(ThumbnailInfo thumbnailInfo) { _thumbnailInfo = thumbnailInfo; ImageFile = _thumbnailInfo.ImageFile; _thumbnailImage.Source = _thumbnailInfo.ThumbnailImage; _thumbnailTextBlock.Text = _thumbnailInfo.ThumbnailText; }
private void fireUpdateEvent(ThumbnailInfo info) { var callback = _updateEvent; if (callback != null) { callback(info); } }
public ThumbnailInfo GetThumbnail(string videoId) { ThumbnailInfo ti = null; Action <ThumbnailInfo> handler = x => { ti = x; }; AddUpdateHandler(videoId, handler); RemoveUpdateHandler(videoId, handler); return(ti); }
bool play(string videoId, int streamIndex = -1) { LastImageTime = DateTime.Now; if (videoId == VideoId) { //同一个VideoID,初始缩略图只需刷新一次,因为这是一个相当耗时的操作。 //即使play操作失败时,也无需重复设置缩略图。 if (_thumbnail == null) { _thumbnail = ThumbnailsPack.Instance.GetThumbnail(videoId); if (_thumbnail != null) { ImageSource imgSrc = imageBytesToImageSource(_thumbnail.ImageBytes); updateImageSource(imgSrc); } } //var thumbnail = ThumbnailManager.Default.GetThumbnail(videoId); //if (thumbnail != null) //{ // ImageSource imgSrc = imageBytesToImageSource(thumbnail.ImageBytes); // updateImageSource(imgSrc); //} CCTVStaticInfo videoInfo = CCTVInfoManager.Instance.GetStaticInfo(videoId); if (videoInfo != null && videoInfo.Streams != null && videoInfo.Streams.Length > 0) { VideoName = CCTVInfoManager.Instance.GetVideoReadableName(VideoId); //Console.WriteLine(VideoId + "___" + VideoName); StreamInfoArray = videoInfo.Streams; if (streamIndex < 0) { streamIndex = videoInfo.Streams[0].Index; } StreamInfo streamInfo = videoInfo.Streams.First(x => x.Index == streamIndex); if (streamInfo != null) { StreamName = streamInfo.Name; lock (_videoSourceLockObj) { _videoData = VideoDataManager.Instance.GetVideoData(videoId, streamInfo.Url); _videoData.VideoSource.Hikm4StreamReceived += VideoSource_Hikm4StreamReceived; _videoData.VideoSource.FfmpegStreamReceived += VideoSource_FfmpegStreamReceived; _videoData.VideoSource.UniviewStreamReceived += VideoSource_UniviewStreamReceived; _videoData.VideoSource.StreamTypeChanged += VideoSource_StreamTypeChanged; _videoData.VideoSource.VideoFrameReceived += VideoSource_VideoFrameReceived; } return(true); } } } return(false); }
public void StopVideo() { _thumbnail = null; VideoName = "未知视频"; VideoId = string.Empty; _timer = null; releaseVideoSource(); _frameBuffer.Clear(); Width = 0; Height = 0; }
private void onUpdate(StaticInfoSynchronizer <ThumbnailInfo> synchronizer, IEnumerable <string> keysUpdated) { string key = keysUpdated.FirstOrDefault(); ThumbnailInfo info; if (key != null && synchronizer.TryGetValue(key, out info)) { _info = info; fireUpdateEvent(info); } }
private void UpstreamThumbnail(ThumbnailInfo thumbnail, string groupId, string fullImgId, ImageMeta meta, string apiKey, string token) { using (MemoryStream output = new MemoryStream()) { Attachment.UploadImage(new ArraySegment <byte>(thumbnail.RawData), groupId, fullImgId, thumbnail.file_name, "image/jpeg", meta, apiKey, token); OnThumbnailUpstreamed(new ThumbnailUpstreamedEventArgs(thumbnail.RawData.Length)); logger.DebugFormat("Thumbnail {0} is uploaded to Cloud", thumbnail.file_name); } }
public ThumbnailBox(ThumbnailInfo thumbnailInfo) { if (thumbnailInfo == null) { throw new ArgumentNullException(nameof(thumbnailInfo)); } InitializeComponent(); SetControlProperties(); SetThumbnailInfo(thumbnailInfo); }
/// <summary> /// 上传文件并返回缩略图大小a /// </summary> /// <param name="postedFile">上传的文件对象</param> /// <param name="key">服务端配置索引名</param> /// <param name="fileInfor">文件上传后返回的信息对象</param> /// <param name="thumbnailInfo">缩略图信息</param> /// <returns></returns> public static FileMessage UploadFileAndReturnInfo(HttpPostedFileBase postedFile, string key, out FileInfor fileInfor, out ThumbnailInfo thumbnailInfo) { ImageServiceClientProxy client = new ImageServiceClientProxy(); string fileKey; string fileExt; fileInfor = new FileInfor(); thumbnailInfo = new ThumbnailInfo(); FileMessage f = client.GetFileName(key, postedFile.ContentLength, postedFile.FileName, out fileKey, out fileExt); if (f == FileMessage.Success) { try { fileInfor.FileName = fileKey; fileInfor.FileSize = postedFile.ContentLength; fileInfor.FileExtName = fileExt; FileUploadMessage inValue = new FileUploadMessage(); inValue.FileName = fileKey; inValue.KeyName = key; inValue.FileExt = fileExt; inValue.SaveOrigin = true; if (postedFile.InputStream.CanRead) { //byte[] content = new byte[postedFile.ContentLength + 1]; //postedFile.InputStream.Read(content, 0, postedFile.ContentLength); //inValue.FileData = new MemoryStream(content); inValue.FileData = postedFile.InputStream; thumbnailInfo = client.UploadFileAndReturnInfo(inValue); inValue.FileData.Close(); inValue.FileData.Dispose(); } else { return(FileMessage.UnknowError); } return(FileMessage.Success); } catch { return(FileMessage.UnknowError); } } else { return(f); } }
private void uploadSnapshot(ThumbnailInfo snapshotFile) { // if (this.thumbnailListBox.Items.Count == 0) { this.uploadIcon(); return; } this.uploadStatusTextBox.Text = "正在上传应用缩略图..."; if (client != null) { client.Dispose(); client = null; } client = new WebClient(); client.Headers.Add("AddApp", "{A298CC02-CE4B-4B69-A1B5-94FF344C6B95}"); client.UploadProgressChanged += ((s, e1) => { this.uploadProgressBar.Value = e1.BytesSent * 100 / e1.TotalBytesToSend; }); client.UploadFileCompleted += ((s, e1) => { if (e1.Error != null) { this.uploadProgressBar.Value = 0; this.uploadStatusTextBox.Text = "上传应用失败:" + e1.Error.Message; this.enableCtrls(true); } else if (e1.Cancelled) { this.uploadProgressBar.Value = 0; this.uploadStatusTextBox.Text = "上传应用过程被取消"; this.enableCtrls(true); } else { this.uploadProgressBar.Value = 100; this.snapshotUploadingIndex++; this.Dispatcher.BeginInvoke(new ThreadStart(() => { //if (this.snapshotUploadingIndex < this.thumbnailListBox.Items.Count) // this.uploadSnapshot(this.thumbnailListBox.Items[this.snapshotUploadingIndex] as ThumbnailInfo); //else // this.uploadIcon(); }), DispatcherPriority.Background, null); } }); snapshotFile.RemoteUrl = this.CreateAppUri("Apps/snapshots", snapshotFile.File); client.UploadFileAsync(new Uri(snapshotFile.RemoteUrl), snapshotFile.File); }
public void AddUpdateHandler(string videoId, Action <ThumbnailInfo> handler) { if (handler != null) { ThumbnailInfo ti = new ThumbnailInfo() { VideoId = videoId, ImageBytes = _imgBytes, IsDefault = true, Time = DateTime.Now }; handler(ti); } }
public void RefreshThumbnail() { thisThumbnailInfo = thisInfo.repo.GetThumbnailForImage(this); try { thisThumbnailPixbuf = new Pixbuf(thisThumbnailInfo.filename); } catch { thisThumbnailPixbuf = new Pixbuf(null, "broken.png"); } if (OnThumbnailChange != null) { OnThumbnailChange(this, EventArgs.Empty); } }
/// <summary> /// 上传文件并返回缩略图大小 /// </summary> /// <param name="postedFile">上传的文件对象</param> /// <param name="key">服务端配置索引名</param> /// <param name="fileInfor">文件上传后返回的信息对象</param> /// <param name="thumbnailInfo">缩略图信息</param> /// <returns></returns> public static FileMessage UploadFileAndReturnInfo(string key, Stream inputStream, int contentLength, string fileName, out FileInfor fileInfor, out ThumbnailInfo thumbnailInfo) { ImageServiceClientProxy client = new ImageServiceClientProxy(); string fileKey; string fileExt; fileInfor = new FileInfor(); thumbnailInfo = new ThumbnailInfo(); FileMessage f = client.GetFileName(key, contentLength, fileName, out fileKey, out fileExt); if (f == FileMessage.Success) { try { fileInfor.FileName = fileKey; fileInfor.FileSize = contentLength; FileUploadMessage inValue = new FileUploadMessage(); inValue.FileName = fileKey; inValue.KeyName = key; inValue.FileExt = fileExt; inValue.SaveOrigin = true; if (inputStream.CanRead) { inValue.FileData = inputStream; thumbnailInfo = client.UploadFileAndReturnInfo(inValue); inValue.FileData.Close(); inValue.FileData.Dispose(); } else { return(FileMessage.UnknowError); } return(FileMessage.Success); } catch { return(FileMessage.UnknowError); } } else { return(f); } }
public ThumbnailClient(string baseUrl, string videoId, string savePath = null, bool stopWhileNoHandler = true) { VideoId = videoId; _baseUrl = baseUrl; _savePath = savePath; _stopWhileNoHandler = stopWhileNoHandler; _info = new ThumbnailInfo() { VideoId = videoId, Time = DateTime.Now, ImageBytes = _defaultThumbnailBytes, IsDefault = true, }; start(); }
private void SaveMediaItems(IVideo video) { try { var artist = video.GetArtist(securityContext, mediaFactory, mediaItemRepository); mediaItemRepository.Save(new List <IArtist> { artist }); tagRepository.Save(artist.GetTags()); var album = video.GetAlbum(securityContext, mediaFactory, mediaItemRepository, artist); mediaItemRepository.Save(new List <IAlbum> { album }); tagRepository.Save(album.GetTags()); var clip = video.GetClip(securityContext, mediaFactory, mediaItemRepository, artist, album); mediaItemRepository.Save(new List <IClip> { clip }); tagRepository.Save(clip.GetTags()); var clipDate = clip.FromDate > DateTime.MinValue ? clip.FromDate : clip.ToDate; if (album.FromDate == DateTime.MinValue && clipDate != DateTime.MinValue) { var identityInfo = new IdentityInfo(album.Location, album.Type, album.Name, album.Summary, clipDate, clipDate, album.Number); var sizeInfo = new SizeInfo(album.Duration, album.Height, album.Width); var creatorInfo = new CreatorInfo(album.Creator, album.CreatorName); var catalogInfo = new CatalogInfo(album.Catalog, album.CatalogName); var targetInfo = new TargetInfo(album.Target, album.TargetType); var userInfo = new UserInfo(album.User, album.UserName); var thumbnailInfo = new ThumbnailInfo(album.Thumbnail, album.ThumbnailData); album = new Album(identityInfo, sizeInfo, creatorInfo, catalogInfo, targetInfo, userInfo, thumbnailInfo); mediaItemRepository.Save(new List <IAlbum> { album }); } } catch (Exception ex) { logger.Error(" CatalogSpider.SaveMediaItems", ex); } }
protected virtual T ReadItem <T>(IDataRecord record) where T : class, IMetadata { var location = record.GetUri("Location"); var defaultItem = GetDefaultItem <T>(); if (defaultItem != null && defaultItem.Location.ToString() == location.ToString()) { return(defaultItem); } var name = record.GetString("Name"); var summary = record.GetString("Summary"); var fromDate = record.GetDateTime("FromDate"); var toDate = record.GetDateTime("ToDate"); var number = record.GetUInt32("Number"); var duration = record.GetTimeSpan("Duration"); var height = record.GetUInt32("Height"); var width = record.GetUInt32("Width"); var creator = record.GetUri("Creator"); var creatorName = record.GetString("CreatorName"); var catalog = record.GetUri("Catalog"); var catalogName = record.GetString("CatalogName"); var target = record.GetUri("Target"); var targetType = record.GetString("TargetType"); var user = record.GetUri("User"); var userName = record.GetString("UserName"); var thumbnail = record.GetUri("Thumbnail"); var thumbnailData = record.GetBytes("ThumbnailData"); var identityInfo = new IdentityInfo(location, defaultItem.Type, name, summary, fromDate, toDate, number); var sizeInfo = new SizeInfo(duration, height, width); var creatorInfo = new CreatorInfo(creator, creatorName); var catalogInfo = new CatalogInfo(catalog, catalogName); var targetInfo = new TargetInfo(target, targetType); var userInfo = new UserInfo(user, userName); var thumbnailInfo = new ThumbnailInfo(thumbnail, thumbnailData); return(BuildItem <T>(identityInfo, sizeInfo, creatorInfo, catalogInfo, targetInfo, userInfo, thumbnailInfo)); }
private void _thumbnailProducer_ThumbnailEvent(ulong videoId, Image thumbnail) { ThumbnailInfo ti = new ThumbnailInfo() { VideoId = getNodeId(videoId), Time = DateTime.Now, ImageBytes = getImageBytes(thumbnail) }; InfoItem item = new InfoItem() { Key = ti.VideoId, IsDeleted = false, Info = StaticInfoSynchronizer <ThumbnailInfo> .SerializeItem(ti) }; string section = $"Thumbnail/{getSection(ti.VideoId)}"; using (var client = new StaticInfoClient.StaticInfoClient(_baseUri, section)) client.PutUpdate(new InfoItem[] { item }); }
/// <summary> /// 上传文件并返回缩略图大小 /// </summary> /// <param name="postedFile">上传的文件</param> /// <param name="key">服务端配置索引名</param> /// <param name="fileInfor">文件上传后返回的信息对象</param> /// <param name="thumbnailInfo">缩略图信息</param> /// <param name="userId">用户ID</param> /// <returns></returns> public static FileMessage UploadFileAndReturnInfo(HttpPostedFileBase postedFile, string key, out FileInfor fileInfor, out ThumbnailInfo thumbnailInfo, int userId) { string useridstr = userId.ToString(); if (useridstr.Length < 9) { for (int i = 0; i < (9 - useridstr.Length); i++) { useridstr = "0" + useridstr; } } string[] folders = new string[2]; folders[0] = useridstr.Substring(0, 3); folders[1] = useridstr.Substring(3, 3); ImageServiceClientProxy client = new ImageServiceClientProxy(); string fileKey; string fileExt; fileInfor = new FileInfor(); thumbnailInfo = new ThumbnailInfo(); FileMessage f = client.GetFileNameByUser(key, postedFile.ContentLength, postedFile.FileName, null, out fileKey, out fileExt, folders); if (f == FileMessage.Success) { try { fileInfor.FileName = fileKey; fileInfor.FileSize = postedFile.ContentLength; FileUploadMessage inValue = new FileUploadMessage(); inValue.FileName = fileKey; inValue.KeyName = key; inValue.FileExt = fileExt; inValue.SaveOrigin = true; if (postedFile.InputStream.CanRead) { //byte[] content = new byte[postedFile.ContentLength + 1]; //postedFile.InputStream.Read(content, 0, postedFile.ContentLength); //inValue.FileData = new MemoryStream(content); inValue.FileData = postedFile.InputStream; thumbnailInfo = client.UploadFileAndReturnInfo(inValue); inValue.FileData.Close(); inValue.FileData.Dispose(); } else { return(FileMessage.UnknowError); } return(FileMessage.Success); } catch { return(FileMessage.UnknowError); } } else { return(f); } }
/// <summary> /// 抓取网络图片 /// </summary> /// <param name="key">服务端配置索引名</param> /// <param name="originalImageUrl">原图片的Url</param> /// <param name="fileInfor">文件上传后返回的信息对象</param> /// <param name="thumbnailInfo">缩略图信息</param> /// <returns></returns> public static FileMessage SaveWebImage(string key, string originalImageUrl, out FileInfor fileInfor, out ThumbnailInfo thumbnailInfo) { var req = WebRequest.Create(originalImageUrl); var resp = req.GetResponse(); using (var stream = resp.GetResponseStream()) { //var imageFileName = originalImageUrl.Substring(originalImageUrl.LastIndexOf("/") + 1) + ".jpg"; //Note:参数fileName仅用于截取扩展名后判断“是否允许上传该类型图片”,硬编码为“image.jpg”以减少不必要的字符串操作 return(UploadFileAndReturnInfo(key, stream, (int)resp.ContentLength, "image.jpg", out fileInfor, out thumbnailInfo)); } }
/// <summary> /// 上传文件并返回缩略图大小( base64string ) /// </summary> /// <param name="key"></param> /// <param name="inputBase64String"></param> /// <param name="contentLength"></param> /// <param name="fileName"></param> /// <param name="fileInfor"></param> /// <param name="thumbnailInfo"></param> /// <returns></returns> public static FileMessage UploadFileAndReturnInfo(string key, string inputBase64String, int contentLength, string fileName, out FileInfor fileInfor, out ThumbnailInfo thumbnailInfo) { char[] charBuffer = inputBase64String.ToCharArray(); byte[] bytes = Convert.FromBase64CharArray(charBuffer, 0, charBuffer.Length); using (var str = new MemoryStream(bytes)) { return(UploadFileAndReturnInfo(key, str, contentLength, fileName, out fileInfor, out thumbnailInfo)); } }
public override List<ImageInfo> GetImages(List<ReplaceInfo> replaceList, List<ThumbnailInfo> thumbnailList, bool local = false) { List<ImageInfo> imageList = new List<ImageInfo>(); foreach (HTMLTagRange postTagRange in Enumerable.Where(Enumerable.Select(Enumerable.Where(_htmlParser.FindStartTags("article"), t => HTMLParser.ClassAttributeValueHas(t, "has_image") || (HTMLParser.ClassAttributeValueHas(t, "thread") && t.GetAttribute("id") != null)), t => _htmlParser.CreateTagRange(t)), r => r != null)) { HTMLTagRange imageLinkTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(postTagRange, "a"), t => HTMLParser.ClassAttributeValueHas(t, "thread_image_link")))); if (imageLinkTagRange == null) continue; HTMLTag thumbImageTag = _htmlParser.FindStartTag(imageLinkTagRange, "img"); if (thumbImageTag == null) continue; string imageURL = imageLinkTagRange.StartTag.GetAttributeValue("href"); if (imageURL == null) continue; string thumbURL = thumbImageTag.GetAttributeValue("src"); if (thumbURL == null) continue; HTMLTagRange postFileTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(postTagRange, "div"), t => HTMLParser.ClassAttributeValueHas(t, "post_file")))); if (postFileTagRange == null) continue; string originalFileName = String.Empty; HTMLTagRange fileNameLinkTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(postFileTagRange, "a"), t => HTMLParser.ClassAttributeValueHas(t, "post_file_filename")))); if (fileNameLinkTagRange == null) { HTMLTagRange fileNameSpanTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(postFileTagRange, "span"), t => HTMLParser.ClassAttributeValueHas(t, "post_file_filename")))); if (fileNameSpanTagRange == null) { HTMLTag postFileControlsEndTag = _htmlParser.FindCorrespondingEndTag(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(postFileTagRange, "span"), t => HTMLParser.ClassAttributeValueHas(t, "post_file_controls")))); HTMLTag postFileMetadataStartTag = Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(postFileTagRange, "span"), t => HTMLParser.ClassAttributeValueHas(t, "post_file_metadata"))); if (postFileControlsEndTag != null && postFileMetadataStartTag != null) { originalFileName = _htmlParser.GetInnerHTML(postFileControlsEndTag, postFileMetadataStartTag).Trim().TrimEnd(','); } else if (postFileControlsEndTag == null && postFileMetadataStartTag == null) { string[] postFileSplit = _htmlParser.GetInnerHTML(postFileTagRange).Split(new[] { ',' }, 3); if (postFileSplit.Length == 3) { originalFileName = postFileSplit[2].Trim(); } } } else { originalFileName = fileNameSpanTagRange.StartTag.GetAttributeValue("title") ?? _htmlParser.GetInnerHTML(fileNameSpanTagRange); } } else { originalFileName = fileNameLinkTagRange.StartTag.GetAttributeValue("title") ?? _htmlParser.GetInnerHTML(fileNameLinkTagRange); } string imageMD5 = thumbImageTag.GetAttributeValue("data-md5"); if (imageMD5 == null) continue; HTMLTagRange posterDataSpanTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(postTagRange, "span"), t => HTMLParser.ClassAttributeValueHas(t, "post_poster_data")))); if (posterDataSpanTagRange == null) continue; HTMLTagRange authorSpanTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(posterDataSpanTagRange, "span"), t => HTMLParser.ClassAttributeValueHas(t, "post_author")))); HTMLTagRange tripcodeSpanTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(posterDataSpanTagRange, "span"), t => HTMLParser.ClassAttributeValueHas(t, "post_tripcode")))); HTMLTagRange idSpanTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(posterDataSpanTagRange, "span"), t => HTMLParser.ClassAttributeValueHas(t, "poster_hash")))); string poster = String.Empty; if (idSpanTagRange != null) { poster = _htmlParser.GetInnerHTML(idSpanTagRange).Replace("ID:", ""); } else if (authorSpanTagRange != null) { string name = _htmlParser.GetInnerHTML(authorSpanTagRange); if (tripcodeSpanTagRange != null && !String.IsNullOrEmpty(_htmlParser.GetInnerHTML(tripcodeSpanTagRange))) { poster = name + _htmlParser.GetInnerHTML(tripcodeSpanTagRange); } else if (name != "Anonymous") { poster = name; } } ImageInfo image = new ImageInfo { URL = General.GetAbsoluteURL(_url, HttpUtility.HtmlDecode(imageURL)), Referer = _url, OriginalFileName = General.CleanFileName(HttpUtility.HtmlDecode(originalFileName)), HashType = HashType.MD5, Hash = General.TryBase64Decode(imageMD5), Poster = General.CleanFileName(HttpUtility.HtmlDecode(poster)) }; if (image.URL.Length == 0 || image.FileName.Length == 0 || image.Hash == null) continue; ThumbnailInfo thumb = new ThumbnailInfo { URL = General.GetAbsoluteURL(_url, HttpUtility.HtmlDecode(thumbURL)), Referer = _url }; if (thumb.URL == null || thumb.FileName.Length == 0) continue; if (replaceList != null) { HTMLAttribute attribute; attribute = imageLinkTagRange.StartTag.GetAttribute("href"); if (attribute != null) { replaceList.Add( new ReplaceInfo { Offset = attribute.Offset, Length = attribute.Length, Type = ReplaceType.ImageLinkHref, Tag = image.FileName }); } if (fileNameLinkTagRange != null) { attribute = fileNameLinkTagRange.StartTag.GetAttribute("href"); if (attribute != null) { replaceList.Add( new ReplaceInfo { Offset = attribute.Offset, Length = attribute.Length, Type = ReplaceType.ImageLinkHref, Tag = image.FileName }); } } attribute = thumbImageTag.GetAttribute("src"); if (attribute != null) { replaceList.Add( new ReplaceInfo { Offset = attribute.Offset, Length = attribute.Length, Type = ReplaceType.ImageSrc, Tag = thumb.FileName }); } } imageList.Add(image); thumbnailList.Add(thumb); } return imageList; }
public override List<ImageInfo> GetImages(List<ReplaceInfo> replaceList, List<ThumbnailInfo> thumbnailList, bool local = false) { List<ImageInfo> imageList = new List<ImageInfo>(); foreach (HTMLTagRange postTagRange in Enumerable.Where(Enumerable.Select(Enumerable.Where(_htmlParser.FindStartTags("td", "div"), t => new Regex("^p\\d+$").IsMatch(t.GetAttributeValueOrEmpty("id"))), t => _htmlParser.CreateTagRange(t)), r => r != null)) { HTMLTagRange labelTagRange = _htmlParser.CreateTagRange(_htmlParser.FindStartTag(postTagRange, "label")); if (labelTagRange == null) continue; HTMLTagRange imageLinkTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where(_htmlParser.FindStartTags(postTagRange, "a"), IsImage))); if (imageLinkTagRange == null) continue; HTMLTag thumbImageTag = _htmlParser.FindStartTag(imageLinkTagRange, "img"); if (thumbImageTag == null) continue; string imageURL = imageLinkTagRange.StartTag.GetAttributeValue("href"); if (imageURL == null) continue; string thumbURL = thumbImageTag.GetAttributeValue("src"); if (thumbURL == null) continue; HTMLTagRange fileInfoTagRange = _htmlParser.CreateTagRange(_htmlParser.FindStartTag(labelTagRange.EndTag, null, "span")); if (fileInfoTagRange == null) continue; string[] fileInfoSplit = _htmlParser.GetInnerHTML(fileInfoTagRange).Split(new[] { ',' }, 3); if (fileInfoSplit.Length < 3) continue; string originalFileName; string imageMD5 = null; string fileInfo = fileInfoSplit[2].Trim(); if (fileInfo.EndsWith("-->")) { int hashIndex = fileInfo.LastIndexOf("<!--", StringComparison.Ordinal); originalFileName = fileInfo.Remove(hashIndex).Trim(); imageMD5 = fileInfo.Substring(hashIndex).Replace("<!--", "").Replace("-->", "").Trim(); } else { originalFileName = fileInfo; HTMLTag similarImageLinkStartTag = Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(fileInfoTagRange.EndTag, imageLinkTagRange.StartTag, "a"), t => t.GetAttributeValueOrEmpty("href").Contains("/image/"))); if (similarImageLinkStartTag != null) { string[] hrefSplit = similarImageLinkStartTag.GetAttributeValueOrEmpty("href").Split('/'); imageMD5 = hrefSplit[hrefSplit.Length - 1].Replace('-', '+').Replace('_', '/'); imageMD5 = imageMD5.PadRight(imageMD5.Length + (4 - imageMD5.Length % 4) % 4, '='); } } HTMLTagRange posterNameSpanTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(labelTagRange, "span"), t => HTMLParser.ClassAttributeValueHas(t, "postername")))); HTMLTagRange posterTripSpanTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(labelTagRange, "span"), t => HTMLParser.ClassAttributeValueHas(t, "postertrip")))); string poster = String.Empty; if (posterNameSpanTagRange != null) { string name = _htmlParser.GetInnerHTML(_htmlParser.CreateTagRange(_htmlParser.FindStartTag(posterNameSpanTagRange, "a")) ?? posterNameSpanTagRange).Replace("\r", "").Replace("\n", "").Replace(" ", "").Trim(); if (posterTripSpanTagRange != null) { poster = name + _htmlParser.GetInnerHTML(posterTripSpanTagRange).Replace(" ", "").Trim(); } else if (name != "Anonymous") { poster = name; } } ImageInfo image = new ImageInfo { URL = General.GetAbsoluteURL(_url, HttpUtility.HtmlDecode(imageURL)), Referer = _url, OriginalFileName = General.CleanFileName(HttpUtility.HtmlDecode(originalFileName)), HashType = imageMD5 != null ? HashType.MD5 : HashType.None, Hash = General.TryBase64Decode(imageMD5), Poster = General.CleanFileName(HttpUtility.HtmlDecode(poster)) }; if (image.URL.Length == 0 || image.FileName.Length == 0) continue; ThumbnailInfo thumb = new ThumbnailInfo { URL = General.GetAbsoluteURL(_url, HttpUtility.HtmlDecode(thumbURL)), Referer = _url }; if (thumb.URL == null || thumb.FileName.Length == 0) continue; if (replaceList != null) { HTMLAttribute attribute; attribute = imageLinkTagRange.StartTag.GetAttribute("href"); if (attribute != null) { replaceList.Add( new ReplaceInfo { Offset = attribute.Offset, Length = attribute.Length, Type = ReplaceType.ImageLinkHref, Tag = image.FileName }); } attribute = thumbImageTag.GetAttribute("src"); if (attribute != null) { replaceList.Add( new ReplaceInfo { Offset = attribute.Offset, Length = attribute.Length, Type = ReplaceType.ImageSrc, Tag = thumb.FileName }); } } imageList.Add(image); thumbnailList.Add(thumb); } return imageList; }
/// <summary> /// 上传文件并返回缩略图大小 /// </summary> /// <param name="postedFile">上传的文件对象</param> /// <param name="key">服务端配置索引名</param> /// <param name="fileInfor">文件上传后返回的信息对象</param> /// <param name="thumbnailInfo">缩略图信息</param> /// <returns></returns> public static FileMessage UploadFileAndReturnInfo(HttpPostedFile postedFile, string key, out FileInfor fileInfor, out ThumbnailInfo thumbnailInfo) { HttpPostedFileBase obj = new HttpPostedFileWrapper(postedFile); return(UploadFileAndReturnInfo(obj, key, out fileInfor, out thumbnailInfo)); }
public ThumbnailInfo UploadFileAndReturnInfo(FileUploadMessage request) { Log.Debug(string.Format("Upload file:\n filename:{0}\n fileext:{1}\n keyname:{2}", request.FileName, request.FileExt, request.KeyName)); if (request.FileData.CanRead == false) { Log.Debug(string.Format("\"{0}\"文件不可读", request.FileName)); request.FileData.Close(); request.FileData.Dispose(); return(null); } _imageSetting = (ImageSettingConfig)ConfigurationManager.GetSection("imageSetting"); _imageElement = _imageSetting.ImageCollection[request.KeyName]; _fileFolder = String.IsNullOrEmpty(_imageElement.RootFolder) ? _imageSetting.Folder : _imageElement.RootFolder; string filePath = Path.Combine(_fileFolder, request.FileName + (_imageElement.AsNormalFile ? string.Empty : FileTempExt) + "." + request.FileExt); var fileInfo = new FileInfo(filePath); if (fileInfo.Directory != null && !fileInfo.Directory.Exists) { Directory.CreateDirectory(fileInfo.Directory.FullName); } try { using (var sourceStream = request.FileData) { using (var targetStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None)) { const int bufferLen = 4096; byte[] buffer = new byte[bufferLen]; int count = 0; while ((count = sourceStream.Read(buffer, 0, bufferLen)) > 0) { targetStream.Write(buffer, 0, count); } targetStream.Close(); sourceStream.Close(); request.FileData.Close(); request.FileData.Dispose(); } } if (_imageElement.Type == 2) { var timeSpan = SaveAudioAndReturnDuration(filePath, true); Log.Warn(timeSpan.TotalSeconds); var t = new ThumbnailInfo { Sizes = new Dictionary <string, ImageSize>(1) { { request.KeyName, new ImageSize(0, 0, Int64.Parse(timeSpan.TotalSeconds.ToString("F0"))) } } }; return(t); } if (Pexts.Contains(request.FileExt, StringComparer.OrdinalIgnoreCase) && !_imageElement.AsNormalFile) { ThumbnailInfo thumbnailInfoes = new ThumbnailInfo(); thumbnailInfoes.Info = new Dictionary <string, long>(); thumbnailInfoes.Sizes = new Dictionary <string, ImageSize>(); foreach (ThumbElement thumb in _imageElement.ThumbCollection) { string thumbPath = filePath.Substring(0, filePath.IndexOf(FileTempExt)) + "_" + thumb.Width.ToString() + "x" + thumb.Height.ToString() + ".jpg"; try { int realWidth; int realHeight; Log.Debug("thumbPath:" + thumbPath); long size = Thumbnail.Instance.MakeThumbnailPicAndReturnSize(filePath, thumbPath, thumb.Width, thumb.Height, thumb.Mode, _imageSetting.ImageQuality, out realWidth, out realHeight, thumbnailInfoes.ExifInfos); thumbnailInfoes.Info.Add(thumb.Key, size); thumbnailInfoes.Sizes.Add(thumb.Key, new ImageSize(realWidth, realHeight)); } catch (Exception ex) { Log.Warn(ex); continue; } } return(thumbnailInfoes); } else if (Pexts.Contains(request.FileExt, StringComparer.OrdinalIgnoreCase) && request.ConvertToJPG && _imageElement.AsNormalFile) { using (Image bitmap = Image.FromFile(filePath)) { bitmap.Save(filePath.Substring(0, filePath.IndexOf("." + request.FileExt)) + ".jpg", ImageFormat.Jpeg); } } if (!request.SaveOrigin) { File.Delete(filePath); } } catch (Exception ex) { Log.Error(string.Format("上传文件\"{0}\"发生错误:{1}", request.FileName, ex.Message)); } Log.Debug(string.Format("Upload file successful.file: {0}, filekey: {1}", request.FileName, request.KeyName)); return(new ThumbnailInfo()); }
/// <summary> /// 上传文件并返回缩略图大小a /// </summary> /// <param name="postedFile">上传的文件对象</param> /// <param name="key">服务端配置索引名</param> /// <param name="fileInfor">文件上传后返回的信息对象</param> /// <param name="thumbnailInfo">缩略图信息</param> /// <returns></returns> public static FileMessage UploadFileAndReturnInfo(HttpPostedFileBase postedFile, string key, out FileInfor fileInfor, string[] userFolder, out ThumbnailInfo thumbnailInfo) { var client = _imageService; string fileKey; string fileExt; fileInfor = new FileInfor(); thumbnailInfo = new ThumbnailInfo(); FileMessage f = client.GetFileNameByUser(key, postedFile.ContentLength, postedFile.FileName, postedFile.ContentType, out fileKey, out fileExt, userFolder); if (f == FileMessage.Success) { fileInfor.FileName = fileKey; fileInfor.FileSize = postedFile.ContentLength; fileInfor.FileExtName = fileExt; fileInfor.ResourceType = ContentType.GetResourceType(fileExt); try { FileUploadMessage inValue = new FileUploadMessage(); inValue.FileName = fileKey; inValue.KeyName = key; inValue.FileExt = fileExt; inValue.SaveOrigin = true; if (postedFile.InputStream.CanRead) { //byte[] content = new byte[postedFile.ContentLength + 1]; //postedFile.InputStream.Read(content, 0, postedFile.ContentLength); //inValue.FileData = new MemoryStream(content); inValue.FileData = postedFile.InputStream; switch (fileInfor.ResourceType) { case ResourceType.Sound: long length; var t = SaveSound(inValue, out length); fileInfor.Length = length; fileInfor.Width = (int)length; LoggerManager.Current().Warn(fileInfor.Width); return(t); } int width, height; GetSize(postedFile, out width, out height); fileInfor.Width = width; fileInfor.Height = height; thumbnailInfo = client.UploadFileAndReturnInfo(inValue); inValue.FileData.Close(); inValue.FileData.Dispose(); } else { return(FileMessage.UnknowError); } return(FileMessage.Success); } catch { return(FileMessage.UnknowError); } } else { return(f); } }
public override List<ImageInfo> GetImages(List<ReplaceInfo> replaceList, List<ThumbnailInfo> thumbnailList, bool local = false) { List<ImageInfo> imageList = new List<ImageInfo>(); bool seenSpoiler = false; foreach (HTMLTagRange postTagRange in Enumerable.Where(Enumerable.Select(Enumerable.Where(_htmlParser.FindStartTags("div"), t => HTMLParser.ClassAttributeValueHas(t, "has-file")), t => _htmlParser.CreateTagRange(t)), r => r != null)) { bool isOP = HTMLParser.ClassAttributeValueHas(postTagRange.StartTag, "op"); HTMLTagRange threadDivTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags("div"), t => HTMLParser.ClassAttributeValueHas(t, "thread")))); HTMLTagRange nameTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(postTagRange, "span"), t => HTMLParser.ClassAttributeValueHas(t, "name")))); HTMLTagRange tripSpanTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(postTagRange, "span"), t => HTMLParser.ClassAttributeValueHas(t, "trip")))); string poster = String.Empty; string name = _htmlParser.GetInnerHTML(nameTagRange); if (tripSpanTagRange != null) { poster = name + _htmlParser.GetInnerHTML(tripSpanTagRange); } else if (name != "Anonymous") { poster = name; } HTMLTagRange filesDivTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(isOP ? threadDivTagRange : postTagRange, "div"), t => HTMLParser.ClassAttributeValueHas(t, "files")))); foreach (HTMLTagRange fileDivTagRange in Enumerable.Where(Enumerable.Select(Enumerable.Where(_htmlParser.FindStartTags(filesDivTagRange, "div"), t => HTMLParser.ClassAttributeValueHas(t, "file")), t => _htmlParser.CreateTagRange(t)), r => r != null)) { HTMLTagRange fileInfoParagraphTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(fileDivTagRange, "p"), t => HTMLParser.ClassAttributeValueHas(t, "fileinfo")))); if (fileInfoParagraphTagRange == null) continue; HTMLTagRange fileThumbLinkTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(fileDivTagRange, "a"), t => t.GetAttributeValueOrEmpty("target") == "_blank"))); if (fileThumbLinkTagRange == null) continue; HTMLTag fileInfoLinkStartTag = _htmlParser.FindStartTag(fileInfoParagraphTagRange, "a"); if (fileInfoLinkStartTag == null) continue; HTMLTag fileThumbImageTag = _htmlParser.FindStartTag(fileThumbLinkTagRange, "img"); if (fileThumbImageTag == null) continue; string imageURL = fileInfoLinkStartTag.GetAttributeValue("href"); if (imageURL == null) continue; string thumbURL = fileThumbImageTag.GetAttributeValue("src"); if (thumbURL == null) continue; bool isSpoiler = thumbURL == "/static/spoiler.png"; HTMLTagRange postFileNameSpanTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(fileInfoParagraphTagRange, "span"), t => HTMLParser.ClassAttributeValueHas(t, "postfilename")))); if (postFileNameSpanTagRange == null) continue; string originalFileName = postFileNameSpanTagRange.StartTag.GetAttributeValue("title") ?? _htmlParser.GetInnerHTML(postFileNameSpanTagRange); string imageMD5 = fileThumbImageTag.GetAttributeValue("data-md5"); if (imageMD5 == null) continue; ImageInfo image = new ImageInfo { URL = General.GetAbsoluteURL(_url, HttpUtility.HtmlDecode(imageURL)), Referer = _url, OriginalFileName = General.CleanFileName(HttpUtility.HtmlDecode(originalFileName)), HashType = HashType.MD5, Hash = General.TryBase64Decode(imageMD5), Poster = General.CleanFileName(poster) }; if (image.URL.Length == 0 || image.FileName.Length == 0 || image.Hash == null) continue; ThumbnailInfo thumb = new ThumbnailInfo { URL = General.GetAbsoluteURL(_url, HttpUtility.HtmlDecode(thumbURL)), Referer = _url }; if (thumb.URL == null || thumb.FileName.Length == 0) continue; if (replaceList != null) { HTMLAttribute attribute; attribute = fileInfoLinkStartTag.GetAttribute("href"); if (attribute != null) { replaceList.Add( new ReplaceInfo { Offset = attribute.Offset, Length = attribute.Length, Type = ReplaceType.ImageLinkHref, Tag = image.FileName }); } attribute = fileThumbLinkTagRange.StartTag.GetAttribute("href"); if (attribute != null) { replaceList.Add( new ReplaceInfo { Offset = attribute.Offset, Length = attribute.Length, Type = ReplaceType.ImageLinkHref, Tag = image.FileName }); } attribute = fileThumbImageTag.GetAttribute("src"); if (attribute != null) { replaceList.Add( new ReplaceInfo { Offset = attribute.Offset, Length = attribute.Length, Type = ReplaceType.ImageSrc, Tag = thumb.FileName }); } } imageList.Add(image); if (!isSpoiler || !seenSpoiler) { thumbnailList.Add(thumb); if (isSpoiler) seenSpoiler = true; } } } return imageList; }
public void RefreshThumbnail () { thisThumbnailInfo = thisInfo.repo.GetThumbnailForImage (this); try { thisThumbnailPixbuf = new Pixbuf (thisThumbnailInfo.filename); } catch { thisThumbnailPixbuf = new Pixbuf (null, "broken.png"); } if (OnThumbnailChange != null) { OnThumbnailChange (this, EventArgs.Empty); } }
public virtual List<ImageInfo> GetImages(List<ReplaceInfo> replaceList, List<ThumbnailInfo> thumbnailList) { HashSet<string> imageFileNames = new HashSet<string>(StringComparer.OrdinalIgnoreCase); HashSet<string> thumbnailFileNames = new HashSet<string>(StringComparer.OrdinalIgnoreCase); List<ImageInfo> imageList = new List<ImageInfo>(); HTMLAttribute attribute; string url; int pos; foreach (HTMLTag linkTag in _htmlParser.FindStartTags("a")) { attribute = linkTag.GetAttribute("href"); if (attribute == null) continue; url = General.GetAbsoluteURL(_url, HttpUtility.HtmlDecode(attribute.Value)); if (url == null || url.IndexOf(ImageURLKeyword, StringComparison.OrdinalIgnoreCase) == -1) continue; HTMLTag linkEndTag = _htmlParser.FindCorrespondingEndTag(linkTag); if (linkEndTag == null) continue; ImageInfo image = new ImageInfo(); ThumbnailInfo thumb = null; image.URL = url; if (image.URL == null || image.FileName.Length == 0) continue; pos = Math.Max( image.URL.LastIndexOf("http://", StringComparison.OrdinalIgnoreCase), image.URL.LastIndexOf("https://", StringComparison.OrdinalIgnoreCase)); if (pos == -1) { image.Referer = _url; } else { image.Referer = image.URL; image.URL = image.URL.Substring(pos); } if (replaceList != null) { replaceList.Add( new ReplaceInfo { Offset = attribute.Offset, Length = attribute.Length, Type = ReplaceType.ImageLinkHref, Tag = image.FileName }); } HTMLTag imageTag = _htmlParser.FindStartTag(linkTag, linkEndTag, "img"); if (imageTag != null) { attribute = imageTag.GetAttribute("src"); if (attribute != null) { url = General.GetAbsoluteURL(_url, HttpUtility.HtmlDecode(attribute.Value)); if (url != null) { thumb = new ThumbnailInfo(); thumb.URL = url; thumb.Referer = _url; if (replaceList != null) { replaceList.Add( new ReplaceInfo { Offset = attribute.Offset, Length = attribute.Length, Type = ReplaceType.ImageSrc, Tag = thumb.FileName }); } } } } if (!imageFileNames.Contains(image.FileName)) { imageList.Add(image); imageFileNames.Add(image.FileName); } if (thumb != null && !thumbnailFileNames.Contains(thumb.FileName)) { thumbnailList.Add(thumb); thumbnailFileNames.Add(thumb.FileName); } } return imageList; }
public override List<ImageInfo> GetImages(List<ReplaceInfo> replaceList, List<ThumbnailInfo> thumbnailList) { List<ImageInfo> imageList = new List<ImageInfo>(); bool seenSpoiler = false; foreach (HTMLTagRange postTagRange in Enumerable.Where(Enumerable.Select(Enumerable.Where(_htmlParser.FindStartTags("div"), t => HTMLParser.ClassAttributeValueHas(t, "post")), t => _htmlParser.CreateTagRange(t)), r => r != null)) { HTMLTagRange fileTextDivTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(postTagRange, "div"), t => HTMLParser.ClassAttributeValueHas(t, "fileText")))); if (fileTextDivTagRange == null) continue; HTMLTagRange fileThumbLinkTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(postTagRange, "a"), t => HTMLParser.ClassAttributeValueHas(t, "fileThumb")))); if (fileThumbLinkTagRange == null) continue; HTMLTag fileTextLinkStartTag = _htmlParser.FindStartTag(fileTextDivTagRange, "a"); if (fileTextLinkStartTag == null) continue; HTMLTag fileThumbImageTag = _htmlParser.FindStartTag(fileThumbLinkTagRange, "img"); if (fileThumbImageTag == null) continue; string imageURL = fileTextLinkStartTag.GetAttributeValue("href"); if (imageURL == null) continue; string thumbURL = fileThumbImageTag.GetAttributeValue("src"); if (thumbURL == null) continue; bool isSpoiler = HTMLParser.ClassAttributeValueHas(fileThumbLinkTagRange.StartTag, "imgspoiler"); string originalFileName; if (isSpoiler) { originalFileName = fileTextDivTagRange.StartTag.GetAttributeValue("title"); } else { HTMLTag fileNameSpanStartTag = _htmlParser.FindStartTag(fileTextDivTagRange, "span"); if (fileNameSpanStartTag == null) continue; originalFileName = fileNameSpanStartTag.GetAttribute("title") == null ? _htmlParser.GetInnerHTML(fileNameSpanStartTag, fileThumbImageTag).Split(new[] { "</span>" }, StringSplitOptions.None)[0] : fileNameSpanStartTag.GetAttributeValue("title"); } if (originalFileName == null) continue; string imageMD5 = fileThumbImageTag.GetAttributeValue("data-md5"); if (imageMD5 == null) continue; ImageInfo image = new ImageInfo { URL = "http:" + HttpUtility.HtmlDecode(imageURL), Referer = _url, OriginalFileName = General.CleanFileName(HttpUtility.HtmlDecode(originalFileName)), HashType = HashType.MD5, Hash = General.TryBase64Decode(imageMD5) }; if (image.URL.Length == 0 || image.FileName.Length == 0 || image.Hash == null) continue; ThumbnailInfo thumb = new ThumbnailInfo { URL = "http:" + HttpUtility.HtmlDecode(thumbURL), Referer = _url }; if (thumb.URL == null || thumb.FileName.Length == 0) continue; if (replaceList != null) { HTMLAttribute attribute; attribute = fileTextLinkStartTag.GetAttribute("href"); if (attribute != null) { replaceList.Add( new ReplaceInfo { Offset = attribute.Offset, Length = attribute.Length, Type = ReplaceType.ImageLinkHref, Tag = image.FileName }); } attribute = fileThumbLinkTagRange.StartTag.GetAttribute("href"); if (attribute != null) { replaceList.Add( new ReplaceInfo { Offset = attribute.Offset, Length = attribute.Length, Type = ReplaceType.ImageLinkHref, Tag = image.FileName }); } attribute = fileThumbImageTag.GetAttribute("src"); if (attribute != null) { replaceList.Add( new ReplaceInfo { Offset = attribute.Offset, Length = attribute.Length, Type = ReplaceType.ImageSrc, Tag = thumb.FileName }); } } imageList.Add(image); if (!isSpoiler || !seenSpoiler) { thumbnailList.Add(thumb); if (isSpoiler) seenSpoiler = true; } } return imageList; }
public void OpenImage(ThumbnailInfo thumb) => this.ThumbnailDoubleClick?.Invoke(this, new ThumbnailDoubleClickEventArgs(thumb));
private T BuildItem <T>(IdentityInfo identityInfo, SizeInfo sizeInfo, CreatorInfo creatorInfo, CatalogInfo catalogInfo, TargetInfo targetInfo, UserInfo userInfo, ThumbnailInfo thumbnailInfo) where T : class, IMetadata { var builder = new MediaItemBuilder <T>(securityContext, mediaFactory) .Identity(identityInfo.Name, identityInfo.Summary, identityInfo.FromDate, identityInfo.ToDate, identityInfo.Number, identityInfo.Location) .Size(sizeInfo.Duration, sizeInfo.Height, sizeInfo.Width) .Creator(creatorInfo.Location, creatorInfo.Name) .Catalog(catalogInfo.Location, catalogInfo.Name) .Target(targetInfo.Location, targetInfo.Type) .User(userInfo.Location, userInfo.Name) .Thumbnail(thumbnailInfo.Location, thumbnailInfo.Data); return(builder.ToMediaItem()); }
public ThumbnailDoubleClickEventArgs(ThumbnailInfo thumbnail) => this.Thumbnail = thumbnail;
public override List<ImageInfo> GetImages(List<ReplaceInfo> replaceList, List<ThumbnailInfo> thumbnailList) { List<ImageInfo> imageList = new List<ImageInfo>(); bool seenSpoiler = false; foreach (HTMLTagRange postTagRange in Enumerable.Where(Enumerable.Select(Enumerable.Where(_htmlParser.FindStartTags("div"), t => HTMLParser.ClassAttributeValueHas(t, "post")), t => _htmlParser.CreateTagRange(t)), r => r != null)) { HTMLTagRange fileTextDivTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(postTagRange, "div"), t => HTMLParser.ClassAttributeValueHas(t, "fileText")))); if (fileTextDivTagRange == null) continue; HTMLTagRange fileThumbLinkTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(postTagRange, "a"), t => HTMLParser.ClassAttributeValueHas(t, "fileThumb")))); if (fileThumbLinkTagRange == null) continue; HTMLTag fileTextLinkStartTag = _htmlParser.FindStartTag(fileTextDivTagRange, "a"); if (fileTextLinkStartTag == null) continue; HTMLTag fileThumbImageTag = _htmlParser.FindStartTag(fileThumbLinkTagRange, "img"); if (fileThumbImageTag == null) continue; string imageURL = fileTextLinkStartTag.GetAttributeValue("href"); if (imageURL == null || !imageURL.StartsWith("//i.4cdn.org/")) continue; string thumbURL = fileThumbImageTag.GetAttributeValue("src"); if (thumbURL == null) continue; bool isSpoiler = HTMLParser.ClassAttributeValueHas(fileThumbLinkTagRange.StartTag, "imgspoiler"); string originalFileName = null; if (!isSpoiler) { originalFileName = fileTextLinkStartTag.GetAttributeValue("title") ?? _htmlParser.GetInnerHTML(_htmlParser.CreateTagRange(fileTextLinkStartTag)); } string imageMD5 = fileThumbImageTag.GetAttributeValue("data-md5"); if (imageMD5 == null) continue; string poster = String.Empty; HTMLTagRange nameBlockSpanTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(postTagRange, "span"), t => HTMLParser.ClassAttributeValueHas(t, "nameBlock")))); if (nameBlockSpanTagRange != null) { HTMLTagRange nameSpanTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(nameBlockSpanTagRange, "span"), t => HTMLParser.ClassAttributeValueHas(t, "name")))); HTMLTagRange posterTripSpanTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(nameBlockSpanTagRange, "span"), t => HTMLParser.ClassAttributeValueHas(t, "postertrip")))); HTMLTagRange idSpanTagRange = _htmlParser.CreateTagRange(Enumerable.FirstOrDefault(Enumerable.Where( _htmlParser.FindStartTags(nameBlockSpanTagRange, "span"), t => HTMLParser.ClassAttributeValueHas(t, "hand")))); if (idSpanTagRange != null) { poster = _htmlParser.GetInnerHTML(idSpanTagRange); } else if (nameSpanTagRange != null) { string name = _htmlParser.GetInnerHTML(nameSpanTagRange); if (posterTripSpanTagRange != null) { poster = name + _htmlParser.GetInnerHTML(posterTripSpanTagRange); } else if (name != "Anonymous") { poster = name; } } } ImageInfo image = new ImageInfo { URL = "http:" + HttpUtility.HtmlDecode(imageURL), Referer = _url, OriginalFileName = General.CleanFileName(HttpUtility.HtmlDecode(originalFileName) ?? ""), HashType = HashType.MD5, Hash = General.TryBase64Decode(imageMD5), Poster = General.CleanFileName(poster) }; if (image.URL.Length == 0 || image.FileName.Length == 0 || image.Hash == null) continue; ThumbnailInfo thumb = new ThumbnailInfo { URL = "http:" + HttpUtility.HtmlDecode(thumbURL), Referer = _url }; if (thumb.URL == null || thumb.FileName.Length == 0) continue; if (replaceList != null) { HTMLAttribute attribute; attribute = fileTextLinkStartTag.GetAttribute("href"); if (attribute != null) { replaceList.Add( new ReplaceInfo { Offset = attribute.Offset, Length = attribute.Length, Type = ReplaceType.ImageLinkHref, Tag = image.FileName }); } attribute = fileThumbLinkTagRange.StartTag.GetAttribute("href"); if (attribute != null) { replaceList.Add( new ReplaceInfo { Offset = attribute.Offset, Length = attribute.Length, Type = ReplaceType.ImageLinkHref, Tag = image.FileName }); } attribute = fileThumbImageTag.GetAttribute("src"); if (attribute != null) { replaceList.Add( new ReplaceInfo { Offset = attribute.Offset, Length = attribute.Length, Type = ReplaceType.ImageSrc, Tag = thumb.FileName }); } } imageList.Add(image); if (!isSpoiler || !seenSpoiler) { thumbnailList.Add(thumb); if (isSpoiler) seenSpoiler = true; } } return imageList; }