Exemplo n.º 1
0
 private bool TryGetStationId(string text, out int result)
 {
     if (!int.TryParse(text, out var n))
     {
         var station = StationReader.GetStationByName(text);
         if (station is null)
         {
             result = default;
             return(false);
         }
         else
         {
             result = station.StationId;
             return(true);
         }
     }
     if (n > 0 && n < 5)
     {
         result = n;
         return(true);
     }
     else if (StationReader.GetStationById(n) is null)
     {
         result = default;
         return(false);
     }
     else
     {
         result = n;
         return(true);
     }
 }
Exemplo n.º 2
0
        private async Task GetAllData(CancellationToken cancellationToken)
        {
            var query    = StationReader.GetAllStations().Where(std => std.StationArea == 0).Select(std => std.StationId);
            var savePath = path + "\\すべての駅";

            await DataGeter(cancellationToken, query, savePath);
        }
Exemplo n.º 3
0
        protected override async void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.TrainTime);
            InitializeLayoutParams();
            Window.SetStatusBarColor(new Android.Graphics.Color(Android.Support.V4.Content.ContextCompat.GetColor(this, Resource.Color.colorPrimary)));

            mainLinearLayout   = FindViewById <LinearLayout>(Resource.Id.MainLinearLayout);
            backButton         = FindViewById <ImageView>(Resource.Id.BackButton);
            favoriteButton     = FindViewById <ImageView>(Resource.Id.FavoriteButton);
            swipeRefreshLayout = FindViewById <SwipeRefreshLayout>(Resource.Id.swipe_refresh);
            toolBarText        = FindViewById <TextView>(Resource.Id.ToolbarText);
            GettedTimeTextView = FindViewById <TextView>(Resource.Id.GetedTimeTextView);

            backButton.Click           += BackButton_Click;
            favoriteButton.Click       += FavoriteButton_Click;
            swipeRefreshLayout.Refresh += SwipeRefreshLayout_Refresh;

            station = StationReader.GetStationByName(Intent.GetStringExtra("station"));
            if (station is null)
            {
                throw new NotSupportedException();
            }
            else
            {
                IsFavorited = UserConfigManager.IsFavoriteStation(station);
                await ShowData();

                toolBarText.Text = station.Name;
                favoriteButton.SetImageResource(IsFavorited ? Resource.Drawable.FavoritedIcon : Resource.Drawable.AddFavoriteIcon);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// <see cref="RawTrainDataFile"/>を解析して<see cref="TrainDataFile"/>を取得します。
        /// </summary>
        /// <param name="rawTrainDataFile">解析対象のデータ</param>
        /// <returns></returns>
        public static TrainDataFile ParseRawTrainDataFile(RawTrainDataFile rawTrainDataFile)
        {
            var getedDateTime = DateTime.ParseExact(rawTrainDataFile.Departures_datetime.ToString(), "yyyyMMddHHmm", System.Globalization.DateTimeFormatInfo.InvariantInfo);
            var station       = StationReader.GetStationById(rawTrainDataFile.StationId);

            var gettedHour          = getedDateTime.Hour;
            var arrivalTrainDatas   = new Dictionary <JrhDestType, IReadOnlyList <TrainData> >();
            var departureTrainDatas = new Dictionary <JrhDestType, IReadOnlyList <TrainData> >();

            foreach (var rawArrData in rawTrainDataFile.Arrivals)
            {
                var dest = JrhDestTypeCreater.FromParseText(rawArrData.Key);

                var data = rawArrData.Value.Select(rtd => TrainDataParser.ParseTrainData(rtd, gettedHour, station, TrainData.ArrivalTypes.Arrival));
                arrivalTrainDatas.Add(dest, Array.AsReadOnly(data.ToArray()));
            }

            foreach (var rawDepData in rawTrainDataFile.Departures)
            {
                var dest = JrhDestTypeCreater.FromParseText(rawDepData.Key);
                var data = rawDepData.Value.Select(rtd => TrainDataParser.ParseTrainData(rtd, gettedHour, station, TrainData.ArrivalTypes.Departure));
                departureTrainDatas.Add(dest, Array.AsReadOnly(data.ToArray()));
            }

            return(new TrainDataFile(station, getedDateTime, departureTrainDatas, arrivalTrainDatas));
        }
Exemplo n.º 5
0
        public static bool TryGetIdInFileName(string fileName, out int id)
        {
            var str = fileName.GetRangeWithEnd(' ');

            if (int.TryParse(str, out var n))
            {
                id = n;
                return(true);
            }
            var res = StationReader.GetStationByName(str);

            id = res?.StationId ?? default;
            return(res != null);
        }
Exemplo n.º 6
0
        public static string GetSaveFileName(int id, DateTime dateTime)
        {
            string defaultFileName;

            if (id >= 1 && id < 5)
            {
                defaultFileName = $"{id} {dateTime.ToString("yyyy-MM-dd_HH-mm-ss")}";
            }
            else
            {
                defaultFileName = $"{StationReader.GetStationById(id).Name} {dateTime.ToString("yyyy-MM-dd_HH-mm-ss")}";
            }
            return(defaultFileName);
        }
Exemplo n.º 7
0
        private static async Task <Dictionary <int, TrainDataFile> > GetTrainDatas(params int[] id)
        {
            var result = new Dictionary <int, TrainDataFile>();

            var stations       = id.Select(n => StationReader.GetStationById(n));
            var inAreaStaion   = stations.Where(std => std.StationArea == 0).ToArray();
            var outAreaStation = stations.Where(std => std.StationArea != 0);

            var count = 0;

            if (inAreaStaion.Any())
            {
                TrainDataFile[] array = default;
                do
                {
                    array = await Task.WhenAll(inAreaStaion.Select(n => TrainInfoReader.GetTrainDataAsync(n.StationId)));

                    for (var i = 0; i < array.Length; i++)
                    {
                        result.Add(inAreaStaion[i].StationId, array[i]);
                    }

                    count++;
                    if (count > 3)
                    {
                        throw new TrainDataTimeSyncException(result, "時刻が同期できません");
                    }

                    if (count > 1)
                    {
                        Debuggers.LogWriter.WriteLog($"列車位置計算用の列車情報の時刻同期に失敗...再試行します");
                    }
                }while (!CheckTrainDataFiles(array));
            }

            if (outAreaStation.Any())
            {
                var need  = outAreaStation.Select(std => std.StationArea).Distinct().ToArray();
                var array = await Task.WhenAll(need.Select(n => TrainInfoReader.GetSpecialTrainDatasAsync(n)));

                foreach (var station in outAreaStation)
                {
                    var index = Array.IndexOf(need, station.StationArea);
                    result.Add(station.StationId, array[index].First(td => td.Station == station));
                }
            }

            return(result);
        }
Exemplo n.º 8
0
        private async void SearchButton_Click(object sender, RoutedEventArgs e)
        {
            var station = StationReader.GetStationByName(StationSerchTextBox.Text);

            if (station is null)
            {
                MessageBox.Show($"{StationSerchTextBox.Text}は見つかりませんでした");
            }
            else
            {
                SelectedSource = await TrainInfoReader.GetTrainDataAsync(station.StationId);

                this.Close();
            }
        }
Exemplo n.º 9
0
            /// <summary>
            /// 列車の行先を設定します。
            /// </summary>
            /// <param name="destinationString">行先を表す文字列。</param>
            public static Station GetTrainDestination(string destinationString)
            {
                if (destinationString.Contains("("))
                {
                    destinationString = destinationString.GetRange('(', ')');
                }

                if (destinationString.EndsWith("行"))
                {
                    return(StationReader.GetOrCreateStationByName(destinationString.Substring(0, destinationString.Length - 1)));
                }
                else
                {
                    return(StationReader.GetOrCreateStationByName(destinationString));
                }
            }
Exemplo n.º 10
0
        private static async Task <Dictionary <int, TrainDataFile> > GetTrainDatas(IEnumerable <TrainDataFile> trainDataFiles, params int[] id)
        {
            var result = new Dictionary <int, TrainDataFile>();

            var stations = id.Select(n => StationReader.GetStationById(n));

            return(await Task.Run(() =>
            {
                var keyValuePairs = new Dictionary <int, TrainDataFile>();
                foreach (var n in id)
                {
                    keyValuePairs.Add(n, trainDataFiles.First(tdf => tdf.Station.StationId == n));
                }
                return keyValuePairs;
            }));
        }
Exemplo n.º 11
0
        /// <summary>
        /// 駅 ID を指定して列車情報を取得します。エリア外の駅の場合広域データから列車情報を返します。
        /// </summary>
        /// <param name="id">取得対象の駅 ID。</param>
        /// <returns>解析済みの列車情報。</returns>
        public static async Task <TrainDataFile> GetTrainDataAsync(int id)
        {
            var station = StationReader.GetStationById(id);

            if (station.StationArea != 0)
            {
                return(await GetSpecialTrainDataAsync(station));
            }

            var data = await TrainDataGeter.GetTrainDataJsonAsync(id);

            return(await Task.Run(() =>
            {
                var rawTrainDataFile = JsonDeserializer.DeserializeTrainInfo(data);
                return TrainFilePaeser.ParseRawTrainDataFile(rawTrainDataFile);
            }));
        }
Exemplo n.º 12
0
        private async void SaveAllEndButton_Click(object sender, RoutedEventArgs e)
        {
            var folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog()
            {
                Description = "保存先フォルダを選択",
            };

            folderBrowserDialog.ShowDialog();
            var folder = folderBrowserDialog.SelectedPath;

            var saveFileWriter = new SaveFileWriter(folder);

            foreach (var std in StationReader.GetAllEnds())
            {
                await saveFileWriter.SaveTrainData(std.StationId);
            }
        }
Exemplo n.º 13
0
        /*
         * 函館線 小樽方面の位置計算
         * ・札幌方面はすべて札幌到着データを利用。
         * ・小樽方面のうち…
         *   札幌-手稲は手稲到着データ利用
         *   ほしみ到着データ(普通列車)のうち手稲-ほしみ間にある列車は反映
         *    小樽到着データはほしみ-小樽間の列車及び、ほしみ通過の快速列車については手稲-小樽間で利用。
         */
        private static async Task <(TrainPositionData, TrainPositionData)> GetOtaruData(JrhLine jrhLine, Dictionary <int, TrainDataFile> dataFile)
        {
            var sapporoData = GetPosition(dataFile[91].ArrivalTrainDatas[JrhDestType.Hakodate_Otaru], jrhLine);

            var teineData = GetPosition(dataFile[85].ArrivalTrainDatas[JrhDestType.Sapporo_Hakodate], jrhLine)
                            .Where(tuple => tuple.position >= 0 && tuple.position <= 11);

            var hoshimiData = GetPosition(dataFile[82].ArrivalTrainDatas[JrhDestType.Sapporo_Hakodate], jrhLine)
                              .Where(tuple => tuple.position >= 12 && tuple.position <= 17);

            var otaruData = GetPosition(dataFile[76].ArrivalTrainDatas[JrhDestType.Sapporo_Hakodate], jrhLine)
                            .Where(tuple => (tuple.position >= 18 && tuple.position <= 28) ||
                                   (tuple.trainData.Name.GetTypesByStation(StationReader.GetStationByName("ほしみ")) == TrainData.TrainTypes.Rapid && tuple.position >= 12 && tuple.position <= 28));

            var sapporoArrData = new TrainPositionData(jrhLine, new[] { sapporoData });
            var sapporoDepData = new TrainPositionData(jrhLine, new[] { teineData, hoshimiData, otaruData });

            return(sapporoArrData, sapporoDepData);
        }
Exemplo n.º 14
0
        private async Task DataGeter(CancellationToken cancellationToken, IEnumerable <int> id, string saveFolderPath)
        {
            while (true)
            {
                var savePath = saveFolderPath + $"\\{DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss")}";
                Directory.CreateDirectory(savePath);

                var saveFileWriter = new SaveFileWriter(savePath);
                await Task.Run(() =>
                {
                    Parallel.ForEach(id, async staId =>
                    {
                        try
                        {
                            await saveFileWriter.SaveTrainData(staId);
                            if (staId < 5)
                            {
                                LogText.WriteLine($"{DateTime.Now}: 広域データID{staId}を保存しました...");
                            }
                            else
                            {
                                LogText.WriteLine($"{DateTime.Now}: {StationReader.GetStationById(staId).Name}を保存しました...");
                            }
                        }
                        catch (TrainDataGetException ex)
                        {
                            LogText.WriteLine("通信中に例外が発生しました...");
                            throw;
                        }
                    });
                });

                LogText.WriteLine("取得プロセス一時停止(取得完了)...");
                await Task.Delay(DelayTime * 60 * 1000, cancellationToken);

                if (cancellationToken.IsCancellationRequested)
                {
                    break;
                }
            }
        }
