Пример #1
0
        public Bitmap Decode(RoomBlock roomBlock, int objectIndex, int imageIndex)
        {
            ObjectImage obj = roomBlock.GetOBIMs()[objectIndex];

            if (obj.GetIMxx()[imageIndex].GetBOMP() == null)
            {
                return(new Bitmap(1, 1));
            }

            var IMHD = obj.GetIMHD();

            _width     = IMHD.Width;
            _height    = IMHD.Height;
            _imageData = obj.GetIMxx()[imageIndex].GetBOMP();

            if (PaletteIndex == 0)
            {
                _pallete = roomBlock.GetDefaultPalette();
            }
            else
            {
                _pallete = roomBlock.GetPALS().GetWRAP().GetAPALs()[PaletteIndex];
            }

            Decode();

            return(_resultBitmap);
        }
Пример #2
0
 public bool FieldReferenceEquals(ObjectImage referenceContext, JavaScriptObject fieldReference, JavaScriptObject fieldDefinition)
 {
     if (((string)fieldDefinition["Name"]) == ((string)fieldReference["Name"]))
     {
         return true;
     }
     return false;
 }
Пример #3
0
        public void Encode(RoomBlock blockToEncode, int objectIndex, int imageIndex, Bitmap imageToEncode)
        {
            ObjectImage obj = blockToEncode.GetOBIMs()[objectIndex];

            _imageToEncode = imageToEncode;
            var IMHD = obj.GetIMHD();

            _width     = IMHD.Width;
            _height    = IMHD.Height;
            _imageBomp = obj.GetIMxx()[imageIndex].GetBOMP();

            if (PaletteIndex == 0)
            {
                _pallete = blockToEncode.GetDefaultPalette();
            }
            else
            {
                _pallete = blockToEncode.GetPALS().GetWRAP().GetAPALs()[PaletteIndex];
            }

            Encode();
        }
Пример #4
0
        public override void SetAndRefreshData(Structures.BlockBase blockBase)
        {
            base.SetAndRefreshData(blockBase);

            if (ReferenceEquals(_diskBlock, blockBase))
            {
                return;
            }

            _loading = true;

            _diskBlock = (DiskBlock)blockBase;

            var roomBlock = (RoomBlock)_diskBlock.Childrens.Single(r => r.GetType() == typeof(RoomBlock));

            //Configurando as palettas Padrão
            PalettesData       pals         = roomBlock.GetPALS();
            List <PaletteData> paletteDatas = null;

            if (pals != null)
            {
                paletteDatas = pals.GetWRAP().GetAPALs();
            }
            Palettes.Items.Clear();
            if (paletteDatas != null)
            {
                for (int i = 0; i < paletteDatas.Count; i++)
                {
                    Palettes.Items.Add("Palette #" + i);
                }
            }
            else
            {
                Palettes.Items.Add("Palette #0");
            }
            if (Palettes.SelectedIndex < 0)
            {
                Palettes.SelectedIndex = 0;
            }
            Palettes.Visible = Palettes.Items.Count != 1;
            //Termino de configuração das palettas padrão

            TreeImages.Nodes.Clear();
            _roomImages = new Dictionary <string, RoomBlockImageControl>();
            CreateInfos = new Dictionary <string, ClassCreateInfo>();

            TreeNode backgroundNode = null;

            RoomImage RMIM = roomBlock.GetRMIM();

            if (RMIM.GetIM00().GetSMAP().Strips.Count > 0)
            {
                var createInfo = new ClassCreateInfo();
                createInfo.ImageType = ImageType.Background;
                createInfo.ControlId = "Background";
                CreateInfos.Add("Background", createInfo);

                backgroundNode = TreeImages.Nodes.Add("Background", "Room Background");
            }

            List <ZPlane> zPlanes = RMIM.GetIM00().GetZPlanes();

            for (int i = 0; i < zPlanes.Count; i++)
            {
                string planeKey = "Background ZPlane " + (i + 1);

                var createInfo = new ClassCreateInfo();
                createInfo.ImageType   = ImageType.ZPlane;
                createInfo.ControlId   = planeKey;
                createInfo.ZPlaneIndex = i;
                CreateInfos.Add(planeKey, createInfo);

                if (backgroundNode == null)
                {
                    TreeImages.Nodes.Add(planeKey, "Background Z-Plane " + (i + 1));
                }
                else
                {
                    backgroundNode.Nodes.Add(planeKey, "Z-Plane " + (i + 1));
                }
            }

            //Objetos
            List <ObjectImage> OBIMs = roomBlock.GetOBIMs();

            for (int i = 0; i < OBIMs.Count; i++)
            {
                TreeNode nodeObject = TreeImages.Nodes.Add("_object" + i, "Object " + i);

                ObjectImage      item = OBIMs[i];
                List <ImageData> IMXX = item.GetIMxx();

                for (int j = 0; j < IMXX.Count; j++)
                {
                    ImageData image = IMXX[j];

                    string   objectImageKey = string.Format("Object #{0}-{1}", i, j);
                    TreeNode nodeImage      = nodeObject.Nodes.Add(objectImageKey, "Image " + j);

                    var createInfo = new ClassCreateInfo();
                    createInfo.ImageType   = ImageType.Object;
                    createInfo.ControlId   = objectImageKey;
                    createInfo.ObjectIndex = i;
                    createInfo.ImageIndex  = j;
                    CreateInfos.Add(objectImageKey, createInfo);

                    List <ZPlane> objectZPlanes = image.GetZPlanes();
                    for (int k = 0; k < objectZPlanes.Count; k++)
                    {
                        string objectZPlaneKey = string.Format("Object #{0}-{1} ZPlane {2}", i, j, (k + 1));

                        nodeImage.Nodes.Add(objectZPlaneKey, "Z-Plane " + k);

                        createInfo             = new ClassCreateInfo();
                        createInfo.ImageType   = ImageType.ObjectsZPlane;
                        createInfo.ControlId   = objectZPlaneKey;
                        createInfo.ObjectIndex = i;
                        createInfo.ImageIndex  = j;
                        createInfo.ZPlaneIndex = k;
                        CreateInfos.Add(objectZPlaneKey, createInfo);
                    }
                }

                //Remove os itens se não tiver nenhuma imagem neles, só serve para poluir a tela.
                if (nodeObject.Nodes.Count == 0)
                {
                    TreeImages.Nodes.Remove(nodeObject);
                }
            }

            //Costumes
            List <Costume> costumesList = _diskBlock.Childrens.OfType <Costume>().ToList();

            for (int i = 0; i < costumesList.Count; i++)
            {
                TreeNode costume = TreeImages.Nodes.Add("_costume" + i, string.Format("Costume {0}", i.ToString().PadLeft(3, '0')));

                Costume currentCostume = costumesList[i];
                for (int j = 0; j < currentCostume.Pictures.Count; j++)
                {
                    //Vamos filtras apenas os frames que tem imagem para decodificar.
                    if (currentCostume.Pictures[j].ImageData.Length == 0 ||
                        currentCostume.Pictures[j].ImageData.Length == 1 && currentCostume.Pictures[j].ImageData[0] == 0)
                    {
                        continue;
                    }

                    string costumeKey = string.Format("Costume #{0}-{1}", i, j);

                    var createInfo = new ClassCreateInfo();
                    createInfo.ImageType  = ImageType.Costume;
                    createInfo.Costume    = currentCostume;
                    createInfo.ControlId  = costumeKey;
                    createInfo.ImageIndex = j;
                    CreateInfos.Add(costumeKey, createInfo);

                    costume.Nodes.Add(costumeKey, string.Format("Frame {0}", j.ToString().PadLeft(2, '0')));
                }
            }

            TreeImages.ExpandAll();
            TreeImages.SelectedNode = TreeImages.Nodes[0];

            _loading = false;
        }
