private void FilePackClick(object sender, EventArgs e)
        {
            IMenuItem menuItem = (IMenuItem)sender;
            FilePack  pack     = (FilePack)menuItem.Tag;

            m_clipboard.SetFileDropList(pack);
        }
        private void AppendMenuEntryForFilePack(FilePack pack)
        {
            IMenuItem menuItem = m_menuItemProvider.Provide(pack.CommonAncestor, pack);

            menuItem.Click += FilePackClick;
            m_contextMenu.Add(menuItem);
        }
 private void FilePacksRepositoryOnClipboardFilePacksUpdated(object sender, FilePacksChangeArgs args)
 {
     if (args.OpType == FilePacksChangeType.Added)
     {
         m_recentFilePack = args.ChangedPack;
     }
     UpdateContextMenu();
 }
Ejemplo n.º 4
0
        internal override bool TryParse(IMessageDialog dialog, FilePack filePack, out AddinResolution resolution)
        {
            resolution = null;
            if (!IsManifest(dialog, filePack.ManifestFile))
            {
                return(false);
            }

            var manifest = new XmlManifest
            {
                AddinHeader             = ReadHeader(),
                ExtensionDeclaration    = ReadDeclaration(),
                ExtensionImplementation = ReadImplementation(),
            };

            var addinDir         = Path.Combine(filePack.AddinProbeDirectory, filePack.AddinDirectoryName);
            var manifestFilePath = IoHelper.GetRelativePath(filePack.ManifestFile, addinDir);

            manifest.ManifestFile = new ManifestFileXml
            {
                Directory     = addinDir,
                FilePath      = manifestFilePath,
                LastWriteTime = IoHelper.GetLastWriteTime(filePack.ManifestFile),
                FileHash      = IoHelper.GetFileHash(filePack.ManifestFile)
            };

            if (filePack.AssemblyFiles != null)
            {
                manifest.AssemblyFiles = new List <AssemblyFileXml>();
                foreach (var assemblyFile in filePack.AssemblyFiles)
                {
                    var asmFile = new AssemblyFileXml
                    {
                        FilePath      = IoHelper.GetRelativePath(assemblyFile, addinDir),
                        LastWriteTime = IoHelper.GetLastWriteTime(assemblyFile)
                    };
                    manifest.AssemblyFiles.Add(asmFile);
                }
            }

            if (filePack.DataFiles != null)
            {
                manifest.DataFiles = new List <DataFileXml>();
                foreach (var dataFile in filePack.DataFiles)
                {
                    var dtFile = new DataFileXml {
                        FilePath = IoHelper.GetRelativePath(dataFile, addinDir)
                    };
                    manifest.DataFiles.Add(dtFile);
                }
            }

            return(manifest.Introspect(dialog) && manifest.TryParse(dialog, out resolution));
        }
Ejemplo n.º 5
0
 internal abstract bool TryParse(IMessageDialog dialog, FilePack filePack, out AddinResolution resolution);
Ejemplo n.º 6
0
 public FrontEnd(string content, string assets) : base("/ui")
 {
     this.content = new FilePack(content);
     this.assets  = new FilePack(assets);
 }
