123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- package blademaster
- import (
- "strconv"
- "go-common/library/net/metadata"
- )
- const (
- // PlatAndroid is int8 for android.
- PlatAndroid = int8(0)
- // PlatIPhone is int8 for iphone.
- PlatIPhone = int8(1)
- // PlatIPad is int8 for ipad.
- PlatIPad = int8(2)
- // PlatWPhone is int8 for wphone.
- PlatWPhone = int8(3)
- // PlatAndroidG is int8 for Android Global.
- PlatAndroidG = int8(4)
- // PlatIPhoneI is int8 for Iphone Global.
- PlatIPhoneI = int8(5)
- // PlatIPadI is int8 for IPAD Global.
- PlatIPadI = int8(6)
- // PlatAndroidTV is int8 for AndroidTV Global.
- PlatAndroidTV = int8(7)
- // PlatAndroidI is int8 for Android Global.
- PlatAndroidI = int8(8)
- // PlatAndroidB is int8 for Android Blue.
- PlatAndroidB = int8(9)
- // PlatIPhoneB is int8 for Ios Blue
- PlatIPhoneB = int8(10)
- // PlatBilistudio is int8 for bilistudio
- PlatBilistudio = int8(11)
- // PlatAndroidTVYST is int8 for AndroidTV_YST Global.
- PlatAndroidTVYST = int8(12)
- )
- // Device is the mobile device model
- type Device struct {
- Build int64
- Buvid string
- Buvid3 string
- Channel string
- Device string
- Sid string
- RawPlatform string
- RawMobiApp string
- }
- // Mobile is the default handler
- func Mobile() HandlerFunc {
- return func(ctx *Context) {
- req := ctx.Request
- dev := new(Device)
- dev.Buvid = req.Header.Get("Buvid")
- if buvid3, err := req.Cookie("buvid3"); err == nil && buvid3 != nil {
- dev.Buvid3 = buvid3.Value
- }
- if sid, err := req.Cookie("sid"); err == nil && sid != nil {
- dev.Sid = sid.Value
- }
- if build, err := strconv.ParseInt(req.Form.Get("build"), 10, 64); err == nil {
- dev.Build = build
- }
- dev.Channel = req.Form.Get("channel")
- dev.Device = req.Form.Get("device")
- dev.RawMobiApp = req.Form.Get("mobi_app")
- dev.RawPlatform = req.Form.Get("platform")
- ctx.Set("device", dev)
- if md, ok := metadata.FromContext(ctx); ok {
- md[metadata.Device] = dev
- }
- }
- }
- // Plat return platform from raw platform and mobiApp
- func (d *Device) Plat() int8 {
- switch d.RawMobiApp {
- case "iphone":
- if d.Device == "pad" {
- return PlatIPad
- }
- return PlatIPhone
- case "white":
- return PlatIPhone
- case "ipad":
- return PlatIPad
- case "android":
- return PlatAndroid
- case "win":
- return PlatWPhone
- case "android_G":
- return PlatAndroidG
- case "android_i":
- return PlatAndroidI
- case "android_b":
- return PlatAndroidB
- case "iphone_i":
- if d.Device == "pad" {
- return PlatIPadI
- }
- return PlatIPhoneI
- case "ipad_i":
- return PlatIPadI
- case "iphone_b":
- return PlatIPhoneB
- case "android_tv":
- return PlatAndroidTV
- case "android_tv_yst":
- return PlatAndroidTVYST
- case "bilistudio":
- return PlatBilistudio
- }
- return PlatIPhone
- }
- // IsAndroid check plat is android or ipad.
- func (d *Device) IsAndroid() bool {
- plat := d.Plat()
- return plat == PlatAndroid ||
- plat == PlatAndroidG ||
- plat == PlatAndroidB ||
- plat == PlatAndroidI ||
- plat == PlatBilistudio ||
- plat == PlatAndroidTV ||
- plat == PlatAndroidTVYST
- }
- // IsIOS check plat is iphone or ipad.
- func (d *Device) IsIOS() bool {
- plat := d.Plat()
- return plat == PlatIPad ||
- plat == PlatIPhone ||
- plat == PlatIPadI ||
- plat == PlatIPhoneI ||
- plat == PlatIPhoneB
- }
- // IsOverseas is overseas
- func (d *Device) IsOverseas() bool {
- plat := d.Plat()
- return plat == PlatAndroidI || plat == PlatIPhoneI || plat == PlatIPadI
- }
- // InvalidChannel check source channel is not allow by config channel.
- func (d *Device) InvalidChannel(cfgCh string) bool {
- plat := d.Plat()
- return plat == PlatAndroid && cfgCh != "*" && cfgCh != d.Channel
- }
- // MobiApp by plat
- func (d *Device) MobiApp() string {
- plat := d.Plat()
- switch plat {
- case PlatAndroid:
- return "android"
- case PlatIPhone:
- return "iphone"
- case PlatIPad:
- return "ipad"
- case PlatAndroidI:
- return "android_i"
- case PlatIPhoneI:
- return "iphone_i"
- case PlatIPadI:
- return "ipad_i"
- case PlatAndroidG:
- return "android_G"
- }
- return "iphone"
- }
- // MobiAPPBuleChange is app blue change.
- func (d *Device) MobiAPPBuleChange() string {
- switch d.RawMobiApp {
- case "android_b":
- return "android"
- case "iphone_b":
- return "iphone"
- }
- return d.RawMobiApp
- }
|