示例#1
0
        public List <VideoInfo> GetVideoInfo(string VideoRootPath)
        {
            List <VideoInfo> VideoInfoList = new List <VideoInfo>();
            JsonAnalysis     jal           = new JsonAnalysis();
            ModeEntry        me            = null;

            if (VideoRootPath != null)
            {
                string[] path = Directory.GetDirectories(VideoRootPath);
                for (int i = 0; i < path.Length; i++)
                {
                    VideoInfo temp = new VideoInfo();
                    temp.videoPath = path[i] + @"\lua.flv.bili2api.80";
                    me             = jal.GetJsonConfig(path[i]);
                    temp.videoName = me.page_data.part;
                    VideoInfoList.Add(temp);
                }
            }
            else
            {
                MessageBox.Show("视频路径为空,请先选择", "提示");
            }
            log(VideoInfoList);
            return(VideoInfoList);
        }
示例#2
0
    void Start()
    {
        foreach (ModeData modeData in ModeManager.instance.modes)
        {
            ModeEntry modeEntry = Instantiate(this.modeEntry) as ModeEntry;

            modeEntry.SetPanel(panel);
            modeEntry.SetMode(modeData);
            modeEntry.transform.SetParent(modeHolder.transform);
        }
    }
示例#3
0
    void Start()
    {
        foreach (ModeManager.ModeData mode in ModeManager.instance.modes)
        {
            GameObject entryGameObject = Instantiate(modeEntryPrefab) as GameObject;
            ModeEntry  entry           = entryGameObject.GetComponent <ModeEntry>();

            entry.SetMode(mode);
            entry.transform.SetParent(transform);
        }
    }
示例#4
0
        public ModeEntry GetJsonConfig(string videoPath)
        {
            ModeEntry me = new ModeEntry();

            try {
                string entryPath = videoPath + @"\entry.json";
                string js        = File.ReadAllText(entryPath);
                me = JsonMapper.ToObject <ModeEntry>(js);
            } catch (Exception ex) {
                MessageBox.Show(ex.Message);
            }



            return(me);
        }
示例#5
0
        internal static void ScanModes()
        {
            var modesData = new Dictionary <string, object> {
                [k_DefaultModeId] = new Dictionary <string, object> {
                    [k_LabelSectionName] = "Default"
                }
            };

            var builtinModeFile = Path.Combine(EditorApplication.applicationContentsPath, "Resources/default.mode");

            FillModeData(builtinModeFile, modesData);

            var modeDescriptors = AssetDatabase.EnumerateAllAssets(new SearchFilter
            {
                searchArea  = SearchFilter.SearchArea.InPackagesOnly,
                classNames  = new[] { nameof(ModeDescriptor) },
                skipHidden  = true,
                showAllHits = true
            });

            while (modeDescriptors.MoveNext())
            {
                var md = modeDescriptors.Current.pptrValue as ModeDescriptor;
                if (md == null)
                {
                    continue;
                }
                FillModeData(md.path, modesData);
            }

            modes    = new ModeEntry[modesData.Keys.Count];
            modes[0] = CreateEntry(k_DefaultModeId, (JSONObject)modesData[k_DefaultModeId]);
            var modeIndex = 1;

            hasSwitchableModes = false;
            foreach (var modeId in modesData.Keys)
            {
                if (modeId == k_DefaultModeId)
                {
                    continue;
                }
                var modeFields = (JSONObject)modesData[modeId];
                modes[modeIndex]    = CreateEntry(modeId, modeFields);
                hasSwitchableModes |= !JsonUtils.JsonReadBoolean(modeFields, "builtin");
                modeIndex++;
            }
        }