Ejemplo n.º 7
0
        //压缩图片
        public static void packFiles(ShowString dialog, String srcPath, String searchPatten, int maxPack, bool deleteOld)
        {
            //清除包裹文件
            dialog.showString("==>清除旧包裹文件");
            String[] files = Directory.GetFiles(srcPath, "*.*");
            for (int i = 0; i < files.Length; i++)
            {
                int    pos  = files[i].LastIndexOf('\\');
                String name = files[i].Substring(pos + 1, files[i].Length - (pos + 1));
                if (name.IndexOf("filePacks") >= 0 || name.IndexOf("aep") >= 0)
                {
                    File.Delete(files[i]);
                }
            }
            //开始转换
            files = IOUtil.listFiles(srcPath, searchPatten);
            dialog.showString("==>共发现" + files.Length + "个文件");
            ArrayList filePackList = new ArrayList();
            FilePack  filePack     = new FilePack();

            filePackList.Add(filePack);
            int addUpSize = 0;

            for (int i = 0; i < files.Length; i++)
            {
                int    pos  = files[i].LastIndexOf('\\');
                String name = files[i].Substring(pos + 1, files[i].Length - (pos + 1));
                byte[] data = IOUtil.ReadFile(files[i]);
                addUpSize += data.Length;
                if (i == 0)//第一个包,则将当前文件压入这个包
                {
                    filePack.addFile(name, data);
                    if (addUpSize >= maxPack)
                    {
                        filePack = new FilePack();
                        filePackList.Add(filePack);
                        addUpSize = data.Length;
                    }
                }
                else//不是第一个包,则将当前文件压入后一个包
                {
                    if (addUpSize >= maxPack)
                    {
                        filePack = new FilePack();
                        filePackList.Add(filePack);
                        addUpSize = data.Length;
                    }
                    filePack.addFile(name, data);
                }
            }
            //开始输出
            String     dictionFile  = srcPath + "\\" + Consts.exportFileName + "_filePacks.bin";
            FileStream fsDictionary = new FileStream(dictionFile, FileMode.Create);

            IOUtil.writeShort(fsDictionary, (short)filePackList.Count);
            IOUtil.writeShort(fsDictionary, (short)files.Length);
            dialog.showString("==>即将输出" + (filePackList.Count) + "个包裹");
            int outputFiles = 0;

            for (int i = 0; i < filePackList.Count; i++)
            {
                FilePack pack = (FilePack)filePackList[i];
                IOUtil.writeShort(fsDictionary, (short)pack.fileNames.Count);
                String     strPack = srcPath + "\\" + Consts.exportFileName + "_" + i + ".aep";
                FileStream fsPackI = new FileStream(strPack, FileMode.Create);
                int        dataPos = 0;
                dialog.showString("-->开始输出第" + (i + 1) + "个包裹,共" + pack.fileNames.Count + "个文件");
                for (int j = 0; j < pack.fileNames.Count; j++)
                {
                    String fileName = (String)(pack.fileNames[j]);
                    byte[] data     = (byte[])pack.fileDatas[j];
                    IOUtil.writeString(fsDictionary, fileName);
                    IOUtil.writeInt(fsDictionary, dataPos);
                    IOUtil.writeInt(fsDictionary, data.Length);
                    IOUtil.writeData(fsPackI, data);
                    dataPos += data.Length;
                    dialog.showString("->加入第" + (j + 1) + "个文件[" + fileName + "],长度[" + data.Length + "],当前包裹大小[" + dataPos + "]");
                    if (deleteOld)
                    {
                        File.Delete(srcPath + "\\" + fileName);
                    }
                    outputFiles++;
                    dialog.setStep(outputFiles, files.Length);
                }
                fsPackI.Flush();
                fsPackI.Close();
                dialog.showString("->完成输出第" + (i + 1) + "个包裹");
            }
            fsDictionary.Flush();
            fsDictionary.Close();
        }