Exemplo n.º 15
0
        /// <summary>
        /// 「検索」ボタンが押されたときの処理。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SearchButton_Click(object sender, EventArgs e)
        {
            var editText = View.FindViewById <EditText>(Resource.Id.StaionNameEditText);
            var textView = View.FindViewById <TextView>(Resource.Id.StationSearchErrorText);
            var name     = editText.Text;

            if (name.EndsWith("駅"))
            {
                name = name.Substring(0, name.Length - 1);
            }

            var station = StationReader.GetStationByName(name);

            if (station == null)
            {
                textView.Text = $"駅名「{name}」が見つかりません。";
            }
            else
            {
                var intent = new Intent(Context, new TrainTimeActivity().Class);
                intent.PutExtra("station", station.Name);
                StartActivity(intent);
            }
        }
Exemplo n.º 16
0
 public void TestCaseSetUp()
 {
     reader = new StationReader(map, TestObjectFactory.TestDirectory + "StationReaderTestInput.csv");
 }
Exemplo n.º 17
0
 public void DefaultConstructor()
 {
     reader = new StationReader(new Map());
     Assert.Greater(reader.StationsById.Count, 0);
 }
Exemplo n.º 18
0
 public void TestCaseSetUp()
 {
     reader = new StationReader(map, TestObjectFactory.TestDirectory + "StationReaderTestInput.csv");
 }
Exemplo n.º 19
0
 public void DefaultConstructor()
 {
     reader = new StationReader(new Map());
     Assert.Greater(reader.StationsById.Count, 0);
 }
Exemplo n.º 20
0
 public IEnumerable <Station> GetFavoriteStations()
 {
     return(FavoriteStationString.Select(str => StationReader.GetStationByName(str)));
 }