Skip to content

Commit

Permalink
Merge pull request #11 from satimoto/release/v0.2.0
Browse files Browse the repository at this point in the history
Satimito Release v0.2.0
  • Loading branch information
dangeross committed Sep 13, 2022
2 parents 391bbe8 + ebbb58d commit da46316
Show file tree
Hide file tree
Showing 49 changed files with 1,767 additions and 452 deletions.
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ git fetch satimoto
Checkout branch to build (Reset staged/unstaged changes if you need to)
```bash
git reset --hard HEAD
git checkout -b v0-15-0-beta satimoto/v0-15-0-beta
git checkout -b v0.15.1-branch-rc2 satimoto/v0.15.1-branch-rc2
```
Build for iOS platform (`Lndmobile.xcframework`)
```bash
Expand All @@ -67,3 +67,8 @@ Build for android platform (`Lndmobile.aar`)
make android prefix="1" tags="chainrpc invoicesrpc routerrpc signrpc walletrpc"
cp $GOPATH/src/github.com/lightningnetwork/lnd/mobile/build/android/Lndmobile.aar <path/to>/react-mobile/android/Lndmobile
```

## Building an LND docker image
```bash
docker build . --build-arg git_url=https://github.com/satimoto/lnd --build-arg checkout=v0.15.1-branch-rc2 -t satimoto/lnd:v0.15.1-branch-rc2
```
16 changes: 16 additions & 0 deletions android/app/src/main/java/com/satimoto/LndMobile.java
Original file line number Diff line number Diff line change
Expand Up @@ -206,4 +206,20 @@ public void sendStreamWrite(String streamId, String msg) {
e.printStackTrace();
}
}

