🎨 Improve local IP display (#9186)

This commit is contained in:
Yingyi / 颖逸 2023-09-15 19:30:38 +08:00 committed by GitHub
parent d8960fd253
commit e460f17a8d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 69 additions and 10 deletions

View file

@ -80,7 +80,8 @@ export const about = {
<div class="fn__flex-1"> <div class="fn__flex-1">
${window.siyuan.languages.about2} ${window.siyuan.languages.about2}
<div class="b3-label__text">${window.siyuan.languages.about3.replace("${port}", location.port)}</div> <div class="b3-label__text">${window.siyuan.languages.about3.replace("${port}", location.port)}</div>
<span class="b3-label__text"><code class="fn__code">${window.siyuan.config.localIPs.join("</code> <code class='fn__code'>")}</code></span> <div class="b3-label__text"><code class="fn__code">${window.siyuan.config.localIPs.filter(ip => !(ip.startsWith("[") && ip.endsWith("]"))).join("</code> <code class='fn__code'>")}</code></div>
<div class="b3-label__text"><code class="fn__code">${window.siyuan.config.localIPs.filter(ip => (ip.startsWith("[") && ip.endsWith("]"))).join("</code> <code class='fn__code'>")}</code></div>
</div> </div>
<div class="fn__space"></div> <div class="fn__space"></div>
<button data-type="open" data-url="http://${window.siyuan.config.system.networkServe ? window.siyuan.config.localIPs[0] : "127.0.0.1"}:${location.port}" class="b3-button b3-button--outline fn__size200 fn__flex-center"> <button data-type="open" data-url="http://${window.siyuan.config.system.networkServe ? window.siyuan.config.localIPs[0] : "127.0.0.1"}:${location.port}" class="b3-button b3-button--outline fn__size200 fn__flex-center">

View file

@ -29,12 +29,13 @@ export const initAbout = () => {
<input class="b3-switch fn__flex-center" id="networkServe" type="checkbox"${window.siyuan.config.system.networkServe ? " checked" : ""}> <input class="b3-switch fn__flex-center" id="networkServe" type="checkbox"${window.siyuan.config.system.networkServe ? " checked" : ""}>
</div> </div>
<div class="b3-label"> <div class="b3-label">
${window.siyuan.languages.about2} ${window.siyuan.languages.about2}
<div class="fn__hr"></div> <div class="fn__hr"></div>
<input class="b3-text-field fn__block" readonly value="http://${window.siyuan.config.system.networkServe ? window.siyuan.config.localIPs[0] : "127.0.0.1"}:${location.port}"> <input class="b3-text-field fn__block" readonly value="http://${window.siyuan.config.system.networkServe ? window.siyuan.config.localIPs[0] : "127.0.0.1"}:${location.port}">
<div class="b3-label__text">${window.siyuan.languages.about3.replace("${port}", location.port)}</div> <div class="b3-label__text">${window.siyuan.languages.about3.replace("${port}", location.port)}</div>
<div class="fn__hr"></div> <div class="fn__hr"></div>
<span class="b3-label__text"><code class="fn__code">${window.siyuan.config.localIPs.join("</code> <code class='fn__code'>")}</code></span> <div class="b3-label__text"><code class="fn__code">${window.siyuan.config.localIPs.filter(ip => !(ip.startsWith("[") && ip.endsWith("]"))).join("</code> <code class='fn__code'>")}</code></div>
<div class="b3-label__text"><code class="fn__code">${window.siyuan.config.localIPs.filter(ip => (ip.startsWith("[") && ip.endsWith("]"))).join("</code> <code class='fn__code'>")}</code></div>
</div> </div>
<div class="b3-label${window.siyuan.config.readonly ? " fn__none" : ""}"> <div class="b3-label${window.siyuan.config.readonly ? " fn__none" : ""}">
${window.siyuan.languages.about5} ${window.siyuan.languages.about5}

View file

@ -60,12 +60,69 @@ func GetLocalIPs() (ret []string) {
logging.LogWarnf("get interface addresses failed: %s", err) logging.LogWarnf("get interface addresses failed: %s", err)
return return
} }
IPv4Nets := []*net.IPNet{}
IPv6Nets := []*net.IPNet{}
for _, addr := range addrs { for _, addr := range addrs {
if networkIp, ok := addr.(*net.IPNet); ok && !networkIp.IP.IsLoopback() && networkIp.IP.To4() != nil && if networkIp, ok := addr.(*net.IPNet); ok && networkIp.IP.String() != "<nil>" {
bytes.Equal([]byte{255, 255, 255, 0}, networkIp.Mask) { if networkIp.IP.To4() != nil {
ret = append(ret, networkIp.IP.String()) IPv4Nets = append(IPv4Nets, networkIp)
} else if networkIp.IP.To16() != nil {
IPv6Nets = append(IPv6Nets, networkIp)
}
} }
} }
// loopback address
for _, net := range IPv4Nets {
if net.IP.IsLoopback() {
ret = append(ret, net.IP.String())
}
}
// private address
for _, net := range IPv4Nets {
if net.IP.IsPrivate() {
ret = append(ret, net.IP.String())
}
}
// IPv4 private address
for _, net := range IPv4Nets {
if net.IP.IsGlobalUnicast() {
ret = append(ret, net.IP.String())
}
}
// link-local unicast address
for _, net := range IPv4Nets {
if net.IP.IsLinkLocalUnicast() {
ret = append(ret, net.IP.String())
}
}
// loopback address
for _, net := range IPv6Nets {
if net.IP.IsLoopback() {
ret = append(ret, "["+net.IP.String()+"]")
}
}
// private address
for _, net := range IPv6Nets {
if net.IP.IsPrivate() {
ret = append(ret, "["+net.IP.String()+"]")
}
}
// IPv6 private address
for _, net := range IPv6Nets {
if net.IP.IsGlobalUnicast() {
ret = append(ret, "["+net.IP.String()+"]")
}
}
// link-local unicast address
for _, net := range IPv6Nets {
if net.IP.IsLinkLocalUnicast() {
ret = append(ret, "["+net.IP.String()+"]")
}
}
ret = append(ret, LocalHost) ret = append(ret, LocalHost)
ret = gulu.Str.RemoveDuplicatedElem(ret) ret = gulu.Str.RemoveDuplicatedElem(ret)
return return