示例#6
0
        static void Build(string input, string output, int version)
        {
            // Load source file in memory and verify
            List <string[]> valueList  = new List <string[]>();
            int             lineNumber = 0;
            Regex           lineFormat = new Regex(@"^(\$?%{0,2})((?:/[^\\/:\*\?""<>|]+)+)\s(?i)([VGUPLRA]+)$");

            using (FileStream txtStream = new FileStream(input, FileMode.Open, FileAccess.Read))
                using (TextReader txt = new StreamReader(txtStream))
                {
                    while (txt.Peek() >= 0)
                    {
                        lineNumber++;
                        string line = txt.ReadLine().Trim();
                        if (line != "")
                        {
                            Match validation = lineFormat.Match(line);
                            if (validation.Success)
                            {
                                string[] result = new string[3]
                                {
                                    validation.Groups[1].Value,
                                    validation.Groups[2].Value,
                                    validation.Groups[3].Value
                                };
                                valueList.Add(result);
                            }
                            else
                            {
                                throw new InvalidDataException(String.Format("Invalid data in file {0} at line {1}.", input, lineNumber));
                            }
                        }
                    }
                }
            string[][] values      = valueList.ToArray();
            int        moduleCount = valueList.Count;

            Console.WriteLine(String.Format("File contains {0} modules.", moduleCount));
            Console.Write(String.Format("Building v{0} pspbtcnf binary...", GetVersion(version)));

            // Build modules & modulelist
            string moduleList = "";

            ModuleEntry[] modules = new ModuleEntry[moduleCount];
            for (int i = 0; i < moduleCount; i++)
            {
                // Modulelist & offset
                modules[i].nameOffset = (uint)moduleList.Length;
                moduleList           += values[i][1] + '\0';

                // Loadmode flags
                bool dollar  = false;
                byte percent = 0;
                for (int a = 0; a < values[i][0].Length; a++)
                {
                    if (values[i][0][a] == '$')
                    {
                        dollar = true;
                    }
                    else if (values[i][0][a] == '%')
                    {
                        percent++;
                    }
                }
                switch (percent)
                {
                case 2:
                    modules[i].loadmode = (ushort)((dollar ? load_flags.DollarSign : 0) | load_flags.TwoPercent);
                    break;

                case 1:
                    modules[i].loadmode = (ushort)((dollar ? load_flags.DollarSign : 0) | load_flags.OnePercent);
                    break;

                case 0:
                    modules[i].loadmode = (ushort)((dollar ? load_flags.DollarSign : 0) | load_flags.NoPercent);
                    break;
                }

                // Section flags
                section_flags flags = new section_flags();
                for (int a = 0; a < values[i][2].Length; a++)
                {
                    switch (values[i][2][a])
                    {
                    case 'v':
                    case 'V':
                        flags |= section_flags.VSH;
                        break;

                    case 'g':
                    case 'G':
                        flags |= section_flags.Game;
                        break;

                    case 'u':
                    case 'U':
                        flags |= section_flags.Updater;
                        break;

                    case 'p':
                    case 'P':
                        flags |= section_flags.Pops;
                        break;

                    case 'l':
                    case 'L':
                        flags |= section_flags.License;
                        break;

                    case 'r':
                    case 'R':
                        flags |= section_flags.Reserved;
                        break;

                    case 'a':
                    case 'A':
                        flags |= section_flags.App;
                        break;
                    }
                }
                modules[i].flags = (ushort)flags;

                // Fill in unknown/unused info
                modules[i].hash      = new byte[0x10];
                modules[i].reserved1 = 0;
                modules[i].reserved2 = 0;
            }

            // Build mode entries
            ModeEntry[] modes = new ModeEntry[5];
            modes[0].searchMax   = (ushort)moduleCount;
            modes[0].modeFlag    = (int)section_flags.VSH;
            modes[0].mode2       = 2;
            modes[0].reserved    = new int[5];
            modes[0].searchStart = 0;

            modes[1].searchMax   = (ushort)moduleCount;
            modes[1].modeFlag    = (int)section_flags.Game;
            modes[1].mode2       = 1;
            modes[1].reserved    = new int[5];
            modes[1].searchStart = 0;

            modes[2].searchMax   = (ushort)moduleCount;
            modes[2].modeFlag    = (int)section_flags.Updater;
            modes[2].mode2       = 3;
            modes[2].reserved    = new int[5];
            modes[2].searchStart = 0;

            modes[3].searchMax   = (ushort)moduleCount;
            modes[3].modeFlag    = (int)section_flags.Pops;
            modes[3].mode2       = 4;
            modes[3].reserved    = new int[5];
            modes[3].searchStart = 0;

            modes[4].searchMax   = (ushort)moduleCount;
            modes[4].modeFlag    = (int)section_flags.App;
            modes[4].mode2       = 7;
            modes[4].reserved    = new int[5];
            modes[4].searchStart = 0;

            int modeCount = modes.Length;

            // Build header
            BtcnfHeader head = new BtcnfHeader();

            head.modeStartOffset       = headerSize;
            head.modeCount             = modeCount;
            head.moduleStartOffset     = head.modeStartOffset + modeEntrySize * modeCount;
            head.moduleCount           = (uint)moduleCount;
            head.moduleNameStartOffset = head.moduleStartOffset + moduleEntrySize * moduleCount;
            head.moduleNameEndOffset   = head.moduleNameStartOffset + moduleList.Length;
            head.unknown1  = unknown1;
            head.unknown2  = unknown2;
            head.unknown3  = unknown3;
            head.unknown4  = unknown4;
            head.version   = version;
            head.signature = sigValid;

            // Write output
            using (FileStream bin = new FileStream(output, FileMode.Create, FileAccess.Write))
            {
                byte[] headerBytes = StructureToByteArray <BtcnfHeader>(head, headerSize);
                bin.Write(headerBytes, 0, headerBytes.Length);

                for (int i = 0; i < modes.Length; i++)
                {
                    byte[] modeBytes = StructureToByteArray <ModeEntry>(modes[i], modeEntrySize);
                    bin.Seek(head.modeStartOffset + i * modeEntrySize, SeekOrigin.Begin);
                    bin.Write(modeBytes, 0, modeBytes.Length);
                }

                for (int i = 0; i < moduleCount; i++)
                {
                    byte[] moduleBytes = StructureToByteArray <ModuleEntry>(modules[i], moduleEntrySize);
                    bin.Seek(head.moduleStartOffset + i * moduleEntrySize, SeekOrigin.Begin);
                    bin.Write(moduleBytes, 0, moduleBytes.Length);
                }

                byte[] moduleListBytes = ASCIIEncoding.UTF8.GetBytes(moduleList);
                bin.Seek(head.moduleNameStartOffset, SeekOrigin.Begin);
                bin.Write(moduleListBytes, 0, moduleListBytes.Length);

                bin.Flush();
                bin.Close();
            }

            Console.WriteLine("Done!");
            Console.WriteLine(String.Format("Output saved to {0}", output));
        }
