فهرست منبع

feat: update print style

Mark24 2 سال پیش
والد
کامیت
036fb496ad
1فایلهای تغییر یافته به همراه148 افزوده شده و 0 حذف شده
  1. 148 0
      mac.rb

+ 148 - 0
mac.rb

@@ -0,0 +1,148 @@
+class RimeDeployError < StandardError
+end
+
+module FontStylePatch
+  RESET_COLOR = "\e[0m" #重置所有颜色和样式
+  COLORS = {
+    black: "\e[30m", #黑色文本
+    red: "\e[31m", #红色文本
+    green: "\e[32m", #绿色文本
+    yellow: "\e[33m", #黄色文本
+    blue: "\e[34m", #蓝色文本
+    carmine: "\e[35m", #洋红色文本
+    cyan: "\e[36m", #青色文本
+    white: "\e[37m" #白色文本
+  }
+  COLORS.keys.each do |color_name|
+    define_method(color_name) do
+      return "#{COLORS[color_name]}#{self}#{RESET_COLOR}"
+    end
+  end
+end
+
+class String
+  include FontStylePatch
+end
+
+class Job
+  attr_accessor :status
+  def initialize
+    @status = :waiting # :processing, :done, :fail
+  end
+  def intro
+    self.class.to_s
+  end
+  def call
+  end
+
+  def rollback
+  end
+
+  # def highlight(text)
+  #   puts text.green
+  # end
+
+  # def info(text)
+  #   puts text.blue
+  # end
+
+  # def status(text)
+  #   puts text.yellow
+  # end
+end
+
+class InstallRimeJob < Job
+  def call
+    puts "Job: InstallRimeJob".blue
+    sleep 1
+    # system("brew install --cask squirrel")
+    return :next
+  end
+end
+
+class BackupRimeConfigJob < Job
+  def call
+    puts "Job: BackupRimeConfigJob".blue
+    sleep 1
+    # system("mv ~/Library/Rime ~/Library/Rime.#{Time.now.to_i}.old")
+    return :next
+  end
+end
+
+class CloneConfigJob < Job
+  def call
+    puts "Job: CloneConfigJob".blue
+    sleep 1
+    # system(
+    #   "git clone --depth=1 https://github.com/Mark24Code/rime-ice.git ~/Library/Rime"
+    # )
+    return :next
+  end
+end
+
+class CopyCustomConfigJob < Job
+  def call
+    puts "Job: CopyCustomConfigJob".blue
+    sleep 1
+    # system("cp ./default.custom.yaml ~/Library/Rime/")
+    # system("cp ./squirrel.custom.yaml ~/Library/Rime/")
+    return :next
+  end
+end
+
+class MacOSJobGroup
+  def initialize(jobs)
+    @queue = []
+    jobs.each { |job| @queue << job.new }
+
+    @current_index = 0
+    @mode = :auto #:handle
+  end
+
+  def print_progress
+    system("clear")
+    puts "=== Rime Deploy ===="
+    @queue.each_with_index do |job, index|
+      job_id = "[%02d]" % (index + 1)
+      job_intro = job.intro.to_s.ljust(20).green
+      job_status = job.status
+      case job_status
+      when :waiting
+        job_status = job_status.to_s.white
+      when :processing
+        job_status = job_status.to_s.yellow
+      when :done
+        job_status = job_status.to_s.green
+      end
+      job_status = job_status.rjust(15)
+      puts "#{job_id} #{job_intro}\t#{job_status}"
+    end
+
+    if @current_index < @queue.length
+      puts "total: #{@queue.length}".ljust(10)
+      puts "Detail " + "-" * 20
+    end
+  end
+
+  def call
+    print_progress
+    while @current_index < @queue.length
+      current_job = @queue[@current_index]
+      current_job.status = :processing
+      print_progress
+      result = current_job.call
+
+      if result == :next
+        current_job.status = :done
+        @current_index += 1
+      else
+        # 失败处理
+      end
+      print_progress
+    end
+  end
+end
+
+MacOSJobGroup.new(
+  [InstallRimeJob, BackupRimeConfigJob, CloneConfigJob, CopyCustomConfigJob]
+).call