@ReactMethod
public void closeStream(String streamId) {
SendStream stream = activeStreams.get(streamId);
if (stream == null) {
return;
}

activeStreams.remove(streamId);

try {
stream.stop();
} catch (Exception e) {
e.printStackTrace();
}
}
}
14 changes: 13 additions & 1 deletion android/app/src/main/java/com/satimoto/LndUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public LndUtils(ReactApplicationContext reactContext) {
super(reactContext);

lndPath = getReactApplicationContext().getFilesDir().toString();
confPath = lndPath + "/lnd_v1.conf";
confPath = lndPath + "/lnd_v2.conf";
logPath = lndPath + "/logs/bitcoin/" + BuildConfig.NETWORK + "/lnd.log";

prepareFileDirectory(logPath);
Expand Down Expand Up @@ -100,6 +100,10 @@ void writeDefaultConf() throws Exception {
"[Neutrino]\n" +
"neutrino.connect=btcd-mainnet.lightning.computer\n" +
"\n" +
"[protocol]\n" +
"protocol.option-scid-alias=true\n" +
"protocol.zero-conf=true\n" +
"\n" +
"[autopilot]\n" +
"autopilot.active=0\n" +
"autopilot.private=0\n" +
Expand Down Expand Up @@ -129,6 +133,10 @@ void writeDefaultConf() throws Exception {
"[Neutrino]\n" +
"neutrino.connect=faucet.lightning.community\n" +
"\n" +
"[protocol]\n" +
"protocol.option-scid-alias=true\n" +
"protocol.zero-conf=true\n" +
"\n" +
"[autopilot]\n" +
"autopilot.active=0\n" +
"autopilot.private=0\n" +
Expand Down Expand Up @@ -161,6 +169,10 @@ void writeDefaultConf() throws Exception {
"bitcoind.zmqpubrawblock=tcp://10.0.2.2:28339\n" +
"bitcoind.zmqpubrawtx=tcp://10.0.2.2:29340\n" +
"\n" +
"[protocol]\n" +
"protocol.option-scid-alias=true\n" +
"protocol.zero-conf=true\n" +
"\n" +
"[autopilot]\n" +
"autopilot.active=0\n" +
"autopilot.private=0\n" +
Expand Down
17 changes: 10 additions & 7 deletions components/ConnectorButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@ import TouchableOpacityOptional from "components/TouchableOpacityOptional"
import useColor from "hooks/useColor"
import EvseModel from "models/Evse"
import ConnectorModel from "models/Connector"
import { calculateTotalPrice, getPriceComponentByType, getPriceComponents } from "models/PriceComponent"
import { HStack, Spacer, Text, useColorModeValue, useTheme, VStack } from "native-base"
import React, { useEffect, useState } from "react"
import { TariffDimension } from "types/tariff"
import { connectorIcons } from "utils/assets"
import { toNumber, toSatoshi } from "utils/conversion"
import I18n from "utils/i18n"
import styles from "utils/styles"
import { getPriceComponentByType, getPriceComponents } from "models/PriceComponent"
import { TariffDimension } from "types/tariff"

interface ConnectorButtonProps {
connector: ConnectorModel
Expand All @@ -24,6 +25,8 @@ interface ConnectorButtonProps {
const ConnectorButton = ({ connector, evses, onPress = () => {}, onPressIn = () => {}, onPressOut = () => {} }: ConnectorButtonProps) => {
const { colors } = useTheme()
const backgroundColor = useColor(colors.gray[500], colors.warmGray[50])
const primaryTextcolor = useColorModeValue("lightText", "darkText")
const secondaryTextcolor = useColorModeValue("warmGray.200", "dark.200")
const [dimension, setDimension] = useState("")
const [price, setPrice] = useState(0)
const [tariff] = useState(connector.tariff)
Expand All @@ -36,10 +39,10 @@ const ConnectorButton = ({ connector, evses, onPress = () => {}, onPressIn = ()

if (priceComponentEnergy) {
setDimension(I18n.t("Label_Kwh"))
setPrice(Math.floor(priceComponentEnergy.price * tariff.currencyRateMsat) / 1000)
setPrice(toNumber(toSatoshi(calculateTotalPrice(priceComponentEnergy))))
} else if (priceComponentTime) {
setDimension(I18n.t("Label_Hour"))
setPrice(Math.floor(priceComponentTime.price * tariff.currencyRateMsat) / 1000)
setPrice(toNumber(toSatoshi(calculateTotalPrice(priceComponentTime))))
}
}
}, [tariff?.currencyRateMsat])
Expand All @@ -55,18 +58,18 @@ const ConnectorButton = ({ connector, evses, onPress = () => {}, onPressIn = ()
<HStack alignItems="center" space={1}>
<ButtonIcon justifyContent="flex-end" source={connectorIcons[connector.standard] || connectorIcons["UNKNOWN"]} />
<VStack>
<Text color={useColorModeValue("lightText", "darkText")} fontSize="lg" fontWeight="bold">
<Text color={primaryTextcolor} fontSize="lg" fontWeight="bold">
{I18n.t(connector.standard)}
</Text>
<Text color={useColorModeValue("warmGray.200", "dark.200")} fontSize="lg">
<Text color={secondaryTextcolor} fontSize="lg">
{Math.floor(connector.wattage / 1000)} kW
</Text>
</VStack>
<Spacer />
{price > 0 && (
<VStack>
<SatoshiBalance size={18} color={"#ffffff"} satoshis={price} />
<Text color={useColorModeValue("warmGray.200", "dark.200")} fontSize="lg" textAlign="right">
<Text color={secondaryTextcolor} fontSize="lg" textAlign="right">
/{dimension}
</Text>
</VStack>
Expand Down
15 changes: 9 additions & 6 deletions components/EvseButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@ import TouchableOpacityOptional from "components/TouchableOpacityOptional"
import useColor from "hooks/useColor"
import ConnectorModel from "models/Connector"
import EvseModel from "models/Evse"
import { getPriceComponentByType, getPriceComponents } from "models/PriceComponent"
import { calculateTotalPrice, getPriceComponentByType, getPriceComponents } from "models/PriceComponent"
import { HStack, Spacer, Text, useColorModeValue, useTheme, VStack } from "native-base"
import React, { useEffect, useState } from "react"
import { TariffDimension } from "types/tariff"
import { toNumber, toSatoshi } from "utils/conversion"
import { connectorIcons } from "utils/assets"
import I18n from "utils/i18n"
import styles from "utils/styles"
Expand All @@ -24,6 +25,8 @@ interface EvseButtonProps {
const EvseButton = ({ connector, evse, onPress = () => {} }: EvseButtonProps) => {
const { colors } = useTheme()
const backgroundColor = useColor(colors.gray[500], colors.warmGray[50])
const primaryTextcolor = useColorModeValue("lightText", "darkText")
const secondaryTextcolor = useColorModeValue("warmGray.200", "dark.200")
const [dimension, setDimension] = useState("")
const [price, setPrice] = useState(0)
const [tariff] = useState(connector.tariff)
Expand All @@ -36,10 +39,10 @@ const EvseButton = ({ connector, evse, onPress = () => {} }: EvseButtonProps) =>

if (priceComponentEnergy) {
setDimension(I18n.t("Label_Kwh"))
setPrice(Math.floor(priceComponentEnergy.price * tariff.currencyRateMsat) / 1000)
setPrice(toNumber(toSatoshi(calculateTotalPrice(priceComponentEnergy))))
} else if (priceComponentTime) {
setDimension(I18n.t("Label_Hour"))
setPrice(Math.floor(priceComponentTime.price * tariff.currencyRateMsat) / 1000)
setPrice(toNumber(toSatoshi(calculateTotalPrice(priceComponentTime))))
}
}
}, [])
Expand All @@ -52,18 +55,18 @@ const EvseButton = ({ connector, evse, onPress = () => {} }: EvseButtonProps) =>
<EvseBadge evse={evse} />
</ButtonIcon>
<VStack>
<Text color={useColorModeValue("lightText", "darkText")} fontSize="lg" fontWeight="bold">
<Text color={primaryTextcolor} fontSize="lg" fontWeight="bold">
{evse.identifier || evse.uid}
</Text>
<Text color={useColorModeValue("warmGray.200", "dark.200")} fontSize="lg">
<Text color={secondaryTextcolor} fontSize="lg">
{I18n.t(evse.status)}
</Text>
</VStack>
<Spacer />
{price > 0 && (
<VStack>
<SatoshiBalance size={18} color={"#ffffff"} satoshis={price} />
<Text color={useColorModeValue("warmGray.200", "dark.200")} fontSize="lg" textAlign="right">
<Text color={secondaryTextcolor} fontSize="lg" textAlign="right">
/{dimension}
</Text>
</VStack>
Expand Down
9 changes: 7 additions & 2 deletions components/LnUrlAuthModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import BusyButton from "components/BusyButton"
import Modal from "components/Modal"
import { LNURLAuthParams } from "js-lnurl"
import { Text, useColorModeValue, VStack } from "native-base"
import React, { useState } from "react"
import React, { useEffect, useState } from "react"
import { authenticate } from "services/LnUrlService"
import { errorToString } from "utils/conversion"
import I18n from "utils/i18n"
Expand All @@ -16,6 +16,7 @@ const LnUrlAuthModal = ({ lnUrlAuthParams, onClose }: LnUrlAuthModalProps) => {
const errorColor = useColorModeValue("error.300", "error.500")
const textColor = useColorModeValue("lightText", "darkText")
const [isBusy, setIsBusy] = useState(false)
const [domain, setDomain] = useState("")
const [lastError, setLastError] = useState("")

const onConfirmPress = async () => {
Expand All @@ -37,14 +38,18 @@ const LnUrlAuthModal = ({ lnUrlAuthParams, onClose }: LnUrlAuthModalProps) => {
}
}

useEffect(() => {
setDomain(lnUrlAuthParams ? lnUrlAuthParams.domain.replace("api.", "") : "")
}, [lnUrlAuthParams?.domain])

return lnUrlAuthParams ? (
<Modal isVisible={true} onClose={onModalClose}>
<VStack alignItems="center">
<Text color={textColor} fontSize="xl">
{I18n.t("LnUrlAuthModal_Title")}
</Text>
<Text color={textColor} fontSize="xl" fontWeight="bold">
{lnUrlAuthParams.domain}
{domain}
</Text>
{lastError.length > 0 && <Text color={errorColor}>{lastError}</Text>}
<BusyButton isBusy={isBusy} marginTop={5} onPress={onConfirmPress}>
Expand Down
9 changes: 7 additions & 2 deletions components/ReceiveLightningModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,21 @@ import { FormControl, Text, useColorModeValue, VStack } from "native-base"
import React, { useEffect, useState } from "react"
import { HomeNavigationProp } from "screens/Home"
import I18n from "utils/i18n"
import { bytesToHex } from "utils/conversion"
import { bytesToHex, errorToString } from "utils/conversion"

interface ReceiveLightningModalProps {
isVisible: boolean
onClose: () => void
}

const ReceiveLightningModal = ({ isVisible, onClose }: ReceiveLightningModalProps) => {
const errorColor = useColorModeValue("error.300", "error.500")
const textColor = useColorModeValue("lightText", "darkText")
const navigation = useNavigation<HomeNavigationProp>()
const [isBusy, setIsBusy] = useState(false)
const [isAmountInvalid, setIsAmountInvalid] = useState(true)
const [amount, setAmount] = useState("")
const [lastError, setLastError] = useState("")
const [channelRequestNeeded, setChannelRequestNeeded] = useState(false)
const { channelStore, invoiceStore } = useStore()

Expand All @@ -38,7 +40,9 @@ const ReceiveLightningModal = ({ isVisible, onClose }: ReceiveLightningModalProp

navigation.navigate("WaitForPayment", { invoice })
onClose()
} catch {}
} catch (error) {
setLastError(errorToString(error))
}

setIsBusy(false)
}
Expand Down Expand Up @@ -73,6 +77,7 @@ const ReceiveLightningModal = ({ isVisible, onClose }: ReceiveLightningModalProp
<Input value={amount} keyboardType="number-pad" isFullWidth={true} onChangeText={onAmountChange} />
{channelRequestNeeded && <FormControl.HelperText>{I18n.t("ReceiveLightningModal_InputAmountWarning")}</FormControl.HelperText>}
</FormControl>
{lastError.length > 0 && <Text color={errorColor}>{lastError}</Text>}
<BusyButton isBusy={isBusy} onPress={onConfirmPress} isDisabled={isAmountInvalid}>
{I18n.t("Button_Ok")}
</BusyButton>
Expand Down
4 changes: 4 additions & 0 deletions ios/LndMobile/LndMobile.m
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,8 @@ @interface RCT_EXTERN_MODULE(LndMobile, RCTEventEmitter)
body:(NSString*)msg
)

RCT_EXTERN_METHOD(
closeStream:(NSString*)streamId
)

@end

0 comments on commit da46316

Please sign in to comment.