Пример #5
0
        private void OK_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(ExportLocation.Text))
            {
                return;
            }
            if (!Directory.Exists(ExportLocation.Text))
            {
                return;
            }

            string location  = ExportLocation.Text;
            int    fileCount = 0;

            Cursor        = Cursors.WaitCursor;
            Cancel.Cursor = Cursors.Default;

            _cancelExport = false;
            _exporting    = true;
            foreach (Control control in Controls)
            {
                if (control.Name != "Cancel" && control.GetType() != typeof(Label) && control.GetType() != typeof(ProgressBar))
                {
                    control.Enabled = false;
                }
            }

            Application.DoEvents();

            var diskBlocks = _scummFile.DataFile.GetLFLFs();

            Progress.Maximum = diskBlocks.Count - 1;
            Progress.Value   = 0;
            Progress.Visible = true;

            FilesExported.Visible      = true;
            FilesExportedLabel.Visible = true;

            var decoder = new ImageDecoder();

            decoder.UseTransparentColor = ExportWithTransparency.Checked;

            var bompDecoder = new BompImageDecoder();

            bompDecoder.UseTransparentColor = ExportWithTransparency.Checked;

            var costumeDecoder = new CostumeImageDecoder();

            costumeDecoder.UseTransparentColor = ExportWithTransparency.Checked;

            var zplaneDecoder = new ZPlaneDecoder();

            var convert = new ImageDepthConversor();


            for (int i = 0; i < diskBlocks.Count; i++)
            {
                if (_cancelExport)
                {
                    break;
                }

                var currentRoom = (RoomBlock)diskBlocks[i].Childrens.Single(r => r.GetType() == typeof(RoomBlock));

                if (ExportBackgrounds.Checked)
                {
                    Bitmap background = decoder.Decode(currentRoom);
                    if (background != null)
                    {
                        if (Export8Bits.Checked)
                        {
                            background = convert.CopyToBpp(background, 8, currentRoom.GetDefaultPalette().Colors);
                        }
                        string backgroundName = Path.Combine(location, string.Format("Room#{0}.png", i));
                        background.Save(backgroundName, System.Drawing.Imaging.ImageFormat.Png);
                        File.WriteAllText(backgroundName + ".idx", string.Join(";", decoder.UsedIndexes));
                    }
                    FilesExported.Text = (++fileCount).ToString();
                }

                if (ExportBackgroundZPlanes.Checked)
                {
                    List <ZPlane> zPlanes = currentRoom.GetRMIM().GetIM00().GetZPlanes();

                    for (int j = 0; j < zPlanes.Count; j++)
                    {
                        if (_cancelExport)
                        {
                            break;
                        }

                        Bitmap zplane = zplaneDecoder.Decode(currentRoom, j);
                        if (zplane != null)
                        {
                            if (Export8Bits.Checked)
                            {
                                zplane = convert.CopyToBpp(zplane, 1, new Color[2] {
                                    Color.Black, Color.White
                                });
                            }
                            zplane.Save(Path.Combine(location, string.Format("Room#{0} ZP#{1}.png", i, j)), System.Drawing.Imaging.ImageFormat.Png);
                            FilesExported.Text = (++fileCount).ToString();
                        }
                    }
                }


                if (ExportObjects.Checked)
                {
                    var OBIMs = currentRoom.GetOBIMs();
                    for (int j = 0; j < OBIMs.Count; j++)
                    {
                        ObjectImage      objectImage = OBIMs[j];
                        List <ImageData> IMxx        = objectImage.GetIMxx();

                        for (int k = 0; k < IMxx.Count; k++)
                        {
                            if (_cancelExport)
                            {
                                break;
                            }

                            Bitmap image;
                            int[]  usedIndexes;

                            if (IMxx[k].GetSMAP() == null)
                            {
                                image       = bompDecoder.Decode(currentRoom, j, k);
                                usedIndexes = bompDecoder.UsedIndexes.ToArray();
                            }
                            else
                            {
                                image       = decoder.Decode(currentRoom, j, k);
                                usedIndexes = decoder.UsedIndexes.ToArray();
                            }

                            if (Export8Bits.Checked)
                            {
                                image = convert.CopyToBpp(image, 8, currentRoom.GetDefaultPalette().Colors);
                            }
                            string objectFilename = Path.Combine(location, string.Format("Room#{0} Obj#{1} Img#{2}.png", i, j, k));
                            image.Save(objectFilename, System.Drawing.Imaging.ImageFormat.Png);
                            File.WriteAllText(objectFilename + ".idx", string.Join(";", usedIndexes));

                            FilesExported.Text = (++fileCount).ToString();
                        }
                    }
                }

                if (ExportObjectsZPlanes.Checked)
                {
                    var OBIMs = currentRoom.GetOBIMs();
                    for (int j = 0; j < OBIMs.Count; j++)
                    {
                        ObjectImage      objectImage = OBIMs[j];
                        List <ImageData> IMxx        = objectImage.GetIMxx();

                        for (int k = 0; k < IMxx.Count; k++)
                        {
                            List <ZPlane> zplanes = IMxx[k].GetZPlanes();
                            for (int l = 0; l < zplanes.Count; l++)
                            {
                                if (_cancelExport)
                                {
                                    break;
                                }

                                Bitmap zplane = zplaneDecoder.Decode(currentRoom, j, k, l);

                                if (Export8Bits.Checked)
                                {
                                    zplane = convert.CopyToBpp(zplane, 1, new Color[2] {
                                        Color.Black, Color.White
                                    });
                                }
                                zplane.Save(Path.Combine(location, string.Format("Room#{0} Obj#{1} Img#{2} ZP#{3}.png", i, j, k, l)), System.Drawing.Imaging.ImageFormat.Png);

                                FilesExported.Text = (++fileCount).ToString();
                            }
                        }
                    }
                }

                if (ExportCostumes.Checked)
                {
                    DiskBlock currentDisk = diskBlocks[i];

                    List <Costume> costumesList = currentDisk.Childrens.OfType <Costume>().ToList();
                    for (int j = 0; j < costumesList.Count; j++)
                    {
                        Costume costume = costumesList[j];
                        for (int k = 0; k < costume.Pictures.Count; k++)
                        {
                            if (_cancelExport)
                            {
                                break;
                            }

                            if (costume.Pictures[k].ImageData.Length == 0 ||
                                costume.Pictures[k].ImageData.Length == 1 && costume.Pictures[k].ImageData[0] == 0)
                            {
                                continue;
                            }

                            Bitmap image = costumeDecoder.Decode(currentRoom, costume, k);

                            if (Export8Bits.Checked)
                            {
                                var c = new List <Color>();
                                for (int z = 0; z < 256; z++)
                                {
                                    c.Add(Color.Black);
                                }

                                PaletteData defaultPallete = currentRoom.GetDefaultPalette();
                                for (int z = 0; z < costume.Palette.Count; z++)
                                {
                                    c[z] = defaultPallete.Colors[costume.Palette[z]];
                                }
                                image = convert.CopyToBpp(image, 8, c.ToArray());
                            }

                            image.Save(Path.Combine(location, string.Format("Room#{0} Costume#{1} FrameIndex#{2}.png", i, j, k)), System.Drawing.Imaging.ImageFormat.Png);
                            FilesExported.Text = (++fileCount).ToString();
                        }
                    }
                }

                Progress.Value = i;
                Application.DoEvents();
            }

            Progress.Visible = false;
            _exporting       = false;
            Cursor           = Cursors.Default;

            if (_cancelExport)
            {
                MessageBox.Show("Export cancelled.");
            }
            else
            {
                MessageBox.Show("All images sucefully exported");
            }
            Close();
        }