示例#7
0
        static void Extract(string input, string output)
        {
            string[] lines;
            using (FileStream bin = new FileStream(input, FileMode.Open, FileAccess.Read))
            {
                // Read header
                BtcnfHeader head;
                try
                {
                    //bin.Seek(0, SeekOrigin.Begin);
                    head = ByteArrayToStructure <BtcnfHeader>(ReadByteArray(bin, 0, headerSize));
                }
                catch (Exception ex)
                {
                    throw new InvalidDataException("Unable to access or invalid input file.", ex);
                }

                // Check signature
                switch (head.signature)
                {
                case sigValid:
                    Console.WriteLine(String.Format("v{0} pspbtcnf binary", GetVersion(head.version)));
                    break;

                case sigEnc:
                    throw new InvalidDataException("Input file is encrypted.");

                case sigOld:
                    throw new InvalidDataException("Input file is in an older format.");

                default:
                    throw new InvalidDataException(String.Format("Input file has an unknown signature 0x{0:X8} or is not a valid pspbtcnf file.", head.signature));
                }

                // Mode entries
                //bin.BaseStream.Seek(head.modeStartOffset, 0);

                ModeEntry[] modes = new ModeEntry[head.modeCount];
                for (int i = 0; i < head.modeCount; i++)
                {
                    modes[i] = ByteArrayToStructure <ModeEntry>(ReadByteArray(bin, head.modeStartOffset * i, modeEntrySize));
                }

                // Grab module names
                //bin.BaseStream.Seek(head.moduleNameStartOffset, 0);
                int    moduleNameLength = head.moduleNameEndOffset - head.moduleNameStartOffset;
                byte[] moduleNameData   = ReadByteArray(bin, head.moduleNameStartOffset, moduleNameLength);
                Dictionary <uint, string> moduleNames = OffsetSplit(ASCIIEncoding.UTF8.GetString(moduleNameData));

                // Fix invalid header
                if (moduleNames.Count != head.moduleCount)
                {
                    Console.WriteLine(String.Format("Header lists {0} modules, file contains {1} modules. Fixed.", head.moduleCount, moduleNames.Count));
                    head.moduleCount = (uint)moduleNames.Count;
                }
                else
                {
                    Console.WriteLine(String.Format("File contains {0} modules.", head.moduleCount));
                }

                Console.Write("Processing module list...");

                // Dump modules
                lines = new string[head.moduleCount];
                for (int i = 0; i < head.moduleCount; i++)
                {
                    //bin.BaseStream.Seek(head.moduleStartOffset + moduleEntrySize * i, SeekOrigin.Begin);

                    ModuleEntry module = ByteArrayToStructure <ModuleEntry>(ReadByteArray(bin, head.moduleStartOffset + moduleEntrySize * i, moduleEntrySize));

                    lines[i] = "";

                    if (((load_flags)module.loadmode & load_flags.DollarSign) == load_flags.DollarSign)
                    {
                        lines[i] += "$";
                    }
                    if (((load_flags)module.loadmode & load_flags.OnePercent) == load_flags.OnePercent)
                    {
                        lines[i] += "%";
                    }
                    if (((load_flags)module.loadmode & load_flags.TwoPercent) == load_flags.TwoPercent)
                    {
                        lines[i] += "%%";
                    }

                    lines[i] += moduleNames[module.nameOffset] + " ";

                    if (((section_flags)module.flags & section_flags.VSH) == section_flags.VSH)
                    {
                        lines[i] += "V";
                    }
                    if (((section_flags)module.flags & section_flags.Game) == section_flags.Game)
                    {
                        lines[i] += "G";
                    }
                    if (((section_flags)module.flags & section_flags.Updater) == section_flags.Updater)
                    {
                        lines[i] += "U";
                    }
                    if (((section_flags)module.flags & section_flags.Pops) == section_flags.Pops)
                    {
                        lines[i] += "P";
                    }
                    if (((section_flags)module.flags & section_flags.License) == section_flags.License)
                    {
                        lines[i] += "L";
                    }
                    if (((section_flags)module.flags & section_flags.Reserved) == section_flags.Reserved)
                    {
                        lines[i] += "R";
                    }
                    if (((section_flags)module.flags & section_flags.App) == section_flags.App)
                    {
                        lines[i] += "A";
                    }
                }

                bin.Close();
            }

            // Write to output
            using (FileStream txtStream = new FileStream(output, FileMode.Create, FileAccess.Write))
                using (TextWriter txt = new StreamWriter(txtStream))
                {
                    for (int i = 0; i < lines.Length; i++)
                    {
                        txt.WriteLine(lines[i]);
                    }
                    txt.Flush();
                    txt.Close();
                }

            Console.WriteLine("Done!");
            Console.WriteLine(String.Format("Output saved to {0}", output));
        }