daily_download_limit.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package task_queue
  2. import (
  3. "github.com/allanpk716/ChineseSubFinder/internal/pkg/badger_err_check"
  4. "github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
  5. "github.com/dgraph-io/badger/v3"
  6. "time"
  7. )
  8. // GetDailyDownloadCount 根据字幕提供者的名称,获取今日下载计数的次数,仅仅统计次数,并不确认是那个视频的字幕下载
  9. // whichDay nowTime.Format("2006-01-02")
  10. func GetDailyDownloadCount(supplierName string, publicIP string, whichDay ...string) (int, error) {
  11. KeyName := ""
  12. if len(whichDay) > 0 {
  13. KeyName = supplierName + "_" + whichDay[0] + "_" + publicIP
  14. } else {
  15. nowTime := time.Now()
  16. KeyName = supplierName + "_" + nowTime.Format("2006-01-02") + "_" + publicIP
  17. }
  18. outCount := 0
  19. err := GetDb().View(
  20. func(tx *badger.Txn) error {
  21. var err error
  22. key := []byte(MergeBucketAndKeyName(BucketNamePrefixSupplierDailyDownloadCounter, KeyName))
  23. e, err := tx.Get(key)
  24. if err != nil {
  25. if badger_err_check.IsErrOk(err) == true {
  26. return nil
  27. }
  28. return err
  29. }
  30. valCopy, err := e.ValueCopy(nil)
  31. if err != nil {
  32. return err
  33. }
  34. outCount, err = my_util.BytesToInt(valCopy)
  35. if err != nil {
  36. return err
  37. }
  38. return nil
  39. })
  40. if err != nil {
  41. return 0, err
  42. }
  43. return outCount, nil
  44. }
  45. // AddDailyDownloadCount 根据字幕提供者的名称,今日下载计数的次数+1,仅仅统计次数,并不确认是那个视频的字幕下载。TTL 多加 5s 确保今天过去(暂时去除 TTL)
  46. func AddDailyDownloadCount(supplierName string, publicIP string, whichDay ...string) (int, error) {
  47. nowTime := time.Now()
  48. // 今天剩余的时间(s)
  49. //restOfDaySecond := my_util.GetRestOfDaySec()
  50. KeyName := supplierName + "_" + nowTime.Format("2006-01-02") + "_" + publicIP
  51. dailyDownloadCount, err := GetDailyDownloadCount(supplierName, publicIP, whichDay...)
  52. if err != nil {
  53. return 0, err
  54. }
  55. err = GetDb().Update(
  56. func(tx *badger.Txn) error {
  57. var err error
  58. key := []byte(MergeBucketAndKeyName(BucketNamePrefixSupplierDailyDownloadCounter, KeyName))
  59. dailyDownloadCount += 1
  60. value, err := my_util.IntToBytes(dailyDownloadCount)
  61. if err != nil {
  62. return err
  63. }
  64. // 因为已经查询了一次,确保一定存在,所以直接更新+1,TTL 多加 5s 确保今天过去,暂时去除 TTL uint32(restOfDaySecond.Seconds())+5
  65. // .WithTTL(2 * time.Second)
  66. e := badger.NewEntry(key, value)
  67. err = tx.SetEntry(e)
  68. if err != nil {
  69. return err
  70. }
  71. return nil
  72. })
  73. if err != nil {
  74. return 0, err
  75. }
  76. return dailyDownloadCount, nil
  77. }
  78. // DelDailyDownloadCount 不是定版。这里需要搜索前缀去删除,因为引入了 Public IP 的分类
  79. func DelDailyDownloadCount(supplierName string, whichDay ...string) error {
  80. KeyName := ""
  81. if len(whichDay) > 0 {
  82. KeyName = supplierName + "_" + whichDay[0]
  83. } else {
  84. nowTime := time.Now()
  85. KeyName = supplierName + "_" + nowTime.Format("2006-01-02")
  86. }
  87. err := GetDb().Update(
  88. func(tx *badger.Txn) error {
  89. var err error
  90. key := []byte(MergeBucketAndKeyName(BucketNamePrefixSupplierDailyDownloadCounter, KeyName))
  91. // 因为已经查询了一次,确保一定存在,所以直接更新+1,TTL 多加 5s 确保今天过去,暂时去除 TTL uint32(restOfDaySecond.Seconds())+5
  92. if err = tx.Delete(key); err != nil {
  93. return err
  94. }
  95. return nil
  96. })
  97. if err != nil {
  98. return err
  99. }
  100. return nil
  101. }
  102. // GetDailyVideoSubDownloadCount 今日有那些视频进行了字幕的下载
  103. func GetDailyVideoSubDownloadCount() {
  104. }
  105. func getDailyVideoSubDownloadCount(tx *badger.Txn, KeyName string) {
  106. }