diff --git a/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js b/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js index 98e0541..26d7334 100644 --- a/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js +++ b/components/ActionSheetComponents/EachTrainInfo/TrainDataView.js @@ -5,6 +5,7 @@ import { useDeviceOrientationChange } from "../../../stateBox/useDeviceOrientati import { getStationList2 } from "../../../lib/getStationList2"; import { useCurrentTrain } from "../../../stateBox/useCurrentTrain"; import { SheetManager } from "react-native-actions-sheet"; +import { trainPosition } from "../../../lib/trainPositionTextArray"; export const TrainDataView = ({ currentTrainData, @@ -16,12 +17,17 @@ export const TrainDataView = ({ }) => { const { width, height } = useWindowDimensions(); const { isLandscape } = useDeviceOrientationChange(); - const { webview, getCurrentTrain, inject } = useCurrentTrain(); + const { inject } = useCurrentTrain(); const [mapsStationData, setMapsStationData] = useState(undefined); useEffect(() => { getStationList2().then(setMapsStationData); }, []); const onLine = !!currentPosition?.toString().length; + const trainPositionText = (trainData) => { + const { isBetween, Pos } = trainPosition(trainData); + if (isBetween === true) return `${Pos.from}~${Pos.to}`; + else return Pos.Pos == "" ? "" : `${Pos.Pos}`; + }; return ( { - trainName: string; - trainNumDistance?: number; - type: string; - info: string; - }; navigate: (screen: string, data?: any) => void; openStationACFromEachTrainInfo: (station: string) => void; }; @@ -37,7 +33,6 @@ export const EachData: FC = (props) => { trainIDSwitch, trainDescriptionSwitch, station, - customTrainDataDetector, navigate, openStationACFromEachTrainInfo, } = props; @@ -69,9 +64,28 @@ export const EachData: FC = (props) => { payload, }); }; - const [train, setTrain] = useState(customTrainDataDetector(d.train)); + + const getTrainDataFromCurrentTrain = (trainNum: string) => { + const customTrainData = customTrainDataDetector(d.train); + if (customTrainData.type != "Normal") return customTrainData; + const currentTrainData = currentTrain.filter((a) => a.num == trainNum); + if (currentTrainData.length == 0) return customTrainData; + else if (currentTrainData[0].Type.includes("rapid:")) { + const typeText = currentTrainData[0].Type.split(":"); + const returnData = { + type: "Rapid", + trainName: typeText[1].replace("\r", ""), + trainIcon: null, + trainNumDistance: null, + info: "", + }; + return returnData; + } + return customTrainData; + }; + const [train, setTrain] = useState(getTrainDataFromCurrentTrain(d.train)); useEffect(() => { - setTrain(customTrainDataDetector(d.train)); + setTrain(getTrainDataFromCurrentTrain(d.train)); }, [currentTrain, d.train, trainDescriptionSwitch]); // 土讃線複数存在対策 const currentTrainData = checkDuplicateTrainData( @@ -81,17 +95,11 @@ export const EachData: FC = (props) => { currentTrainData, station.Station_JP )}`; - const trainPositionText = currentTrainData?.Pos.match("~") - ? `現在地:${ - currentTrainData?.Pos.replace("(下り)", "") - .replace("(上り)", "") - .split("~")[currentTrainData?.Direction == 1 ? 0 : 1] - }→${ - currentTrainData?.Pos.replace("(下り)", "") - .replace("(上り)", "") - .split("~")[currentTrainData?.Direction == 1 ? 1 : 0] - }間を走行中` - : `現在地:${currentTrainData?.Pos}`; + const trainPositionText = (trainData: trainDataType) => { + const { isBetween, Pos } = trainPosition(trainData); + if (isBetween === true) return `現在地:${Pos.from}→${Pos.to}間を走行中`; + else return Pos.Pos == "" ? "" : `現在地:${Pos.Pos}`; + }; return ( <> = (props) => { {trainDescriptionSwitch && ( { Linking.openURL( diff --git a/components/発車時刻表/LED_vidion.js b/components/発車時刻表/LED_vidion.js index f787522..51fa6e3 100644 --- a/components/発車時刻表/LED_vidion.js +++ b/components/発車時刻表/LED_vidion.js @@ -1,7 +1,6 @@ import React, { useState, useEffect } from "react"; import { View } from "react-native"; import { widthPercentageToDP as wp } from "react-native-responsive-screen"; -import { customTrainDataDetector } from "../custom-train-data"; import { useInterval } from "../../lib/useInterval"; import { objectIsEmpty } from "../../lib/objectIsEmpty"; import { useCurrentTrain } from "../../stateBox/useCurrentTrain"; @@ -203,7 +202,6 @@ export default function LED_vision(props) { d, trainIDSwitch, trainDescriptionSwitch, - customTrainDataDetector, navigate, openStationACFromEachTrainInfo, }} diff --git a/lib/trainPositionTextArray.ts b/lib/trainPositionTextArray.ts new file mode 100644 index 0000000..22366d9 --- /dev/null +++ b/lib/trainPositionTextArray.ts @@ -0,0 +1,33 @@ +type returnBetweenType = { + isBetween: true; + Pos: { + from: string; + to: string; + }; +}; +type returnCurrentType = { + isBetween: false; + Pos: { + Pos: string; + }; +}; +export type trainDataType = { + Pos?: string; + Direction?: number; +}; +type trainData = ( + trainData: trainDataType +) => returnBetweenType | returnCurrentType; + +export const trainPosition: trainData = (trainData) => { + if (!trainData?.Pos) return { isBetween: false, Pos: { Pos: "" } }; + const { Pos, Direction } = trainData; + if (Pos.match("~")) { + const [topST, downST] = Pos.replace("(下り)", "") + .replace("(上り)", "") + .split("~"); + const from = Direction == 1 ? topST : downST; + const to = Direction == 1 ? downST : topST; + return { isBetween: true, Pos: { from, to } }; + } else return { isBetween: false, Pos: { Pos } }; +}; diff --git a/lib/webViewInjectjavascript.ts b/lib/webViewInjectjavascript.ts index 298020e..d13f21f 100644 --- a/lib/webViewInjectjavascript.ts +++ b/lib/webViewInjectjavascript.ts @@ -516,6 +516,190 @@ export const injectJavascriptData: InjectJavascriptData = ( case "114M": setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s6000p.png'); break; + + + // 土讃線普通列車系統(include ごな線) + // ごな線 + case "5851D": //219D併結 [ToDo: 219Dとの分割対策] + case "5854D": + setStationIcon(element.querySelector("img"),'https://storage.haruk.in/tosa9640jgr.png'); + break; + + //JR車両乗り入れ運用 + case "5858D": + case "5869D": + setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s1000.png'); + break; + //併結運用の併結される側 [ToDo: 分割対策] + case "5845D": + case "5851D": + case "5818D": + case "5820D": + setStationIcon(element.querySelector("img"),'https://storage.haruk.in/tosa9640.png'); + break; + // 土讃線単体列車のキハ32運用 + case "715D": + case "718D": + setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s32ns.png'); + break; + + // サンライズに伴う気動車代走 + case "6219D": + case "6222D": + setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s1000.png'); + break; + // それ以外の土讃線ごな線直通列車 + case "5811D": + case "5813D": + case "5815D": + case "5817D": + case "5843D": + case "5853D": + case "5855D": + case "5859D": + case "5861D": + case "5865D": + case "5881D": + case "5885D": + case "5889D": + + case "5812D": + case "5814D": + case "5816D": + case "5852D": + case "5856D": + case "5860D": + case "5862D": + case "5872D": + case "5874D": + case "5876D": + case "5880D": + case "5882D": + setStationIcon(element.querySelector("img"),'https://storage.haruk.in/tosa9640.png'); + break; + // それ以外の土讃線普通列車(1000) + case "4210D": + case "4212D": + case "4214D": + case "4218D": + case "4220D": + case "4222D": + case "4224D": + case "4226D": + case "4228D": + case "4230D": + case "4232D": + case "4234D": + case "4236D": + case "4238D": + case "4240D": + case "4242D": + case "4244D": + case "4250D": + case "4252D": + case "4254D": + case "4256D": + + case "4211D": + case "4221D": + case "4223D": + case "4225D": + case "4227D": + case "4229D": + case "4231D": + case "4235D": + case "4237D": + case "4239D": + case "4241D": + case "4245D": + case "4247D": + case "4249D": + case "4251D": + case "4253D": + case "4255D": + case "4257D": + case "4259D": + case "4261D": + + case "4710D": + case "4726D": + case "4730D": + case "4732D": + case "4734D": + case "4738D": + case "4740D": + case "4742D": + case "4744D": + case "4746D": + case "4752D": + case "4756D": + case "4762D": + case "4764D": + case "4766D": + + case "4711D": + case "4713D": + case "4723D": + case "4725D": + case "4727D": + case "4729D": + case "4731D": + case "4737D": + case "4739D": + case "4745D": + case "4753D": + case "4755D": + case "4759D": + case "4761D": + case "4763D": + + case "216D": + case "238D": + case "246D": + case "248D": + + case "213D": + case "215D": + case "217D": + case "219D": + case "233D": + case "243D": + + case "710D": + case "712D": + case "714D": + case "716D": + case "720D": + case "722D": + case "724D": + case "728D": + case "736D": + case "748D": + case "750D": + case "754D": + case "758D": + case "760D": + case "768D": + + case "717D": + case "719D": + case "721D": + case "733D": + case "735D": + case "737D": + case "741D": + case "743D": + case "747D": + case "749D": + case "751D": + case "755D": + case "757D": + case "761D": + + setStationIcon(element.querySelector("img"),'https://storage.haruk.in/s1000.png'); + break; + + default: break; } @@ -762,6 +946,7 @@ makeTrainView.observe(document.getElementById('modal_content'), { trainMenu == "true" ? ` // これの中身抽出ShowTrainTimeInfo("1228M","normal") + // ShowTrainTimeInfo("142M","rapid:サンポート南風リレー") function setTrainMenuDialog(d){ try{ const offclick = d.getAttribute('offclick');