Example #1
0
        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);
        }
Example #3
0
        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);
        }
Example #5
0
        private void SetThumbnailInfo(ThumbnailInfo thumbnailInfo)
        {
            _thumbnailInfo = thumbnailInfo;
            ImageFile      = _thumbnailInfo.ImageFile;

            _thumbnailImage.Source   = _thumbnailInfo.ThumbnailImage;
            _thumbnailTextBlock.Text = _thumbnailInfo.ThumbnailText;
        }
Example #6
0
        private void fireUpdateEvent(ThumbnailInfo info)
        {
            var callback = _updateEvent;

            if (callback != null)
            {
                callback(info);
            }
        }
Example #7
0
        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;
 }
Example #10
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);
            }
        }
Example #12
0
        public ThumbnailBox(ThumbnailInfo thumbnailInfo)
        {
            if (thumbnailInfo == null)
            {
                throw new ArgumentNullException(nameof(thumbnailInfo));
            }

            InitializeComponent();

            SetControlProperties();
            SetThumbnailInfo(thumbnailInfo);
        }
Example #13
0
        /// <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);
            }
        }
Example #14
0
        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);
        }
Example #15
0
 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);
     }
 }
Example #16
0
    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);
        }
    }
Example #17
0
        /// <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);
            }
        }
Example #18
0
        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();
        }
Example #19
0
        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);
            }
        }
Example #20
0
        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));
        }
Example #21
0
        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 });
        }
Example #22
0
        /// <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);
            }
        }
Example #23
0
        /// <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));
            }
        }
Example #24
0
        /// <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("&nbsp;", "").Trim();
                    if (posterTripSpanTagRange != null) {
                        poster = name + _htmlParser.GetInnerHTML(posterTripSpanTagRange).Replace("&nbsp;", "").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;
        }
Example #27
0
        /// <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));
        }
Example #28
0
        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;
        }
Example #31
0
	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);
		}
	}
Example #32
0
        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;
        }
Example #33
0
        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;
        }
Example #34
0
 public void OpenImage(ThumbnailInfo thumb)
 => this.ThumbnailDoubleClick?.Invoke(this, new ThumbnailDoubleClickEventArgs(thumb));
Example #35
0
        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());
        }
Example #36
0
 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;
        }