Skip to content

Latest commit

 

History

History
107 lines (75 loc) · 5.51 KB

File metadata and controls

107 lines (75 loc) · 5.51 KB

ZYouTube Eklentisi — 5 Kronik Hata Düzeltme Walkthrough

Özet

8 dosyada toplam 5 kronik hata ve UI/UX iyileştirmesi kalıcı olarak düzeltildi. Build hatasız tamamlandı.


1. Çift Dilli Transkript Hatası

Dosya: TranscriptTab.tsx

Kök Neden: İki fetch çağrısı aynı AbortController'ı paylaşıyordu. İlk çağrı tamamlandığında ikinci de abort olabiliyordu. İngilizce fetch başarısız olduğunda tüm component crash oluyordu. Segment eşleşmesi index-based'di (güvenilmez).

Yapılan Değişiklikler:

  • İki fetch için bağımsız AbortController'lar oluşturuldu, parent signal'a bağlandı
  • İngilizce fetch try/catch ile sarıldı — başarısız olursa sadece uyarı gösterilir
  • Segment eşleşmesi startTimeMs tabanlı en yakın zaman damgası eşleşmesine güncellendi (5s tolerans)
  • dualLangWarning state'i eklendi ve UI'da uyarı mesajı gösterildi

2. Gemini Web Otomasyonu Hatası

Dosya: gemini-content-script.ts

Kök Neden: execCommand('insertText') arka plan sekmelerinde çalışmıyor. Yapıştırma doğrulaması (input as HTMLInputElement).value?.trim().length ile TypeError riski taşıyordu. findSendButton selector'ları güncel Gemini UI ile uyumsuzdu.

Yapılan Değişiklikler:

  • Metin yerleştirme ayrı bir fonksiyona (insertTextIntoInput) ayrıldı
  • Yapıştırma kontrolü hasContent() ile güvenli hale getirildi (optional chaining)
  • İlk deneme başarısız olursa sekme aktif edilerek yeniden deneme mekanizması eklendi
  • findSendButton 6 farklı selector stratejisi ile güncellendi (data-testid, aria-label, SVG icon tespiti)
  • isStreamingActive genişletildi (Gemini'nin yeni animasyon göstergeleri)
  • waitForResponse 120 saniyeye çıkarıldı, stabil eşik 4'e artırıldı, ilk içerik bekleme döngüsü eklendi

3. Tab Manager ve Controller

Dosyalar: tab-manager.ts, controller.ts

Kök Neden: openGemTab her zaman yeni sekme açıyordu (mevcut sekmeleri yeniden kullanmıyordu). Sekme arka planda açılıyordu (active: false) bu da DOM etkileşimini engelliyordu. Controller content script inject kontrolü yapmıyordu.

Yapılan Değişiklikler:

  • openGemTab mevcut sekmeleri yeniden kullanacak şekilde güncellendi (newChatPerVideo=false ise)
  • Sekme artık aktif olarak açılıyor (active: true) — execCommand güvenilirliği için kritik
  • Controller'a content script inject kontrolü (chrome.scripting.executeScript) eklendi
  • Sayfa yüklendikten sonra 2 saniye ek bekleme eklendi (DOM hazırlığı için)
  • Tab load timeout 20 saniyeye artırıldı
  • waiting_response status emit eklendi

4. Özet CSS/UI Üst Üste Binme Hatası

Dosyalar: SummaryTab.tsx, content-panel.css

Kök Neden: renderSimpleMarkdown liste desteği yoktu. whiteSpace: 'pre-wrap' ile HTML block elementleri çift boşluk yaratıyordu. Heading stilleri eksikti. word-break yoktu.

Yapılan Değişiklikler (renderSimpleMarkdown):

  • Unordered list desteği (- item<ul><li>)
  • Ordered list desteği (1. item<ol><li>)
  • Code block desteği (``` → <pre class="zy-code-block">)
  • Inline code desteği (`<code class="zy-inline-code">)
  • Horizontal rule desteği (---<hr>)
  • Paragraf sarmalama ve düzgün <br> dönüşümü
  • CSS class tabanlı stiller (zy-heading, zy-paragraph, vb.)

Yapılan Değişiklikler (CSS):

  • whiteSpace: 'pre-wrap' kaldırıldı, CSS class'ları ile değiştirildi
  • word-break: break-word ve overflow-wrap: break-word eklendi
  • Kapsamlı heading boyutları ve spacing
  • Liste stilleri (disc, decimal)
  • Code block styling (monospace font, background, border)
  • Scrollbar styling
  • Typography normalization

5. API Timeout ve Rate Limit Hataları

Dosya: openai-compatible-provider.ts

Kök Neden: Default timeout 120s yeterli değildi. Abort listener memory leak'e neden oluyordu. 429 Rate Limit sonrası retry yoktu. NVIDIA reasoning_content hata fırlatıyordu. Hata mesajları yetersizdi.

Yapılan Değişiklikler:

  • Default timeout 180 saniyeye artırıldı, minimum 60s garanti
  • 429 Rate Limit için tek seferlik retry (retry-after header'ına göre bekleme)
  • 503 Service Unavailable için tek seferlik retry (5s bekleme)
  • Abort listener { once: true } ve response sonrası removeEventListener ile temizleniyor
  • NVIDIA reasoning_content hata yerine content olarak kullanılıyor
  • Timeout hata mesajı kalan süre ve öneri içeriyor
  • Rate limit hata mesajı retry-after ve kalan istek bilgisi içeriyor
  • Ağ hatası mesajı internet kontrolü önerisi ekliyor

Build Doğrulaması

✓ TypeScript compilation — 0 hata
✓ Vite build — 66 module, 2.70s
✓ 12 output dosyası üretildi

Bilinen uyarı (mevcut, değişiklikten bağımsız): registry.ts dynamic/static import karışıklığı — mevcut davranışı etkilemez.