Exemplo n.º 1
0
        /// <summary>
        /// 予約情報の更新があれば再読み込みする
        /// </summary>
        /// <returns></returns>
        public ErrCode ReloadReserveInfo()
        {
            ErrCode ret = ErrCode.CMD_SUCCESS;

            try
            {
                if (updateReserveInfo == true)
                {
                    if (cmd == null)
                    {
                        ret = ErrCode.CMD_ERR;
                    }
                    else
                    {
                        reserveList.Clear();
                        reserveList = null;
                        reserveList = new Dictionary <uint, ReserveData>();
                        tunerReserveList.Clear();
                        tunerReserveList = null;
                        tunerReserveList = new Dictionary <uint, TunerReserveInfo>();
                        List <ReserveData>      list  = new List <ReserveData>();
                        List <TunerReserveInfo> list2 = new List <TunerReserveInfo>();
                        ret = (ErrCode)cmd.SendEnumReserve(ref list);
                        if (ret == ErrCode.CMD_SUCCESS)
                        {
                            ret = (ErrCode)cmd.SendEnumTunerReserve(ref list2);
                            if (ret == ErrCode.CMD_SUCCESS)
                            {
                                foreach (ReserveData info in list)
                                {
                                    reserveList.Add(info.ReserveID, info);
                                }
                                foreach (TunerReserveInfo info in list2)
                                {
                                    tunerReserveList.Add(info.tunerID, info);
                                }
                                updateReserveInfo = false;
                            }
                        }
                        list.Clear();
                        list2.Clear();
                        list  = null;
                        list2 = null;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
            }
            return(ret);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 予約情報の更新があれば再読み込みする
        /// </summary>
        /// <returns></returns>
        public ErrCode ReloadReserveInfo()
        {
            ErrCode ret = ErrCode.CMD_SUCCESS;

            try
            {
                if (updateReserveInfo == true)
                {
                    if (cmd == null)
                    {
                        return(ErrCode.CMD_ERR);
                    }

                    reserveList      = new Dictionary <uint, ReserveData>();
                    tunerReserveList = new Dictionary <uint, TunerReserveInfo>();
                    var list  = new List <ReserveData>();
                    var list2 = new List <TunerReserveInfo>();

                    ret = (ErrCode)cmd.SendEnumReserve(ref list);
                    if (ret != ErrCode.CMD_SUCCESS)
                    {
                        return(ret);
                    }

                    ret = (ErrCode)cmd.SendEnumTunerReserve(ref list2);
                    if (ret != ErrCode.CMD_SUCCESS)
                    {
                        return(ret);
                    }

                    list.ForEach(info => reserveList.Add(info.ReserveID, info));
                    list2.ForEach(info => tunerReserveList.Add(info.tunerID, info));

                    updateReserveInfo = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
            }
            return(ret);
        }
Exemplo n.º 3
0
        static void Main(string[] args)
        {
            if (args.Length < 2)
            {
                Console.WriteLine("Usage: EdcbSchUploader <user> <pass> [epgurl] [slot] [upload_url]");
                Environment.Exit(2);
            }

            // サービス名としょぼかる放送局名の対応ファイル"SyoboiCh.txt"があれば読み込む
            var chMap = new Dictionary <string, string>();

            try
            {
                string[] chList = File.ReadAllText(
                    Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "SyoboiCh.txt"), Encoding.GetEncoding(932)
                    ).Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
                foreach (string ch in chList)
                {
                    string[] chSplit = ch.Split(new char[] { '\t' });
                    if (chSplit.Length >= 2 && chSplit[0].StartsWith(";") == false)
                    {
                        chMap[chSplit[0]] = chSplit[1];
                    }
                }
            }
            catch
            {
            }

            // EpgTimerSrvから予約情報を取得
            var cmd = new CtrlCmdUtil();
            var rl  = new List <ReserveData>();
            var tl  = new List <TunerReserveInfo>();

            if (cmd.SendEnumReserve(ref rl) != ErrCode.CMD_SUCCESS ||
                cmd.SendEnumTunerReserve(ref tl) != ErrCode.CMD_SUCCESS)
            {
                Console.WriteLine("Failed to communicate with EpgTimerSrv.");
                Environment.Exit(1);
            }
            string data      = "";
            int    dataCount = 0;

            foreach (ReserveData r in rl)
            {
                string tuner = null;
                foreach (TunerReserveInfo tr in tl)
                {
                    if (tr.reserveList.Contains(r.ReserveID))
                    {
                        // T+{BonDriver番号(上2桁)}+{チューナ番号(下2桁)},チューナ不足はT9999
                        tuner = "T" + ("" + (10000 + Math.Min(tr.tunerID / 65536, 99) * 100 + Math.Min(tr.tunerID % 65536, 99))).Substring(1);
                        break;
                    }
                }
                if (tuner != null && r.RecSetting.RecMode <= 3 && r.RecSetting.Priority >= UPLOAD_REC_PRIORITY)
                {
                    // "最大200行"
                    if (dataCount++ >= 200)
                    {
                        break;
                    }
                    else
                    {
                        // "開始時間 終了時間 デバイス名 番組名 放送局名 サブタイトル オフセット XID"
                        string title = r.Title.Replace("\t", "").Replace("\r", "").Replace("\n", "");
                        data += ""
                                + (r.StartTime.ToUniversalTime() - (new DateTime(1970, 1, 1))).TotalSeconds + "\t"
                                + (r.StartTime.ToUniversalTime().AddSeconds(r.DurationSecond) - (new DateTime(1970, 1, 1))).TotalSeconds + "\t"
                                + tuner + "\t"
                                + (title.Length > UPLOAD_TITLE_MAXLEN ? title.Substring(0, UPLOAD_TITLE_MAXLEN - 1) + "…" : title) + "\t"
                                + (chMap.ContainsKey(r.StationName) ? chMap[r.StationName] : r.StationName) + "\t\t0\t"
                                + r.ReserveID + "\n";
                    }
                }
            }

            // 以前の内容と同じなら送信しない
            string lastPath = Path.ChangeExtension(Assembly.GetEntryAssembly().Location, "last");

            try
            {
                if (File.ReadAllText(lastPath) == data.Replace("\n", "\r\n"))
                {
                    Console.WriteLine("Not modified, nothing to do.");
                    Environment.Exit(0);
                }
            }
            catch
            {
            }

            // しょぼかるのPOSTは"Expect: 100-Continue"に対応してないっぽい
            ServicePointManager.Expect100Continue = false;

            // 予約情報をサーバに送信
            using (var wc = new WebClientWithTimeout())
            {
                // WebClientはデフォルトでIEのプロキシ設定に従う(wc.Proxy = WebRequest.DefaultWebProxy)
                // 認証プロキシなど必要であればwc.Proxyをここで設定すること
                wc.Timeout     = TIMEOUT;
                wc.Encoding    = Encoding.UTF8;
                wc.Credentials = new NetworkCredential(Uri.EscapeDataString(args[0]), Uri.EscapeDataString(args[1]));
                wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
                wc.Headers[HttpRequestHeader.UserAgent]   = USER_AGENT;
                var body = new System.Collections.Specialized.NameValueCollection();
                body["slot"]      = args.Length < 4 ? "0" : args[3];
                body["devcolors"] = DEV_COLORS;
                body["epgurl"]    = args.Length < 3 ? "" : args[2];
                body["data"]      = data;
                try
                {
                    wc.UploadValues(args.Length < 5 ? UPLOAD_URL : args[4], body);
                    File.WriteAllText(lastPath, data.Replace("\n", "\r\n"), Encoding.UTF8);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.GetType().ToString() + " : " + ex.Message);
                    Environment.Exit(1);
                }
            }
            Console.WriteLine("Done.");
            Environment.Exit(0);
        }