Update QRCodeParser, CreateQRCodeView, and related components to reflect the rebranding of Twitter to X; modify input handling, display names, and URL schemes accordingly for improved user experience and consistency across the application.

main
v504 2 months ago
parent dc0a1e2356
commit a1cd994334

@ -94,8 +94,8 @@
filePath = "MyQrCode/Views/CreateQRCodeView.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "145"
endingLineNumber = "145"
startingLineNumber = "139"
endingLineNumber = "139"
landmarkName = "createInputComponentForType()"
landmarkType = "7">
</BreakpointContent>

@ -42,7 +42,7 @@ public enum QRCodeType: String, CaseIterable {
case instagram = "Instagram"
case facebook = "Facebook"
case spotify = "Spotify"
case twitter = "Twitter"
case twitter = "X"
case whatsapp = "WhatsApp"
case viber = "Viber"
case snapchat = "Snapchat"

@ -182,8 +182,8 @@ class QRCodeParser {
return parseSpotify(trimmedContent)
}
// Twitter
if trimmedContent.contains("twitter.com") {
// X (Twitter)
if trimmedContent.hasPrefix("twitter://user?screen_name=") || trimmedContent.contains("x.com") || trimmedContent.contains("twitter.com") {
return parseTwitter(trimmedContent)
}
@ -203,7 +203,7 @@ class QRCodeParser {
}
// TikTok
if trimmedContent.contains("tiktok.com") {
if trimmedContent.contains("tiktok.com") || trimmedContent.contains("www.tiktok.com") {
return parseTikTok(trimmedContent)
}
@ -548,13 +548,19 @@ class QRCodeParser {
)
}
// MARK: - Twitter
// MARK: - X (Twitter)
private static func parseTwitter(_ content: String) -> ParsedQRData {
let username = content.components(separatedBy: "/").dropLast().last ?? ""
var username = ""
if content.hasPrefix("twitter://user?screen_name=") {
username = content.replacingOccurrences(of: "twitter://user?screen_name=", with: "")
} else if content.contains("x.com") || content.contains("twitter.com") {
username = content.components(separatedBy: "/").dropLast().last ?? ""
}
return ParsedQRData(
type: .twitter,
title: "Twitter",
title: "X",
subtitle: "用户名: \(username)",
icon: "bird"
)
@ -598,7 +604,19 @@ class QRCodeParser {
// MARK: - TikTok
private static func parseTikTok(_ content: String) -> ParsedQRData {
let username = content.components(separatedBy: "@").last?.replacingOccurrences(of: "/", with: "") ?? ""
var username = ""
if content.contains("www.tiktok.com") {
// https://www.tiktok.com/@username
if let atIndex = content.lastIndex(of: "@") {
username = String(content[content.index(after: atIndex)...])
}
} else if content.contains("tiktok.com") {
// https://tiktok.com/@username
if let atIndex = content.lastIndex(of: "@") {
username = String(content[content.index(after: atIndex)...])
}
}
return ParsedQRData(
type: .tiktok,

@ -284,7 +284,7 @@ struct InputComponentFactory {
case .spotify:
return "输入Spotify信息..."
case .twitter:
return "输入Twitter信息..."
return "输入X信息..."
case .whatsapp:
return "输入WhatsApp电话号码+1234567890..."
case .viber:

@ -11,7 +11,7 @@ struct SocialInputView: View {
enum SocialPlatform: String, CaseIterable {
case instagram = "Instagram"
case facebook = "Facebook"
case twitter = "Twitter"
case twitter = "X"
case tiktok = "Tiktok"
case snapchat = "Snapchat"
case whatsapp = "Whatsapp"
@ -22,7 +22,7 @@ struct SocialInputView: View {
switch self {
case .instagram: return "Instagram"
case .facebook: return "Facebook"
case .twitter: return "Twitter"
case .twitter: return "X"
case .tiktok: return "TikTok"
case .snapchat: return "Snapchat"
case .whatsapp: return "WhatsApp"
@ -48,8 +48,8 @@ struct SocialInputView: View {
switch self {
case .instagram: return "用户名或链接"
case .facebook: return "用户名或链接"
case .twitter: return "用户名或链接"
case .tiktok: return "用户名或链接"
case .twitter: return "用户名"
case .tiktok: return "用户名"
case .snapchat: return "用户名"
case .whatsapp: return "输入WhatsApp电话号码"
case .viber: return "电话号码"
@ -61,7 +61,7 @@ struct SocialInputView: View {
switch self {
case .instagram: return "输入Instagram用户名"
case .facebook: return "输入Facebook用户ID或链接"
case .twitter: return "输入Twitter用户名或完整链接"
case .twitter: return "输入X用户名或完整链接"
case .tiktok: return "输入TikTok用户名或完整链接"
case .snapchat: return "输入Snapchat用户名"
case .whatsapp: return "输入WhatsApp消息内容"
@ -106,7 +106,8 @@ struct SocialInputView: View {
// / ()
VStack(alignment: .leading, spacing: 8) {
HStack {
Text(platform == .whatsapp || platform == .viber ? "电话号码" : "用户名/链接")
//
Text(getInputLabel())
.font(.subheadline)
.foregroundColor(.primary)
Text("*")
@ -160,16 +161,38 @@ struct SocialInputView: View {
}
}
// MARK: -
private func getInputLabel() -> String {
switch platform {
case .instagram:
return "Instagram用户名"
case .facebook:
return "用户ID或链接"
case .twitter:
return "X用户名"
case .tiktok:
return "TikTok用户名"
case .snapchat:
return "Snapchat用户名"
case .whatsapp:
return "WhatsApp电话号码"
case .viber:
return "Viber电话号码"
case .spotify:
return "歌曲链接或ID"
}
}
private func getFormatHint() -> String {
switch platform {
case .instagram, .facebook, .twitter, .tiktok:
if platform == .instagram {
case .instagram:
return "• 输入Instagram用户名\n• 将生成instagram://user?username=用户名格式"
} else if platform == .facebook {
case .facebook:
return "• 输入Facebook用户ID或完整链接\n• 将自动提取用户名并生成fb://profile/格式\n• 支持username 或 https://facebook.com/username"
} else {
return "• 可以输入用户名username\n• 或输入完整链接https://twitter.com/username"
}
case .twitter:
return "• 可以输入用户名username\n• 将生成twitter://user?screen_name=格式\n• 用户扫描后可直接打开X应用"
case .tiktok:
return "• 输入TikTok用户名username\n• 将生成https://www.tiktok.com/@username格式\n• 用户扫描后可直接访问TikTok主页"
case .snapchat:
return "• 输入Snapchat用户名\n• 例如username"
case .whatsapp:
@ -186,6 +209,6 @@ struct SocialInputView: View {
SocialInputView(
username: .constant(""),
message: .constant(""),
platform: .instagram
platform: .tiktok
)
}

@ -103,12 +103,6 @@ struct CreateQRCodeView: View {
private var inputAndPreviewSection: some View {
ScrollView {
VStack(spacing: 24) {
//
InputHintView.info(
hint: getContentHint()
)
.padding(.horizontal, 20)
//
VStack(spacing: 16) {
// 使InputComponentFactory
@ -517,9 +511,9 @@ struct CreateQRCodeView: View {
let facebookId = extractFacebookId(from: socialUsername)
return "fb://profile/\(facebookId)"
case .spotify:
return socialUsername.hasPrefix("http") ? socialUsername : "https://open.spotify.com/track/\(socialUsername)"
return "https://open.spotify.com/track/\(socialUsername)"
case .twitter:
return "https://twitter.com/\(socialUsername)"
return "twitter://user?screen_name=\(socialUsername)"
case .whatsapp:
return "whatsapp://send?phone=\(socialUsername)"
case .viber:
@ -527,7 +521,33 @@ struct CreateQRCodeView: View {
case .snapchat:
return "https://snapchat.com/add/\(socialUsername)"
case .tiktok:
return "https://tiktok.com/@\(socialUsername)"
return "https://www.tiktok.com/@\(socialUsername)"
}
}
// MARK: -
private func generateSocialMediaContent() -> String {
switch selectedQRCodeType {
case .instagram:
return "instagram://user?username=\(socialUsername)"
case .facebook:
// Facebook/ID
let facebookId = extractFacebookId(from: socialUsername)
return "fb://profile/\(facebookId)"
case .spotify:
return "https://open.spotify.com/track/\(socialUsername)"
case .twitter:
return "twitter://user?screen_name=\(socialUsername)"
case .whatsapp:
return "whatsapp://send?phone=\(socialUsername)"
case .viber:
return "viber://add?number=\(socialUsername)"
case .snapchat:
return "https://snapchat.com/add/\(socialUsername)"
case .tiktok:
return "https://www.tiktok.com/@\(socialUsername)"
default:
return socialUsername
}
}
@ -589,7 +609,7 @@ struct CreateQRCodeView: View {
case .calendar:
historyItem.content = "事件: \(eventTitle)"
case .instagram, .facebook, .spotify, .twitter, .snapchat, .tiktok, .whatsapp, .viber:
historyItem.content = "\(selectedQRCodeType.displayName): \(socialUsername)"
historyItem.content = generateSocialMediaContent()
case .phone, .sms:
historyItem.content = "电话: \(phoneNumber)"
case .url:

@ -34,7 +34,7 @@
- `Instagram`: Instagram链接
- `Facebook`: Facebook链接
- `Spotify`: Spotify音乐
- `Twitter`: Twitter链接
- `X`: X链接
- `WhatsApp`: WhatsApp消息
- `Viber`: Viber消息
- `Snapchat`: Snapchat链接

@ -93,7 +93,7 @@ END:VEVENT
Instagram: instagram://user?username=<用户名>
Facebook: fb://profile/<用户ID>
Spotify: spotify:track:<曲目ID>
Twitter: https://twitter.com/<用户名>
X: twitter://user?screen_name=<用户名>
WhatsApp: whatsapp://send?phone=<电话号码>
Viber: viber://add?number=<电话号码>
Snapchat: snapchat://<用户名>
@ -277,7 +277,7 @@ ScrollView {
- **Instagram**: 用户主页
- **Facebook**: 页面或用户
- **Spotify**: 音乐曲目
- **Twitter**: 用户主页
- **X**: 用户主页
- **WhatsApp**: 聊天链接
- **Viber**: 联系人
- **Snapchat**: 用户

Loading…
Cancel
Save