Пример #6
0
        //private static void GetTopNews(string html, FilterFullInfo record)
        //{
        //    try
        //    {
        //        long totalSize = 0;

        //        //string p = "<div class="folder-top">.*?<a.*?href="(?<Link>.*?)".*?><img.*?src="(?<ImagePath>.*?)".*?/></a>.*?<p><a.*?href=".*?".*?class="link-topnews">(?<Title>.*?)</a>.*?<label class="item-time">(?<Time>.*?)</label>.*?<label class="item-date">(?<Date>.*?)</label></p>.*?<p>(?<Teaser>.*?)</p>.*?</div>";
        //        MatchCollection mcList = Regex.Matches(html, record.ParternGetTopNews, RegexOptions.IgnoreCase | RegexOptions.Singleline);


        //    }
        //    catch (Exception ex)
        //    {
        //        _logger.Info(string.Format("Error = {0}", ex.Message) + Environment.NewLine);

        //    }

        //}

        //Tra ve 1 mang chua cac link va image thumb
        private static string StartMining(Record record)
        {
            string url       = record.Source;
            long   totalSize = 0;
            string html      = RunBrowser(record.Source, out totalSize);

            HtmlDocument docList = new HtmlDocument();

            docList.LoadHtml(html);
            HtmlNode nodes = docList.DocumentNode.SelectSingleNode(record.ListStartAfter);

            if (nodes != null)
            {
                html = nodes.InnerHtml;
            }
            else
            {
                html = "";
            }


            if (html != "")
            {
                html = html.Replace("\r\n", "").Replace("> <", "><");

                HtmlDocument doc1 = new HtmlDocument();
                doc1.LoadHtml(html);
                HtmlNodeCollection nodesList = doc1.DocumentNode.SelectNodes(record.PartternNodeList);

                if (nodesList != null)
                {
                    foreach (HtmlNode itemList in nodesList)
                    {
                        HtmlDocument docitemList = new HtmlDocument();
                        docitemList.LoadHtml(itemList.InnerHtml);

                        string   imgAvatar    = "";
                        HtmlNode itemListNode = docitemList.DocumentNode;
                        HtmlNode nodesImage   = itemListNode.SelectSingleNode(record.PartternAvatar);
                        if (nodesImage != null)
                        {
                            imgAvatar = nodesImage.InnerHtml;
                        }
                        //itemListNode = docitemList.DocumentNode;
                        HtmlNode nodesTitle = itemListNode.SelectSingleNode(record.PartternTitle);
                        string   title      = "";
                        if (nodesTitle != null)
                        {
                            title = nodesTitle.InnerText;
                        }
                        //itemListNode = docitemList.DocumentNode;
                        HtmlNode nodesTeaser = itemListNode.SelectSingleNode(record.PartternTeaser);
                        string   Teaser      = "";
                        if (nodesTeaser != null)
                        {
                            Teaser = Regex.Replace(nodesTeaser.InnerHtml, "<.*?>.*?</.*?>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
                            //Teaser = nodesTeaser.InnerText;
                        }
                        //itemListNode = docitemList.DocumentNode;
                        HtmlNode nodesLink = itemListNode.SelectSingleNode(record.PartternLink);
                        string   link      = "";
                        if (nodesLink != null)
                        {
                            HtmlAttribute linkAtt = nodesLink.Attributes["href"];
                            link = linkAtt.Value;
                        }

                        //HtmlNode nodesPubDate = itemList.SelectSingleNode("//*[@class=\"box-wiget-content-timpost\"]");
                        //string pubDate = nodesPubDate.InnerHtml;

                        //MatchCollection mcList = Regex.Matches(html, record.ParternList, RegexOptions.IgnoreCase | RegexOptions.Singleline);

                        var list      = new List <ObjectLink>();
                        var listImage = new List <ObjectImage>();

                        int i = 0;

                        //if (mcList != null && mcList.Count > 0)
                        //{
                        //    _logger.Debug("Matchs  : " + mcList.Count.ToString());

                        //foreach (Match match in mcList)
                        //{
                        #region Get main content

                        var contentInfo = new ContentInfo();

                        contentInfo.Content_Headline = AppEnv.NCRToUnicode(Regex.Replace(title, "<.*?>", "", RegexOptions.IgnoreCase | RegexOptions.Singleline)); // AppEnv.NCRToUnicode(Regex.Replace(match.Groups["Title"].Value, "<.*?>", "", RegexOptions.IgnoreCase | RegexOptions.Singleline));
                        contentInfo.Content_Url      = OptimiseUrl(link, record);                                                                                 //OptimiseUrl(match.Groups["Link"].Value, record);

                        if (contentInfo.Content_Url.StartsWith("http://"))
                        {
                            try
                            {
                                Uri uri  = new Uri(contentInfo.Content_Url);
                                Uri uri1 = new Uri(record.Source);
                                if (uri.Host != uri1.Host)
                                {
                                    continue;
                                }
                            }
                            catch (Exception)
                            {
                                continue;
                            }
                        }
                        else
                        {
                        }

                        long totalSizeTemp = 0;

                        //if (contentInfo.Content_Url == "http://news.zing.vn/Hai-toa-nha-5-tang-sap-sau-tieng-no-tai-New-York-post398904.html#pictures")
                        //{
                        //    string es = "";
                        //}
                        string contentDetail = GetContentDetail(contentInfo.Content_Url, record, out totalSizeTemp);
                        if (contentDetail.Trim() == "")
                        {
                            continue;
                        }
                        contentInfo.Content_Teaser = GetContentTeaser(contentDetail, record); //Teaser;
                        //if (contentInfo.Content_Teaser.Trim() == "")
                        //{
                        //    continue;
                        //}

                        string tags = GetTag(contentDetail, record);
                        contentInfo.Content_Body = GetContentBody(contentDetail, record);
                        //if (contentInfo.Content_Body.Trim() == "")
                        //{
                        //    continue;
                        //}

                        string date = "";
                        //date = pubDate;// match.Groups["PubDate"].Value;
                        if (date == "")
                        {
                            //if (record.PartternPubDate != "")
                            //{
                            date = GetPubDateByParttern(contentDetail, record);
                            //}
                            //else
                            //{
                            //    date = GetPubDate(contentInfo.Content_Body, record);
                            //}
                        }

                        contentInfo.Content_CreateDate = OpitmisePubDate(date, record.FormatDate);

                        contentInfo.Content_Status     = 1;
                        contentInfo.CategoryID         = record.CategoryID;
                        contentInfo.Content_UserID     = 212;
                        contentInfo.Content_HeadlineKD = UnicodeUtility.UnicodeToKoDau(contentInfo.Content_Headline);
                        contentInfo.Content_TeaserKD   = UnicodeUtility.UnicodeToKoDau(contentInfo.Content_Teaser);
                        contentInfo.Content_Source     = record.Page;

                        string imagePath = imgAvatar;// match.Groups["ImagePath"].Value.Trim();
                        if (imagePath.IndexOf("src=\"") > -1)
                        {
                            imagePath = imagePath.Substring(imagePath.IndexOf("src=\"") + 5);
                            imagePath = imagePath.Substring(0, imagePath.IndexOf("\""));
                        }
                        if (imagePath.IndexOf("src='") > -1)
                        {
                            imagePath = imagePath.Substring(imagePath.IndexOf("src='") + 5);
                            imagePath = imagePath.Substring(0, imagePath.IndexOf("'"));
                        }
                        string imageDownloadUrl = "";
                        string imageName        = "";
                        if (Convert.ToInt32(AppEnv.GetSetting("SaveImage")) == 1)
                        {
                            #region lay anh dau tien trong bai chi tiet

                            HtmlDocument doc = new HtmlDocument();
                            doc.LoadHtml(contentInfo.Content_Body);

                            HtmlNodeCollection node = doc.DocumentNode.SelectNodes("//img");
                            if (node != null)
                            {
                                foreach (HtmlNode img in node)
                                {
                                    HtmlAttribute att = img.Attributes["src"];
                                    imageDownloadUrl = att.Value;

                                    string   exceptionImg = AppEnv.GetSetting("exceptionImg");
                                    string[] arr          = exceptionImg.Split(',');
                                    int      flag         = 0;
                                    foreach (string item in arr)
                                    {
                                        if (item != "")
                                        {
                                            if (imageDownloadUrl.Contains(item))
                                            {
                                                flag             = 1;
                                                imageDownloadUrl = "";
                                                break;
                                            }
                                        }
                                    }

                                    if (flag == 1)
                                    {
                                        continue;
                                    }
                                    else
                                    {
                                        break;
                                    }
                                }
                                if (imageDownloadUrl == "")
                                {
                                    imageDownloadUrl = imagePath;
                                }
                            }
                            else
                            {
                                imageDownloadUrl = imagePath;
                            }

                            #endregion

                            imageDownloadUrl = OptimiseUrl(imageDownloadUrl, record);
                            imageName        = DateTime.Now.ToString("yyyyMMddHHmmssffff") + ".jpg";

                            var objectImage = new ObjectImage
                            {
                                ImageName = imageName,
                                Link      = imageDownloadUrl
                            };

                            listImage.Add(objectImage);

                            contentInfo.Content_Avatar = AppEnv.GetSetting("virtualPath") + DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + "/" + imageName;
                        }
                        else
                        {
                            contentInfo.Content_Avatar = record.HttpPrefix + imagePath;
                        }
                        contentInfo.Content_BigAvatar = "";

                        if (i < 6)
                        {
                            contentInfo.Content_Rank = 2;
                        }
                        else
                        {
                            contentInfo.Content_Rank = 1;
                        }

                        contentInfo.IsPublished = true;

                        try
                        {
                            DateTime dt = DateTime.Parse(contentInfo.Content_CreateDate, new CultureInfo("fr-FR", false));
                            if (dt.Year == DateTime.Now.Year && dt.Month == DateTime.Now.Month && dt.Day < DateTime.Now.Day)
                            {
                                continue;
                            }
                            else
                            {
                                if (dt.Year < DateTime.Now.Year || dt.Month < DateTime.Now.Month)
                                {
                                    continue;
                                }
                                else
                                {
                                    int returnValue = AppEnv.Insert(contentInfo);
                                }
                            }
                        }
                        catch (Exception)
                        {
                            try
                            {
                            }
                            catch (Exception)
                            {
                                int returnValue = AppEnv.Insert(contentInfo);
                            }
                        }

                        #endregion

                        i++;

                        totalSize += totalSizeTemp;
                        //}

                        string physicalPath = AppEnv.GetSetting("phyPath") + DateTime.Now.Year + "\\" + DateTime.Now.Month + "\\" + DateTime.Now.Day + "\\";

                        #region Download Image

                        if (listImage != null && listImage.Count > 0)
                        {
                            int totalImage = 0;
                            foreach (ObjectImage item in listImage)
                            {
                                Image image = DownloadImage(item.Link);

                                if (image != null)
                                {
                                    if (!Directory.Exists(physicalPath))
                                    {
                                        Directory.CreateDirectory(physicalPath);
                                    }

                                    image.Save(physicalPath + item.ImageName, ImageFormat.Jpeg);
                                    totalImage++;
                                }
                            }
                        }


                        #endregion

                        _logger.Info(string.Format("Finished mining with source = {0}", record.Source) + Environment.NewLine);
                        //}
                    }
                    return(html);
                }
                else
                {
                    return("");
                }
            }
            else
            {
                return("");
            }
        }
Пример #7
0
 public ResolvedReference(ObjectImage context, JavaScriptObject resolved)
 {
     Context = context;
     Resolved = resolved;
 }
Пример #8
0
        public void Fixup(ObjectImage objectImage)
        {
            JavaScriptObject metadata = objectImage.GetMetadata();
            JavaScriptArray fixups = objectImage.GetFixups();

            List<KeyValuePair<uint, string>> codeSectionFixups = objectImage.CodeSectionFixups = new List<KeyValuePair<uint, string>>();
            List<KeyValuePair<uint, string>> dataSectionFixups = objectImage.DataSectionFixups = new List<KeyValuePair<uint, string>>();
            List<KeyValuePair<uint, string>> initSectionFixups = objectImage.InitializationSectionFixups = new List<KeyValuePair<uint, string>>();
            List<KeyValuePair<uint, string>> currentSectionFixups;
            foreach (JavaScriptObject fixup in fixups)
            {
                FixupType fixupType = (FixupType)(long)fixup["Type"];
                FixupType sectionFixupType = fixupType & (FixupType.CodeSection | FixupType.DataSection | FixupType.InitializationSection);
                fixupType = fixupType & ~FixupType.CodeSection;
                fixupType = fixupType & ~FixupType.DataSection;
                fixupType = fixupType & ~FixupType.InitializationSection;
                switch (sectionFixupType)
                {
                    case FixupType.CodeSection:
                        {
                            currentSectionFixups = codeSectionFixups;
                            break;
                        }
                    case FixupType.DataSection:
                        {
                            currentSectionFixups = dataSectionFixups;
                            break;
                        }
                    case FixupType.InitializationSection:
                        {
                            currentSectionFixups = initSectionFixups;
                            break;
                        }
                    default:
                        {
                            throw new LinkerException();
                        }
                }
                uint fixupOffset = (uint)(long)fixup["Offset"];
                int fixupIndex = (int)(long)fixup["Index"];
                string fixedUp;
                try
                {
                    switch (fixupType)
                    {
                        case FixupType.MethodCodePointer:
                            {
                                JavaScriptObject methodReference = (JavaScriptObject)((JavaScriptArray)metadata["MethodReferences"])[fixupIndex];
                                ResolvedReference resolvedReference = ResolveMethodReference(objectImage, methodReference);
                                fixedUp = (resolvedReference.Context.ModuleImageCodeStoreIndex + (long)resolvedReference.Resolved["CodeIndex"]).ToString();
                                break;
                            }
                        case FixupType.StaticFieldDataPointer:
                            {
                                JavaScriptObject fieldReference = (JavaScriptObject)((JavaScriptArray)metadata["FieldReferences"])[fixupIndex];
                                ResolvedReference resolvedReference = ResolveFieldReference(objectImage, fieldReference);
                                fixedUp = (resolvedReference.Context.ModuleImageDataStoreIndex + (long)resolvedReference.Resolved["DataIndex"]).ToString();
                                break;
                            }
                        case FixupType.VTableDataPointer:
                            {
                                JavaScriptObject typeReference = (JavaScriptObject)((JavaScriptArray)metadata["TypeReferences"])[fixupIndex];
                                ResolvedReference resolvedReference = ResolveTypeReference(objectImage, typeReference);
                                fixedUp = (resolvedReference.Context.ModuleImageDataStoreIndex + (long)resolvedReference.Resolved["VTableIndex"]).ToString();
                                break;
                            }
                        case FixupType.VTableSlot:
                            {
                                JavaScriptObject methodReference = (JavaScriptObject)((JavaScriptArray)metadata["MethodReferences"])[fixupIndex];
                                ResolvedReference resolvedReference = ResolveMethodReference(objectImage, methodReference);
                                fixedUp = resolvedReference.Resolved["VTableSlot"].ToString();
                                break;
                            }
                        default:
                            {
                                throw new InvalidObjectFormatException();
                            }
                    }
                }
                catch (Exception e)
                {
                    Error("COULD NOT FIXUP: [" + fixupType.ToString() + " " + e.Message + "].  Object image is: " + objectImage);
                    fixedUp = "COULD NOT FIXUP: [" + fixupType.ToString() + " " + e.Message + "]";
                }
                currentSectionFixups.Add(new KeyValuePair<uint, string>(fixupOffset, fixedUp));
            }
        }
Пример #9
0
 public bool TypeReferenceEquals(ObjectImage referenceContext, JavaScriptObject typeReference, ObjectImage definitionContext, JavaScriptObject typeDefinition)
 {
     bool isGeneric = (bool)typeReference["IsGeneric"];
     if (isGeneric)
     {
         // TODO: check constraints etc
         return true;
     }
     string typeReferenceName = ((string)typeReference["Name"]);
     if (typeReferenceName.EndsWith("&"))
     {
         // this is a reference type
         // remove trailing "&" from type reference name
         typeReferenceName = typeReferenceName.Substring(0, typeReferenceName.Length - 1);
     }
     if (((string)typeDefinition["Name"]) == typeReferenceName &&
         ((string)typeDefinition["Namespace"]) == ((string)typeReference["Namespace"]))
     {
         return true;
     }
     return false;
 }
Пример #10
0
 public void SetEntryPointObjectImage(ObjectImage objectImage)
 {
     _entryPointImage = objectImage;
 }
Пример #11
0
        public ResolvedReference ResolveTypeReference(ObjectImage context, JavaScriptObject typeReference)
        {
            JavaScriptObject metadata = context.GetMetadata();
            int assemblyReferenceIndex = (int)(long)typeReference["Assembly"];
            ObjectImage referencedObjectImage;
            if (assemblyReferenceIndex == -1)
            {
                referencedObjectImage = context;
            }
            else
            {
                JavaScriptObject assemblyReference = (JavaScriptObject)((JavaScriptArray)metadata["AssemblyReferences"])[assemblyReferenceIndex];
                referencedObjectImage = ResolveAssemblyReference(assemblyReference);
            }

            JavaScriptObject referencedMetadata = referencedObjectImage.GetMetadata();
            foreach (JavaScriptObject typeDefinition in (JavaScriptArray)referencedMetadata["Types"])
            {
                if (TypeReferenceEquals(context, typeReference, referencedObjectImage, typeDefinition))
                {
                    int declaringTypeReferenceIndex = (int)(long)typeReference["DeclaringType"];
                    int declaringTypeReferenceIndex2 = (int)(long)typeDefinition["DeclaringType"];
                    if (declaringTypeReferenceIndex != -1 && declaringTypeReferenceIndex2 != -1)
                    {
                        // if both have declaring types
                        JavaScriptObject declaringTypeReference = (JavaScriptObject)((JavaScriptArray)metadata["TypeReferences"])[declaringTypeReferenceIndex];
                        JavaScriptObject declaringTypeReference2 = (JavaScriptObject)((JavaScriptArray)referencedMetadata["TypeReferences"])[declaringTypeReferenceIndex2];
                        ResolvedReference resolvedReference = ResolveTypeReference(referencedObjectImage, declaringTypeReference2);
                        if (!TypeReferenceEquals(context, declaringTypeReference, resolvedReference.Context, resolvedReference.Resolved))
                        {
                            continue;
                        }
                    }
                    else if (declaringTypeReferenceIndex != -1 || declaringTypeReferenceIndex2 != -1)
                    {
                        // if one has a declaring type and not the other
                        continue;
                    }
                    return new ResolvedReference(referencedObjectImage, typeDefinition);
                }
            }
            // TODO: Resolve declaring type to get its full name
            throw new Exception("Could not resolve type: " + (typeReference.ContainsKey("DeclaringType") && (long)typeReference["DeclaringType"] != -1 ? typeReference["DeclaringType"] : typeReference["Namespace"]) + "." + typeReference["Name"]);
        }
Пример #12
0
 public ResolvedReference ResolveMethodReference(ObjectImage context, JavaScriptObject methodReference)
 {
     JavaScriptObject metadata = context.GetMetadata();
     int typeReferenceIndex = (int)(long)methodReference["Type"];
     JavaScriptObject typeReference = (JavaScriptObject)((JavaScriptArray)metadata["TypeReferences"])[typeReferenceIndex];
     ResolvedReference resolvedTypeDefinitionReference = ResolveTypeReference(context, typeReference);
     JavaScriptObject typeDefinition = resolvedTypeDefinitionReference.Resolved;
     foreach (JavaScriptObject methodDefinition in (JavaScriptArray)typeDefinition["Methods"])
     {
         if (MethodReferenceEquals(context, methodReference, resolvedTypeDefinitionReference.Context, methodDefinition))
         {
             return new ResolvedReference(resolvedTypeDefinitionReference.Context, methodDefinition);
         }
     }
     throw new Exception("Could not resolve method: " + typeReference["Namespace"] + "." + typeReference["Name"] + "::" + methodReference["Name"]);
 }
Пример #13
0
        public ResolvedReference ResolveFieldReference(ObjectImage context, JavaScriptObject fieldReference)
        {
            JavaScriptObject metadata = context.GetMetadata();
            int typeReferenceIndex = (int)(long)fieldReference["Type"];
            JavaScriptObject typeReference = (JavaScriptObject)((JavaScriptArray)metadata["TypeReferences"])[typeReferenceIndex];
            ResolvedReference resolvedTypeDefinitionReference = ResolveTypeReference(context, typeReference);
            JavaScriptObject typeDefinition = resolvedTypeDefinitionReference.Resolved;

            foreach (JavaScriptObject fieldDefinition in (JavaScriptArray)typeDefinition[(bool)fieldReference["IsStatic"] ? "StaticFields" : "Fields"])
            {
                if (FieldReferenceEquals(context, fieldReference, fieldDefinition))
                {
                    return new ResolvedReference(resolvedTypeDefinitionReference.Context, fieldDefinition);
                }
            }
            throw new Exception("Could not resolve field: " + typeReference["Namespace"] + "." + typeReference["Name"] + "." + fieldReference["Name"]);
        }
Пример #14
0
        public bool ParameterReferenceEquals(ObjectImage referenceContext, JavaScriptObject parameterReference, ObjectImage definitionContext, JavaScriptObject parameterDefinition)
        {
            /*if (((string)parameterReference["Name"]) != ((string)parameterDefinition["Name"]))
            {
                return false;
            }*/

            if (((long)parameterReference["Sequence"]) != ((long)parameterDefinition["Sequence"]))
            {
                return false;
            }

            JavaScriptObject metadata = referenceContext.GetMetadata();

            int typeReferenceIndex = (int)(long)parameterReference["Type"];
            JavaScriptObject typeReference = (JavaScriptObject)((JavaScriptArray)metadata["TypeReferences"])[typeReferenceIndex];
            ResolvedReference resolvedTypeDefinitionReference = ResolveTypeReference(referenceContext, typeReference);

            return TypeReferenceEquals(definitionContext, (JavaScriptObject)((JavaScriptArray)definitionContext.GetMetadata()["TypeReferences"])[(int)(long)parameterDefinition["Type"]], referenceContext, resolvedTypeDefinitionReference.Resolved);
        }
Пример #15
0
        public bool MethodReferenceEquals(ObjectImage referenceContext, JavaScriptObject methodReference, ObjectImage definitionContext, JavaScriptObject methodDefinition)
        {
            if (((string)methodReference["Name"]) != ((string)methodDefinition["Name"]))
            {
                return false;
            }
            if (((bool)methodReference["HasThis"]) != ((bool)methodDefinition["HasThis"]))
            {
                return false;
            }

            JavaScriptArray methodReferenceParameterReferences = (JavaScriptArray)methodReference["Parameters"];
            JavaScriptArray methodDefinitionParameters = (JavaScriptArray)methodDefinition["Parameters"];

            if (methodReferenceParameterReferences.Count != methodDefinitionParameters.Count)
            {
                return false;
            }

            JavaScriptObject metadata = referenceContext.GetMetadata();
            int i = 0;
            foreach (long parameterReferenceIndex in methodReferenceParameterReferences)
            {
                if (!ParameterReferenceEquals(referenceContext, (JavaScriptObject)((JavaScriptArray)metadata["ParameterReferences"])[(int)parameterReferenceIndex], definitionContext, (JavaScriptObject)methodDefinitionParameters[i++]))
                {
                    return false;
                }
            }
            return true;
        }
Пример #16
0
        public AssemblyName LoadObjectImage(string filepath)
        {
            ObjectImage objectImage = new ObjectImage();

            XmlDocument objectFileXmlDocument = new XmlDocument();
            try
            {
                objectFileXmlDocument.Load(filepath);
            }
            catch (XmlException e)
            {
                throw new LinkerException("Unable to load object image: " + filepath, e);
            }
            // TODO: Verify object file xml format
            XmlElement documentElement = objectFileXmlDocument.DocumentElement;
            XmlElement headerElement = (XmlElement)documentElement.GetElementsByTagName("Header")[0];

            // load header
            JavaScriptObject header = (JavaScriptObject)JavaScriptConvert.DeserializeObject(((XmlCDataSection)headerElement.FirstChild).Data);
            objectImage.Header = header;
            JavaScriptObject metadata = objectImage.GetMetadata();
            AssemblyName assemblyName = new AssemblyName();
            JavaScriptObject assemblyNameObject = (JavaScriptObject)metadata["Name"];
            assemblyName.Name = (string)assemblyNameObject["Name"];
            assemblyName.Version = (string)assemblyNameObject["Version"];
            assemblyName.Culture = (string)assemblyNameObject["Culture"];
            objectImage.Name = assemblyName;

            // load code section
            XmlElement codeElement = (XmlElement)documentElement.GetElementsByTagName("Code")[0];
            MemoryStream codeMemoryStream = new MemoryStream();
            StreamWriter codeMemoryStreamWriter = new StreamWriter(codeMemoryStream);
            codeMemoryStreamWriter.Write(((XmlCDataSection)codeElement.FirstChild).Data);
            codeMemoryStreamWriter.Flush();
            long codeMemoryStreamLength = codeMemoryStream.Position;
            codeMemoryStream.Seek(0, SeekOrigin.Begin);
            objectImage.CodeStream = codeMemoryStream;
            objectImage.CodeStreamLength = codeMemoryStreamLength;
            objectImage.MethodCount = (int)long.Parse(codeElement.GetAttribute("Length"));
            objectImage.ModuleImageCodeStoreIndex = _moduleImageCodeStoreSize;
            _moduleImageCodeStoreSize += objectImage.MethodCount;

            // load data section
            XmlElement dataElement = (XmlElement)documentElement.GetElementsByTagName("Data")[0];
            MemoryStream dataMemoryStream = new MemoryStream();
            StreamWriter dataMemoryStreamWriter = new StreamWriter(dataMemoryStream);
            dataMemoryStreamWriter.Write(((XmlCDataSection)dataElement.FirstChild).Data);
            dataMemoryStreamWriter.Flush();
            long dataMemoryStreamLength = dataMemoryStream.Position;
            dataMemoryStream.Seek(0, SeekOrigin.Begin);
            objectImage.DataStream = dataMemoryStream;
            objectImage.DataStreamLength = dataMemoryStreamLength;
            objectImage.DataCount = (int)long.Parse(dataElement.GetAttribute("Length"));
            objectImage.ModuleImageDataStoreIndex = _moduleImageDataStoreSize;
            _moduleImageDataStoreSize += objectImage.DataCount;

            // load init section
            XmlElement initElement = (XmlElement)documentElement.GetElementsByTagName("Initialization")[0];
            MemoryStream initMemoryStream = new MemoryStream();
            StreamWriter initMemoryStreamWriter = new StreamWriter(initMemoryStream);
            initMemoryStreamWriter.Write(((XmlCDataSection)initElement.FirstChild).Data);
            initMemoryStreamWriter.Flush();
            long initMemoryStreamLength = initMemoryStream.Position;
            initMemoryStream.Seek(0, SeekOrigin.Begin);
            objectImage.InitializationStream = initMemoryStream;
            objectImage.InitializationStreamLength = initMemoryStreamLength;

            _loadedObjectImages[assemblyName] = objectImage;
            return assemblyName;
        }