From d1ee69355763e6cfdae406e4d605e8df2b15ff70 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Sun, 17 Mar 2024 16:16:28 +0000 Subject: [PATCH 1/4] =?UTF-8?q?=E4=B8=AD=E5=A4=AE=E6=99=82=E4=B8=89?= =?UTF-8?q?=E6=AE=B5=E6=B4=BB=E7=94=A8=E5=8F=AF=E8=83=BD=E3=81=AB=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=E3=80=81=E3=83=80=E3=82=A4=E3=83=A4=E6=83=85=E5=A0=B1?= =?UTF-8?q?=E3=81=AE=E9=83=A8=E5=88=86=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EachTrainInfoCore.js | 174 ++++++++++-------- lib/webViewInjectjavascript.js | 51 ++++- stateBox/useBusAndTrainData.js | 53 +++++- 3 files changed, 185 insertions(+), 93 deletions(-) diff --git a/components/ActionSheetComponents/EachTrainInfoCore.js b/components/ActionSheetComponents/EachTrainInfoCore.js index 3317c65..cade5b9 100644 --- a/components/ActionSheetComponents/EachTrainInfoCore.js +++ b/components/ActionSheetComponents/EachTrainInfoCore.js @@ -71,10 +71,10 @@ export const EachTrainInfoCore = ({ }, []); //bconst insets = useSafeAreaInsets(); - const [headStation, setHeadStation] = useState(); - const [tailStation, setTailStation] = useState(); - const [isConcatNear, setIsConcatNear] = useState(false); - const [showNearTrain, setShowNearTrain] = useState([]); + const [headStation, setHeadStation] = useState([]); + const [tailStation, setTailStation] = useState([]); + const [showHeadStation, setShowHeadStation] = useState([]); + const [showTailStation, setShowTailStation] = useState([]); const [nearTrainIDList, setNearTrainIDList] = useState([]); const { getInfluencedTrainData } = useBusAndTrainData(); const [trainPositionSwitch, setTrainPositionSwitch] = useState("false"); @@ -120,9 +120,8 @@ export const EachTrainInfoCore = ({ useEffect(() => { if (!data.trainNum) return; const TD = trainList[data.trainNum]; - setIsConcatNear(false); - setHeadStation(); - setTailStation(); + setHeadStation([]); + setTailStation([]); if (!TD) { const specialTrainActualID = searchSpecialTrain(data.trainNum, trainList); setTrueTrainID(specialTrainActualID || undefined); @@ -134,27 +133,38 @@ export const EachTrainInfoCore = ({ //裏列車探索 useEffect(() => { if (!data.trainNum) return; - const [returnArray, TDArray] = getInfluencedTrainData(data.trainNum); + const NearTrainList = getInfluencedTrainData(data.trainNum); + if (NearTrainList.length == 0) return; + const returnArray = NearTrainList.map((d) => d.id); + const TDArray = NearTrainList.map((d) => d.TrainData); setNearTrainIDList(returnArray); - setShowNearTrain(TDArray); if (trainData.length == 0) return; if (TDArray.length == 0) return; - let head; - let tail; - TDArray.forEach((d) => { - const [station, se, time] = d.split(","); - - if (station == trainData[0].split(",")[0]) { - head = trainData[0].split(",")[0]; - } - if (station == trainData[trainData.length - 1].split(",")[0]) { - tail = trainData[trainData.length - 1].split(",")[0]; - } - }); + let head = []; + let tail = []; + TDArray.forEach((data, i) => + data.forEach((d) => { + const [station, se, time] = d.split(","); + if (station == trainData[0].split(",")[0]) { + head.push({ + station: trainData[0].split(",")[0], + dia: data, + id: nearTrainIDList[i], + }); + } + if (station == trainData[trainData.length - 1].split(",")[0]) { + tail.push({ + station: trainData[trainData.length - 1].split(",")[0], + dia: data, + id: nearTrainIDList[i], + }); + } + }) + ); if (head) setHeadStation(head); - else setHeadStation(); + else setHeadStation([]); if (tail) setTailStation(tail); - else setTailStation(); + else setTailStation([]); }, [trainData, data]); useEffect(() => { @@ -256,8 +266,9 @@ export const EachTrainInfoCore = ({ + {showHeadStation.map((d) => `${headStation[d].id} + `)} {data.trainNum} - {isConcatNear ? ` + ${nearTrainIDList}` : ""} + {showTailStation.map((d) => ` + ${tailStation[d].id}`)} {data.limited != undefined && @@ -331,33 +342,36 @@ export const EachTrainInfoCore = ({ } > - {headStation && !isConcatNear && ( - { - const array = openBackTrainInfo( - headStation, - trainData, - showNearTrain - ); - if (!array) return; - setTrainData(array); - setIsConcatNear(true); - }} - style={{ - padding: 10, - flexDirection: "row", - borderColor: "blue", - borderWidth: 1, - margin: 10, - borderRadius: 5, - alignItems: "center", - }} - > - - 「本当の始発駅」を表示 - - - )} + {headStation.length != 0 && + headStation.map((i, index) => + showHeadStation.findIndex((d) => d == index) == -1 ? ( + { + const array = openBackTrainInfo(i.station, trainData, i.dia); + if (!array) return; + setTrainData(array); + setShowHeadStation([...showHeadStation, index]); + }} + style={{ + padding: 10, + flexDirection: "row", + borderColor: "blue", + borderWidth: 1, + margin: 10, + borderRadius: 5, + alignItems: "center", + }} + > + + 「本当の始発駅」を表示 + + + ) : ( + <> + ) + )} {/* ) )} - {tailStation && !isConcatNear && ( - { - const array = openBackTrainInfo( - tailStation, - trainData, - showNearTrain - ); + {tailStation.length != 0 && + tailStation.map((i, index) => + showTailStation.findIndex((d) => d == index) == -1 ? ( + { + const array = openBackTrainInfo(i.station, trainData, i.dia); - if (!array) return; - setTrainData(array); - setIsConcatNear(true); - }} - style={{ - padding: 10, - flexDirection: "row", - borderColor: "blue", - borderWidth: 1, - margin: 10, - borderRadius: 5, - alignItems: "center", - }} - > - - 「本当の終着駅」を表示 - - - )} + if (!array) return; + setTrainData(array); + + setShowTailStation([...showTailStation, index]); + }} + style={{ + padding: 10, + flexDirection: "row", + borderColor: "blue", + borderWidth: 1, + margin: 10, + borderRadius: 5, + alignItems: "center", + }} + > + + 「本当の終着駅」を表示 + + + ) : ( + <> + ) + )} { switch(num){ @@ -535,7 +565,7 @@ const getJRF = num =>{ const data = getJRF(列番データ); 行き先情報.innerText = data != null ? data+行き先情報.innerText : 行き先情報.innerText; -` + JRF_icon; +`; const TKT_name = ` //安芸行と併結列車を個別に表示、それ以外をdefaultで下りなら既定の行き先を、上りなら奈半利行を設定 @@ -548,9 +578,10 @@ const data = getJRF(列番データ); return "ごめん・なはり線直通\\n快速 安芸行"; case "5874D": case "5882D": + case "5878D": return "ごめん・なはり線直通\\n各停 安芸行"; - case "742D": - case "746D": + case "246D": + case "750D": return "土佐山田/奈半利行\\n(後免にて解結)\\nごめん・なはり線快速"; default: if(new RegExp(/^58[1-3][1,3,5,7,9][DM]$/).test(列番データ)){ diff --git a/stateBox/useBusAndTrainData.js b/stateBox/useBusAndTrainData.js index c1b6d8d..8a5cc58 100644 --- a/stateBox/useBusAndTrainData.js +++ b/stateBox/useBusAndTrainData.js @@ -63,11 +63,51 @@ export const BusAndTrainDataProvider = ({ children }) => { const getInfluencedTrainData = (trainNum) => { const trainPairList = initializeTrainPairList(); + // 9253M ラマル + // 9256M ラマル + + // 4125m-545M + //143M-147M + // 1261M-4261M + // 3621DWANMAN + //8091D-IYO-OZU + //8093D-IYO-YAWA + //8092D-IYO-FUTAMI + //8094-IYO-DOGO + const returnArray = []; if (!trainNum) return; if (trainPairList[trainNum]) { returnArray.push(Object.keys(trainPairList[trainNum])[0]); } + switch (trainNum) { + case "4125M": + returnArray.push("545M"); + break; + case "545M": + returnArray.push("4125M"); + break; + case "143M": + returnArray.push("147M"); + break; + case "147M": + returnArray.push("143M"); + break; + case "1261M": + returnArray.push("4261M"); + break; + case "4261M": + returnArray.push("1261M"); + break; + case new RegExp(/^4[1-9]\d\d[DM]$/).test(trainNum): + if (trainList["5" + trainNum.substring(1)]) + returnArray.push("5" + trainNum.substring(1)); + break; + case new RegExp(/^5[1-7]\d\d[DM]$/).test(trainNum): + if (trainList["4" + trainNum.substring(1)]) + returnArray.push("4" + trainNum.substring(1)); + break; + } if ( // 列番が4xxDまたは5xxDの場合はxxDの列番を検索 new RegExp(/^4[1-9]\d\d[DM]$/).test(trainNum) || @@ -82,11 +122,14 @@ export const BusAndTrainDataProvider = ({ children }) => { if (trainList["4" + trainNum]) returnArray.push("4" + trainNum); if (trainList["5" + trainNum]) returnArray.push("5" + trainNum); } - if (!returnArray[0]) return [[], []]; - const TD = trainList[returnArray[0]]; - if (!TD) return [[], []]; - const TDArray = TD.split("#").filter((d) => d != ""); - return [returnArray, TDArray]; + + if (!returnArray.length) return []; + const TDArray = returnArray.map((d) => { + const TD = trainList[d]; + if (!TD) return; + return { id: d, TrainData: TD.split("#").filter((d) => d != "") }; + }); + return TDArray; }; return ( Date: Sun, 17 Mar 2024 17:29:03 +0000 Subject: [PATCH 2/4] =?UTF-8?q?=E3=83=80=E3=82=A4=E3=83=A4=E6=94=B9?= =?UTF-8?q?=E6=AD=A3=E6=83=85=E5=A0=B1=E3=81=AE=E6=9B=B4=E6=96=B0=E5=AE=8C?= =?UTF-8?q?=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/custom-train-data.js | 64 ++++++++++++++++----------------- lib/webViewInjectjavascript.js | 58 +++++++++++++----------------- 2 files changed, 56 insertions(+), 66 deletions(-) diff --git a/components/custom-train-data.js b/components/custom-train-data.js index 78f1234..9a793a9 100644 --- a/components/custom-train-data.js +++ b/components/custom-train-data.js @@ -243,25 +243,15 @@ export const customTrainDataDetector = (TrainNumber) => { trainNumDistance: 5000, info: "南風と併結 / 高松-宇多津間進行方向逆転 / 2700系で運転", }; - case "3002D": case "3004D": case "3010D": - case "3012D": + case "3014D": case "3016D": - case "3018D": - case "3024D": case "3028D": - case "3030D": case "3003D": - case "3005D": case "3007D": - case "3015D": - case "3019D": - case "3021D": case "3025D": - case "3027D": case "3031D": - case "3033D": return { type: "LTDEXP", trainName: "うずしお", @@ -271,14 +261,24 @@ export const customTrainDataDetector = (TrainNumber) => { }; //2600 - case "3008D": - case "3014D": + case "3002D": + case "3012D": + case "3018D": case "3020D": + case "3024D": case "3026D": - case "3001D": + case "3030D": + case "3032D": + case "3005D": + case "3009D": case "3011D": + case "3015D": case "3017D": + case "3019D": + case "3021D": case "3023D": + case "3027D": + case "3033D": return { type: "LTDEXP", trainName: "うずしお", @@ -288,8 +288,8 @@ export const customTrainDataDetector = (TrainNumber) => { }; //キハ185 - case "3009D": - case "3032D": + case "3001D": + case "3008D": return { type: "LTDEXP", trainName: "うずしお", @@ -484,13 +484,11 @@ export const customTrainDataDetector = (TrainNumber) => { case "2074D": case "2076D": case "2080D": - case "2084D": - case "2086D": + case "2082D": case "2071D": - case "2075D": - case "2077D": + case "2073D": + case "2079D": case "2081D": - case "2083D": return { type: "LTDEXP", trainName: "あしずり", @@ -501,12 +499,12 @@ export const customTrainDataDetector = (TrainNumber) => { //あしずり 2700 case "2078D": - case "2082D": + case "2084D": case "2088D": - case "2073D": - case "2079D": - case "2085D": + case "2075D": + case "2077D": case "2072D": + case "2083D": return { type: "LTDEXP", trainName: "あしずり", @@ -536,8 +534,8 @@ export const customTrainDataDetector = (TrainNumber) => { }; //むろと - case "5051D": - case "5052D": + case "8051D": + case "8052D": return { type: "LTDEXP", trainName: "むろと", @@ -585,8 +583,8 @@ export const customTrainDataDetector = (TrainNumber) => { }; //千年ものがたり - case "8011D": - case "8012D": + case "8021D": + case "8022D": return { type: "LTDEXP", trainName: "四国まんなか千年ものがたり", @@ -596,10 +594,10 @@ export const customTrainDataDetector = (TrainNumber) => { }; //夜明けものがたり - case "8053D": - case "8054D": - case "8062D": - case "8063D": + case "8082D": + case "8083D": + case "8073D": + case "8074D": return { type: "LTDEXP", trainName: "時代の夜明けのものがたり", diff --git a/lib/webViewInjectjavascript.js b/lib/webViewInjectjavascript.js index 1627e03..725e9ee 100644 --- a/lib/webViewInjectjavascript.js +++ b/lib/webViewInjectjavascript.js @@ -204,43 +204,43 @@ export const injectJavascriptData = ( case "5022D": case "5013D": case "5029D": - case "3002D": case "3004D": case "3010D": - case "3012D": + case "3014D": case "3016D": - case "3018D": - case "3024D": case "3028D": - case "3030D": case "3003D": - case "3005D": case "3007D": - case "3015D": - case "3019D": - case "3021D": case "3025D": - case "3027D": case "3031D": - case "3033D": setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s2700_uzu.png'); break; //2600 - case "3008D": - case "3014D": + case "3002D": + case "3012D": + case "3018D": case "3020D": + case "3024D": case "3026D": - case "3001D": + case "3030D": + case "3032D": + case "3005D": + case "3009D": case "3011D": + case "3015D": case "3017D": + case "3019D": + case "3021D": case "3023D": + case "3027D": + case "3033D": setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s2600.png'); break; //キハ185 - case "3009D": - case "3032D": + case "3001D": + case "3008D": setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s185tu_uzu.png'); break; @@ -386,24 +386,22 @@ export const injectJavascriptData = ( case "2074D": case "2076D": case "2080D": - case "2084D": - case "2086D": + case "2082D": case "2071D": - case "2075D": - case "2077D": + case "2073D": + case "2079D": case "2081D": - case "2083D": setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s2000_asi.png'); break; //あしずり 2700 case "2078D": - case "2082D": + case "2084D": case "2088D": - case "2073D": - case "2079D": - case "2085D": + case "2075D": + case "2077D": case "2072D": + case "2083D": setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s2700_asi.png'); break; //剣山 @@ -421,8 +419,8 @@ export const injectJavascriptData = ( setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s185tu.png'); break; //むろと - case "5051D": - case "5052D": + case "8051D": + case "8052D": setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s185_mrt.png'); break; @@ -452,18 +450,12 @@ export const injectJavascriptData = ( //千年ものがたり - case "8011D": - case "8012D": case "8021D": case "8022D": setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s185mm1.png'); break; //夜明けものがたり - case "8053D": - case "8054D": - case "8062D": - case "8063D": case "8082D": case "8083D": case "8073D": From c0e0039bfb271f3cf6aa125fb5ea05ec203abf2d Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Sun, 17 Mar 2024 18:41:51 +0000 Subject: [PATCH 3/4] =?UTF-8?q?=E5=88=97=E8=BB=8A=E3=81=AE=E7=8F=BE?= =?UTF-8?q?=E5=9C=A8=E5=9C=B0=E6=83=85=E5=A0=B1=E3=81=8B=E3=82=89=E5=88=97?= =?UTF-8?q?=E8=BB=8A=E4=BD=8D=E7=BD=AE=E6=83=85=E5=A0=B1=E3=81=AB=E3=82=B8?= =?UTF-8?q?=E3=83=A3=E3=83=B3=E3=83=97=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Top.js | 3 +- .../EachTrainInfo/LongHeader.js | 2 + .../EachTrainInfo/ShortHeader.js | 2 + .../EachTrainInfo/TrainDataView.js | 73 ++++++++++++++----- .../EachTrainInfoCore.js | 2 + stateBox/useCurrentTrain.js | 12 ++- 6 files changed, 72 insertions(+), 22 deletions(-) diff --git a/Top.js b/Top.js index b320f59..1d36df5 100644 --- a/Top.js +++ b/Top.js @@ -15,9 +15,8 @@ import { optionData } from "./lib/stackOption.js"; import { useCurrentTrain } from "./stateBox/useCurrentTrain.js"; const Stack = createStackNavigator(); export const Top = ({ navigation }) => { - const webview = useRef(); const { favoriteStation, setFavoriteStation } = useFavoriteStation(); - const { getCurrentTrain } = useCurrentTrain(); + const { webview, getCurrentTrain } = useCurrentTrain(); //地図用 const [mapsStationData, setMapsStationData] = useState(undefined); diff --git a/components/ActionSheetComponents/EachTrainInfo/LongHeader.js b/components/ActionSheetComponents/EachTrainInfo/LongHeader.js index 95f23f9..0410b53 100644 --- a/components/ActionSheetComponents/EachTrainInfo/LongHeader.js +++ b/components/ActionSheetComponents/EachTrainInfo/LongHeader.js @@ -7,6 +7,7 @@ export const LongHeader = ({ currentPosition, nearTrainIDList, openTrainInfo, + navigate, }) => { return ( ); diff --git a/components/ActionSheetComponents/EachTrainInfo/ShortHeader.js b/components/ActionSheetComponents/EachTrainInfo/ShortHeader.js index a289e24..1f68b85 100644 --- a/components/ActionSheetComponents/EachTrainInfo/ShortHeader.js +++ b/components/ActionSheetComponents/EachTrainInfo/ShortHeader.js @@ -7,6 +7,7 @@ export const ShortHeader = ({ currentPosition, nearTrainIDList, openTrainInfo, + navigate, }) => { return ( ); diff --git a/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js b/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js index fdb5426..978bd78 100644 --- a/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js +++ b/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js @@ -1,7 +1,10 @@ -import React from "react"; +import React, { useState, useEffect } from "react"; import { View, TouchableOpacity, useWindowDimensions } from "react-native"; import { StateBox } from "./StateBox"; import { useDeviceOrientationChange } from "../../../stateBox/useDeviceOrientationChange"; +import { getStationList2 } from "../../../lib/getStationList2"; +import { useCurrentTrain } from "../../../stateBox/useCurrentTrain"; +import { SheetManager } from "react-native-actions-sheet"; export const TrainDataView = ({ currentTrainData, @@ -9,10 +12,16 @@ export const TrainDataView = ({ nearTrainIDList, openTrainInfo, mode = 0, + navigate, }) => { const { width, height } = useWindowDimensions(); const { isLandscape } = useDeviceOrientationChange(); - + const { webview, getCurrentTrain } = useCurrentTrain(); + const [mapsStationData, setMapsStationData] = useState(undefined); + useEffect(() => { + getStationList2().then(setMapsStationData); + }, []); + const onLine = !!currentPosition?.toString().length; return ( - + { + const test = []; + Object.keys(mapsStationData).forEach((d) => { + mapsStationData[d].forEach((x) => { + if (x.StationNumber == currentPosition[0]) + test.push({ line: d, station: x }); + }); + }); + if (!test.length) return; + webview.current?.injectJavaScript( + `MoveDisplayStation('${test[0].line}_${test[0].station.MyStation}_${test[0].station.Station_JP}')` + ); + navigate("Apps"); + SheetManager.hide("EachTrainInfo"); + }} + > + + + ) } @@ -335,6 +336,7 @@ export const EachTrainInfoCore = ({ currentPosition={currentPosition} nearTrainIDList={nearTrainIDList} openTrainInfo={openTrainInfo} + navigate={navigate} /> ) } diff --git a/stateBox/useCurrentTrain.js b/stateBox/useCurrentTrain.js index 944b37c..9e181d8 100644 --- a/stateBox/useCurrentTrain.js +++ b/stateBox/useCurrentTrain.js @@ -1,8 +1,15 @@ -import React, { createContext, useContext, useState, useEffect } from "react"; +import React, { + createContext, + useContext, + useState, + useEffect, + useRef, +} from "react"; import { HeaderConfig } from "../lib/HeaderConfig"; import useInterval from "../lib/useInterval"; const initialState = { + webview: {}, currentTrain: [], setCurrentTrain: () => {}, currentTrainLoading: "loading", @@ -40,9 +47,12 @@ export const CurrentTrainProvider = ({ children }) => { useEffect(getCurrentTrain, []); //初回だけ現在の全在線列車取得 useInterval(getCurrentTrain, 15000); //15秒毎に全在線列車取得 + + const webview = useRef(); return ( Date: Mon, 18 Mar 2024 04:01:42 +0000 Subject: [PATCH 4/4] 5.0.3 --- components/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/settings.js b/components/settings.js index 291d706..3115201 100644 --- a/components/settings.js +++ b/components/settings.js @@ -174,7 +174,7 @@ export default function Setting(props) { textAlignVertical: "center", }} > - 内部バージョン: 5.0.2.3 + 内部バージョン: 5.0.3