diff --git a/adn/tools/cli/digis.rb b/adn/tools/cli/digis.rb new file mode 100644 index 00000000..9d6f41fc --- /dev/null +++ b/adn/tools/cli/digis.rb @@ -0,0 +1,87 @@ +#!/usr/bin/env ruby +# encoding: utf-8 +# +# Helper para el ámbito dtic-DIGIs: Automatización de Zoom a YouTube (P2603.01) + +require 'optparse' + +module ADN + class SubcomandoDigis + def initialize(args, logger = nil) + @args = args + @logger = logger + end + + def ejecutar + if @args.empty? || @args.first == "help" + mostrar_ayuda + return + end + + comando = @args.shift + case comando + when "zoom:sync" + ejecutar_zoom_sync(@args) + else + puts "✗ Subcomando desconocido en digis: #{comando}" + mostrar_ayuda + exit 1 + end + end + + private + + def ejecutar_zoom_sync(args) + options = {} + OptionParser.new do |opts| + opts.banner = "Uso: ./adn/tools/run digis zoom:sync [opciones]" + opts.on("--dry-run", "Ejecución simulada sin subir ni modificar datos") do + options[:dry_run] = true + end + end.parse!(args) + + puts "ℹ Iniciando sincronización Zoom -> YouTube..." + puts " (Modo Dry Run)" if options[:dry_run] + + # 1. Source (Leer Google Sheets esperando URLs) + puts "⏳ [1/4] Consultando grabaciones pendientes en Spreadsheet..." + # TODO: Conectar API Google Sheets (requiere candado) + # mock temporal: + pendientes = [] + + if pendientes.empty? + puts "✓ No hay grabaciones nuevas para procesar." + else + puts "ℹ Se encontraron #{pendientes.size} grabaciones." + + # 2. Download (Descargar MP4 a docs/ambito/dtic-DIGIs/temp) + puts "⏳ [2/4] Ejecutando descargas asíncronas..." + # TODO: Lógica robusta de descarga + + # 3. Upload (Subir a YouTube en modo oculto) + puts "⏳ [3/4] Autenticando YouTube Data API e inyectando videos..." + # TODO: Lógica de subida OAuth2 + + # 4. Return (Devolver URL a Spreadsheet) + puts "⏳ [4/4] Actulizando spreadsheet con los YouTube IDs retornados..." + # TODO: Update Google Sheet API + end + + puts "✓ Sincronización finalizada exitosamente." + end + + def mostrar_ayuda + puts "Herramienta ADN - Gestión del Ámbito dtic-DIGIs" + puts "=================================================" + puts "" + puts "Uso: ./adn/tools/run digis [opciones]" + puts "" + puts "Subcomandos disponibles:" + puts " zoom:sync Sincroniza grabaciones nuevas de Zoom hacia YouTube" + puts "" + puts "Ejemplos:" + puts " $ ./adn/tools/run digis zoom:sync --dry-run" + puts "" + end + end +end diff --git a/adn/tools/run b/adn/tools/run index 015bc30b..ff0e14c3 100755 --- a/adn/tools/run +++ b/adn/tools/run @@ -76,6 +76,7 @@ require_relative 'cli/ambitos' require_relative 'cli/msp' require_relative 'cli/wzombi' require_relative 'cli/dasuten' +require_relative 'cli/digis' require_relative 'proy/proy' # ─── CLI Principal ────────────────────────────────────────────────────── @@ -156,6 +157,8 @@ class ADNCLI ADN::SubcomandoWZombi.new(args, @logger).ejecutar when 'dasuten' ADN::SubcomandoDasuten.new(args, @logger).ejecutar + when 'digis' + ADN::SubcomandoDigis.new(args, @logger).ejecutar else @logger.error("Subcomando desconocido: #{subcomando}") puts "#{Color::RED}✗ Subcomando desconocido: '#{subcomando}'#{Color::RESET}"