{"record":{"id":"8bd53341357fb3c3","repo":"tonhowtf/omniget","slug":"dados-do-clip-incompletos-mod","errorCode":null,"errorMessage":"Dados do clip incompletos","messagePattern":"Dados do clip incompletos","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src-tauri/src/platforms/twitch/mod.rs","lineNumber":62,"sourceCode":"        let ytdlp_path = crate::core::ytdlp::ensure_ytdlp().await?;\n        let json = crate::core::ytdlp::get_video_info(&ytdlp_path, url, &[]).await?;\n        crate::platforms::generic_ytdlp::GenericYtdlpDownloader::parse_video_info(&json)\n    }\n\n    async fn native_get_media_info(&self, url: &str) -> anyhow::Result<MediaInfo> {\n        let slug =\n            Self::extract_clip_slug(url).ok_or_else(|| anyhow!(\"Could not extract clip slug\"))?;\n\n        let clip = self.fetch_clip_metadata(&slug).await?;\n\n        if clip.video_qualities.is_empty() {\n            return Err(anyhow!(\"No video quality available\"));\n        }\n\n        let broadcaster = clip\n            .broadcaster_login\n            .as_deref()\n            .ok_or_else(|| anyhow!(\"Dados do clip incompletos\"))?;\n\n        let token = self.fetch_access_token(&slug).await?;\n\n        let clip_title = clip.title.trim().to_string();\n\n        let available_qualities: Vec<VideoQuality> = clip\n            .video_qualities\n            .iter()\n            .map(|q| {\n                let height: u32 = q.quality.parse().unwrap_or(0);\n                let authenticated_url = Self::build_authenticated_url(&q.source_url, &token);\n                VideoQuality {\n                    label: format!(\"{}p\", q.quality),\n                    width: 0,\n                    height,\n                    url: authenticated_url,\n                    format: \"mp4\".to_string(),\n                }","sourceCodeStart":44,"sourceCodeEnd":80,"githubUrl":"https://github.com/tonhowtf/omniget/blob/8600b91f4246848bac346874daa9e61c1fc5677a/src-tauri/src/platforms/twitch/mod.rs#L44-L80","documentation":"A shape guard over clip metadata: fetch_clip_metadata succeeded but the parsed ClipMetadata is missing required fields (broadcaster, duration, thumbnail, etc.), so a MediaInfo cannot be built. The Twitch GQL response was truncated or changed schema — the slug itself was resolved fine.","triggerScenarios":"Thrown at src-tauri/src/platforms/twitch/mod.rs:62 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry — transient partial GQL responses do occur","Update the app so its GQL parsing matches Twitch's current schema","Fall back to the yt-dlp path for this clip if the native mode keeps failing"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"8600b91f4246848bac346874daa9e61c1fc5677a","analyzedAt":"2026-09-12T14:29:19.317Z","contentChangedAt":"2026-09-12T14:29:19.317Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}