public static void Load(MetaFieldType type, int phoneId, string file)
        {
            List <MetaField> entries = null;

            switch (type)
            {
            case MetaFieldType.CallLog:
                entries = ParseCsvFile_CallLogs(file);
                break;

            case MetaFieldType.Sms:
                entries = ParseCsvFile_SMS(file);
                break;

            case MetaFieldType.AddressBookEntry:
                entries = ParseCsvFile_AddressBookEntries(file);
                break;

            default:
                throw new ArgumentOutOfRangeException("type");
            }

            Console.WriteLine("File contained {0} valid entries.", entries.Count);

#if _INSERT_
            MetaField.Insert(phoneId, entries, false, "xry");
#endif
        }
        public void RunMetaViterbi(int parseId, List <ViterbiField> viterbiFields)
        {
            var metaResults = CreateMetaInfo(viterbiFields);

            var block = new Block()
            {
                Bytes = metaResults.Select(r => (byte)r.Name).ToArray(), OffsetFile = 0
            };

            var blockList = new List <Block> {
                block
            };

            var viterbiResult = RunViterbi(blockList, RunType.Meta);

            var addressBookEntries = new List <MetaField>();
            var callLogs           = new List <MetaField>();
            var sms = new List <MetaField>();

            for (int i = 0; i < viterbiResult.Fields.Count; i++)
            {
                switch (viterbiResult.Fields[i].MachineName)
                {
                case MachineList.Meta_AddressBookNokia:
                case MachineList.Meta_AddressBook:
                    var results = GetMetaAddressBookEntry(viterbiResult.Fields[i], metaResults);
                    addressBookEntries.AddRange(results);
                    break;

                case MachineList.Meta_CallLogNokiaMulti_v2:
                case MachineList.Meta_CallLogNokiaMulti:
                    var results2 = GetMetaCallLogNokia(viterbiResult.Fields[i], metaResults);
                    callLogs.AddRange(results2);
                    break;

                case MachineList.Meta_CallLogAll:
                case MachineList.Meta_CallLogGeneric:
                case MachineList.Meta_CallLogNokiaSingle:
                case MachineList.Meta_CallLogMoto:
                case MachineList.Meta_CallLogSamsung:
                    var results1 = GetMetaCallLog(viterbiResult.Fields[i], metaResults);
                    callLogs.AddRange(results1);
                    break;

                case MachineList.Meta_Sms:
                    var result = GetMetaSms(viterbiResult.Fields[i], metaResults);
                    sms.Add(result);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                    break;
                }
            }

            ///TODO: UNCOMMent these lines of code to insert records into the database
#if _INSERT_
            MetaField.Insert(parseId, addressBookEntries, true, "Dec0de");
            MetaField.Insert(parseId, callLogs, true, "Dec0de");
            MetaField.Insert(parseId, sms, true, "Dec0de");
#endif
        }