update.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import {
  2. ModelProvider,
  3. StoreKey,
  4. } from "../constant";
  5. import { getClientConfig } from "../config/client";
  6. import { createPersistStore } from "../utils/store";
  7. import { clientUpdate } from "../utils";
  8. import ChatGptIcon from "../icons/chatgpt.png";
  9. import Locale from "../locales";
  10. import { ClientApi } from "../client/api";
  11. const ONE_MINUTE = 60 * 1000;
  12. const isApp = !!getClientConfig()?.isApp;
  13. function formatVersionDate(t: string) {
  14. const d = new Date(+t);
  15. const year = d.getUTCFullYear();
  16. const month = d.getUTCMonth() + 1;
  17. const day = d.getUTCDate();
  18. return [
  19. year.toString(),
  20. month.toString().padStart(2, "0"),
  21. day.toString().padStart(2, "0"),
  22. ].join("");
  23. }
  24. type VersionType = "date" | "tag";
  25. async function getVersion(type: VersionType) {
  26. // GitHub API calls removed - return current version
  27. return type === "date" ? getClientConfig()?.commitDate : getClientConfig()?.version;
  28. }
  29. export const useUpdateStore = createPersistStore(
  30. {
  31. versionType: "tag" as VersionType,
  32. lastUpdate: 0,
  33. version: "unknown",
  34. remoteVersion: "",
  35. used: 0,
  36. subscription: 0,
  37. lastUpdateUsage: 0,
  38. },
  39. (set, get) => ({
  40. formatVersion(version: string) {
  41. if (get().versionType === "date") {
  42. version = formatVersionDate(version);
  43. }
  44. return version;
  45. },
  46. async getLatestVersion(force = false) {
  47. const versionType = get().versionType;
  48. let version =
  49. versionType === "date"
  50. ? getClientConfig()?.commitDate
  51. : getClientConfig()?.version;
  52. set(() => ({ version }));
  53. const shouldCheck = Date.now() - get().lastUpdate > 2 * 60 * ONE_MINUTE;
  54. if (!force && !shouldCheck) return;
  55. set(() => ({
  56. lastUpdate: Date.now(),
  57. }));
  58. try {
  59. const remoteId = await getVersion(versionType);
  60. set(() => ({
  61. remoteVersion: remoteId,
  62. }));
  63. // Tauri notification removed - web only version
  64. console.log("[Got Upstream] ", remoteId);
  65. } catch (error) {
  66. console.error("[Fetch Upstream Commit Id]", error);
  67. }
  68. },
  69. async updateUsage(force = false) {
  70. // only support openai for now
  71. const overOneMinute = Date.now() - get().lastUpdateUsage >= ONE_MINUTE;
  72. if (!overOneMinute && !force) return;
  73. set(() => ({
  74. lastUpdateUsage: Date.now(),
  75. }));
  76. try {
  77. const api = new ClientApi(ModelProvider.GPT);
  78. const usage = await api.llm.usage();
  79. if (usage) {
  80. set(() => ({
  81. used: usage.used,
  82. subscription: usage.total,
  83. }));
  84. }
  85. } catch (e) {
  86. console.error((e as Error).message);
  87. }
  88. },
  89. }),
  90. {
  91. name: StoreKey.Update,
  92. version: 1,
  93. },
  94. );