Ejemplo n.º 8
0
        //发送文件信息和内容
        static void SendFileInfo(string file, Socket clientSocket, Thread th)
        {
            FilePack pack = new FilePack();

            //本来想着用char[]传递呢,后来直接stringtochararray
            //pack.name = new char[128];
            //pack.md5 = new char[32];

            //此处读文件的文件名
            System.IO.FileInfo file_Info0 = new System.IO.FileInfo(file);
            pack.name = file_Info0.Name;


            //此处的大小是要传输的经过编码文件的大小
            System.IO.FileInfo file_Info = new System.IO.FileInfo(file + ".txt");
            pack.filesize = file_Info.Length.ToString();
            Int64 file_size = file_Info.Length;

            //读取编码文本文件md5
            pack.md5 = GetMD5HashFromFile(file + ".txt");
            //string sendMessage = "Message";

            //编码发送字节流
            //clientSocket.Send(Encoding.ASCII.GetBytes(sendMessage));

            Console.WriteLine(pack.name);


            //确定文件信息
            char[] name = new char[128];
            char[] size = new char[8];
            char[] md5  = new char[32];
            name = pack.name.ToCharArray();
            size = pack.filesize.ToString().ToCharArray();
            md5  = pack.md5.ToCharArray();

            //发送文件信息
            Thread.Sleep(1000);
            clientSocket.Send(Encoding.ASCII.GetBytes(name));
            Console.WriteLine(pack.filesize);
            Thread.Sleep(300);
            clientSocket.Send(Encoding.ASCII.GetBytes(size));
            Thread.Sleep(300);
            Console.WriteLine(pack.md5);
            clientSocket.Send(Encoding.ASCII.GetBytes(md5));
            Thread.Sleep(300);


            //发送文件
            //Console.WriteLine("prepaire sending:" + file+".txt");
            Int64 sent_size = 0;
            Int64 remained_size;
            Int64 send_size;
            //读文件读二进制流
            FileStream   fs = new FileStream(file + ".txt", FileMode.Open);
            BinaryReader br = new BinaryReader(fs);

            while (sent_size < file_size)
            {
                //Console.WriteLine(sent_size);
                remained_size = file_size - sent_size;
                if (remained_size > 1024)
                {
                    send_size = 1024;
                }
                else
                {
                    send_size = remained_size;
                }
                //将读到的数据变成字节发送。其实没必要,发送二进制流就好了,改一下下面的读字节流
                byte[] bs = br.ReadBytes((int)send_size);

                clientSocket.Send(bs);
                sent_size += send_size;

                //显示发送进度用,可以删除
                Console.WriteLine(sent_size);
                Thread.Sleep(50);
            }
            //发送完成
            Console.WriteLine("file send over");
            fs.Flush();
            fs.Close();
            //发送完毕,删除发送的编码文件
            File.Delete(file + ".txt");
        }
 //压缩图片
 public static void packFiles(ShowString dialog,String srcPath, String searchPatten, int maxPack,bool deleteOld)
 {
     //清除包裹文件
     dialog.showString("==>清除旧包裹文件");
     String[] files = Directory.GetFiles(srcPath, "*.*");
     for (int i = 0; i < files.Length; i++)
     {
         int pos = files[i].LastIndexOf('\\');
         String name = files[i].Substring(pos + 1, files[i].Length - (pos + 1));
         if (name.IndexOf("filePacks")>=0 || name.IndexOf("aep")>=0)
         {
             File.Delete(files[i]);
         }
     }
     //开始转换
     files = IOUtil.listFiles(srcPath, searchPatten);
     dialog.showString("==>共发现" + files.Length + "个文件");
     ArrayList filePackList = new ArrayList();
     FilePack filePack = new FilePack();
     filePackList.Add(filePack);
     int addUpSize = 0;
     for (int i = 0; i < files.Length; i++)
     {
         int pos = files[i].LastIndexOf('\\');
         String name = files[i].Substring(pos + 1, files[i].Length - (pos + 1));
         byte[] data = IOUtil.ReadFile(files[i]);
         addUpSize += data.Length;
         if (i == 0)//第一个包,则将当前文件压入这个包
         {
             filePack.addFile(name, data);
             if (addUpSize >= maxPack)
             {
                 filePack = new FilePack();
                 filePackList.Add(filePack);
                 addUpSize = data.Length;
             }
         }
         else//不是第一个包,则将当前文件压入后一个包
         {
             if (addUpSize >= maxPack)
             {
                 filePack = new FilePack();
                 filePackList.Add(filePack);
                 addUpSize = data.Length;
             }
             filePack.addFile(name, data);
         }
     }
     //开始输出
     String dictionFile = srcPath + "\\" + Consts.exportFileName + "_filePacks.bin";
     FileStream fsDictionary = new FileStream(dictionFile, FileMode.Create);
     IOUtil.writeShort(fsDictionary, (short)filePackList.Count);
     IOUtil.writeShort(fsDictionary, (short)files.Length);
     dialog.showString("==>即将输出" + (filePackList.Count) + "个包裹");
     int outputFiles = 0;
     for (int i = 0; i < filePackList.Count; i++)
     {
         FilePack pack = (FilePack)filePackList[i];
         IOUtil.writeShort(fsDictionary, (short)pack.fileNames.Count);
         String strPack = srcPath + "\\" + Consts.exportFileName + "_" + i + ".aep";
         FileStream fsPackI = new FileStream(strPack, FileMode.Create);
         int dataPos = 0;
         dialog.showString("-->开始输出第" + (i + 1) + "个包裹,共" + pack.fileNames.Count + "个文件");
         for (int j = 0; j < pack.fileNames.Count; j++)
         {
             String fileName = (String)(pack.fileNames[j]);
             byte[] data = (byte[])pack.fileDatas[j];
             IOUtil.writeString(fsDictionary, fileName);
             IOUtil.writeInt(fsDictionary, dataPos);
             IOUtil.writeInt(fsDictionary, data.Length);
             IOUtil.writeData(fsPackI, data);
             dataPos += data.Length;
             dialog.showString("->加入第" + (j + 1) + "个文件[" + fileName + "],长度[" + data.Length + "],当前包裹大小[" + dataPos + "]");
             if (deleteOld)
             {
                 File.Delete(srcPath+"\\"+fileName);
             }
             outputFiles++;
             dialog.setStep(outputFiles, files.Length);
         }
         fsPackI.Flush();
         fsPackI.Close();
         dialog.showString("->完成输出第" + (i + 1) + "个包裹");
     }
     fsDictionary.Flush();
     fsDictionary.Close();
 }