mirror of
				https://github.com/iv-org/invidious.git
				synced 2025-11-03 22:21:55 +00:00 
			
		
		
		
	Comments: Move ctoken functions to youtube.cr
This commit is contained in:
		@@ -23,18 +23,6 @@ Spectator.describe "Helper" do
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe "#produce_comment_continuation" do
 | 
			
		||||
    it "correctly produces a continuation token for comments" do
 | 
			
		||||
      expect(produce_comment_continuation("_cE8xSu6swE", "ADSJ_i2qvJeFtL0htmS5_K5Ctj3eGFVBMWL9Wd42o3kmUL6_mAzdLp85-liQZL0mYr_16BhaggUqX652Sv9JqV6VXinShSP-ZT6rL4NolPBaPXVtJsO5_rA_qE3GubAuLFw9uzIIXU2-HnpXbdgPLWTFavfX206hqWmmpHwUOrmxQV_OX6tYkM3ux3rPAKCDrT8eWL7MU3bLiNcnbgkW8o0h8KYLL_8BPa8LcHbTv8pAoNkjerlX1x7K4pqxaXPoyz89qNlnh6rRx6AXgAzzoHH1dmcyQ8CIBeOHg-m4i8ZxdX4dP88XWrIFg-jJGhpGP8JUMDgZgavxVx225hUEYZMyrLGler5em4FgbG62YWC51moLDLeYEA")).to eq("EkMSC19jRTh4U3U2c3dFyAEA4AEBogINKP___________wFAAMICHQgEGhdodHRwczovL3d3dy55b3V0dWJlLmNvbSIAGAYyjAMK9gJBRFNKX2kycXZKZUZ0TDBodG1TNV9LNUN0ajNlR0ZWQk1XTDlXZDQybzNrbVVMNl9tQXpkTHA4NS1saVFaTDBtWXJfMTZCaGFnZ1VxWDY1MlN2OUpxVjZWWGluU2hTUC1aVDZyTDROb2xQQmFQWFZ0SnNPNV9yQV9xRTNHdWJBdUxGdzl1eklJWFUyLUhucFhiZGdQTFdURmF2ZlgyMDZocVdtbXBId1VPcm14UVZfT1g2dFlrTTN1eDNyUEFLQ0RyVDhlV0w3TVUzYkxpTmNuYmdrVzhvMGg4S1lMTF84QlBhOExjSGJUdjhwQW9Oa2plcmxYMXg3SzRwcXhhWFBveXo4OXFObG5oNnJSeDZBWGdBenpvSEgxZG1jeVE4Q0lCZU9IZy1tNGk4WnhkWDRkUDg4WFdySUZnLWpKR2hwR1A4SlVNRGdaZ2F2eFZ4MjI1aFVFWVpNeXJMR2xlcjVlbTRGZ2JHNjJZV0M1MW1vTERMZVlFQSIPIgtfY0U4eFN1NnN3RTAAKBQ%3D")
 | 
			
		||||
 | 
			
		||||
      expect(produce_comment_continuation("_cE8xSu6swE", "ADSJ_i1yz21HI4xrtsYXVC-2_kfZ6kx1yjYQumXAAxqH3CAd7ZxKxfLdZS1__fqhCtOASRbbpSBGH_tH1J96Dxux-Qfjk-lUbupMqv08Q3aHzGu7p70VoUMHhI2-GoJpnbpmcOxkGzeIuenRS_ym2Y8fkDowhqLPFgsS0n4djnZ2UmC17F3Ch3N1S1UYf1ZVOc991qOC1iW9kJDzyvRQTWCPsJUPneSaAKW-Rr97pdesOkR4i8cNvHZRnQKe2HEfsvlJOb2C3lF1dJBfJeNfnQYeh5hv6_fZN7bt3-JL1Xk3Qc9NXNxmmbDpwAC_yFR8dthFfUJdyIO9Nu1D79MLYeR-H5HxqUJokkJiGIz4lTE_CXXbhAI")).to eq("EkMSC19jRTh4U3U2c3dFyAEA4AEBogINKP___________wFAAMICHQgEGhdodHRwczovL3d3dy55b3V0dWJlLmNvbSIAGAYyiQMK8wJBRFNKX2kxeXoyMUhJNHhydHNZWFZDLTJfa2ZaNmt4MXlqWVF1bVhBQXhxSDNDQWQ3WnhLeGZMZFpTMV9fZnFoQ3RPQVNSYmJwU0JHSF90SDFKOTZEeHV4LVFmamstbFVidXBNcXYwOFEzYUh6R3U3cDcwVm9VTUhoSTItR29KcG5icG1jT3hrR3plSXVlblJTX3ltMlk4ZmtEb3docUxQRmdzUzBuNGRqbloyVW1DMTdGM0NoM04xUzFVWWYxWlZPYzk5MXFPQzFpVzlrSkR6eXZSUVRXQ1BzSlVQbmVTYUFLVy1Scjk3cGRlc09rUjRpOGNOdkhaUm5RS2UySEVmc3ZsSk9iMkMzbEYxZEpCZkplTmZuUVllaDVodjZfZlpON2J0My1KTDFYazNRYzlOWE54bW1iRHB3QUNfeUZSOGR0aEZmVUpkeUlPOU51MUQ3OU1MWWVSLUg1SHhxVUpva2tKaUdJejRsVEVfQ1hYYmhBSSIPIgtfY0U4eFN1NnN3RTAAKBQ%3D")
 | 
			
		||||
 | 
			
		||||
      expect(produce_comment_continuation("29-q7YnyUmY", "")).to eq("EkMSCzI5LXE3WW55VW1ZyAEA4AEBogINKP___________wFAAMICHQgEGhdodHRwczovL3d3dy55b3V0dWJlLmNvbSIAGAYyFQoAIg8iCzI5LXE3WW55VW1ZMAAoFA%3D%3D")
 | 
			
		||||
 | 
			
		||||
      expect(produce_comment_continuation("CvFH_6DNRCY", "")).to eq("EkMSC0N2RkhfNkROUkNZyAEA4AEBogINKP___________wFAAMICHQgEGhdodHRwczovL3d3dy55b3V0dWJlLmNvbSIAGAYyFQoAIg8iC0N2RkhfNkROUkNZMAAoFA%3D%3D")
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe "#produce_channel_community_continuation" do
 | 
			
		||||
    it "correctly produces a continuation token for a channel community" do
 | 
			
		||||
      expect(produce_channel_community_continuation("UCCj956IF62FbT7Gouszaj9w", "Egljb21tdW5pdHm4")).to eq("4qmFsgIsEhhVQ0NqOTU2SUY2MkZiVDdHb3VzemFqOXcaEEVnbGpiMjF0ZFc1cGRIbTQ%3D")
 | 
			
		||||
 
 | 
			
		||||
@@ -87,47 +87,3 @@ def content_to_comment_html(content, video_id : String? = "")
 | 
			
		||||
 | 
			
		||||
  return html_array.join("").delete('\ufeff')
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def produce_comment_continuation(video_id, cursor = "", sort_by = "top")
 | 
			
		||||
  object = {
 | 
			
		||||
    "2:embedded" => {
 | 
			
		||||
      "2:string"    => video_id,
 | 
			
		||||
      "25:varint"   => 0_i64,
 | 
			
		||||
      "28:varint"   => 1_i64,
 | 
			
		||||
      "36:embedded" => {
 | 
			
		||||
        "5:varint" => -1_i64,
 | 
			
		||||
        "8:varint" => 0_i64,
 | 
			
		||||
      },
 | 
			
		||||
      "40:embedded" => {
 | 
			
		||||
        "1:varint" => 4_i64,
 | 
			
		||||
        "3:string" => "https://www.youtube.com",
 | 
			
		||||
        "4:string" => "",
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
    "3:varint"   => 6_i64,
 | 
			
		||||
    "6:embedded" => {
 | 
			
		||||
      "1:string"   => cursor,
 | 
			
		||||
      "4:embedded" => {
 | 
			
		||||
        "4:string" => video_id,
 | 
			
		||||
        "6:varint" => 0_i64,
 | 
			
		||||
      },
 | 
			
		||||
      "5:varint" => 20_i64,
 | 
			
		||||
    },
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  case sort_by
 | 
			
		||||
  when "top"
 | 
			
		||||
    object["6:embedded"].as(Hash)["4:embedded"].as(Hash)["6:varint"] = 0_i64
 | 
			
		||||
  when "new", "newest"
 | 
			
		||||
    object["6:embedded"].as(Hash)["4:embedded"].as(Hash)["6:varint"] = 1_i64
 | 
			
		||||
  else # top
 | 
			
		||||
    object["6:embedded"].as(Hash)["4:embedded"].as(Hash)["6:varint"] = 0_i64
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  continuation = object.try { |i| Protodec::Any.cast_json(i) }
 | 
			
		||||
    .try { |i| Protodec::Any.from_json(i) }
 | 
			
		||||
    .try { |i| Base64.urlsafe_encode(i) }
 | 
			
		||||
    .try { |i| URI.encode_www_form(i) }
 | 
			
		||||
 | 
			
		||||
  return continuation
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -4,9 +4,9 @@ module Invidious::Comments
 | 
			
		||||
  def fetch_youtube(id, cursor, format, locale, thin_mode, region, sort_by = "top")
 | 
			
		||||
    case cursor
 | 
			
		||||
    when nil, ""
 | 
			
		||||
      ctoken = produce_comment_continuation(id, cursor: "", sort_by: sort_by)
 | 
			
		||||
      ctoken = Comments.produce_continuation(id, cursor: "", sort_by: sort_by)
 | 
			
		||||
    when .starts_with? "ADSJ"
 | 
			
		||||
      ctoken = produce_comment_continuation(id, cursor: cursor, sort_by: sort_by)
 | 
			
		||||
      ctoken = Comments.produce_continuation(id, cursor: cursor, sort_by: sort_by)
 | 
			
		||||
    else
 | 
			
		||||
      ctoken = cursor
 | 
			
		||||
    end
 | 
			
		||||
@@ -203,4 +203,48 @@ module Invidious::Comments
 | 
			
		||||
 | 
			
		||||
    return response
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def produce_continuation(video_id, cursor = "", sort_by = "top")
 | 
			
		||||
    object = {
 | 
			
		||||
      "2:embedded" => {
 | 
			
		||||
        "2:string"    => video_id,
 | 
			
		||||
        "25:varint"   => 0_i64,
 | 
			
		||||
        "28:varint"   => 1_i64,
 | 
			
		||||
        "36:embedded" => {
 | 
			
		||||
          "5:varint" => -1_i64,
 | 
			
		||||
          "8:varint" => 0_i64,
 | 
			
		||||
        },
 | 
			
		||||
        "40:embedded" => {
 | 
			
		||||
          "1:varint" => 4_i64,
 | 
			
		||||
          "3:string" => "https://www.youtube.com",
 | 
			
		||||
          "4:string" => "",
 | 
			
		||||
        },
 | 
			
		||||
      },
 | 
			
		||||
      "3:varint"   => 6_i64,
 | 
			
		||||
      "6:embedded" => {
 | 
			
		||||
        "1:string"   => cursor,
 | 
			
		||||
        "4:embedded" => {
 | 
			
		||||
          "4:string" => video_id,
 | 
			
		||||
          "6:varint" => 0_i64,
 | 
			
		||||
        },
 | 
			
		||||
        "5:varint" => 20_i64,
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    case sort_by
 | 
			
		||||
    when "top"
 | 
			
		||||
      object["6:embedded"].as(Hash)["4:embedded"].as(Hash)["6:varint"] = 0_i64
 | 
			
		||||
    when "new", "newest"
 | 
			
		||||
      object["6:embedded"].as(Hash)["4:embedded"].as(Hash)["6:varint"] = 1_i64
 | 
			
		||||
    else # top
 | 
			
		||||
      object["6:embedded"].as(Hash)["4:embedded"].as(Hash)["6:varint"] = 0_i64
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    continuation = object.try { |i| Protodec::Any.cast_json(i) }
 | 
			
		||||
      .try { |i| Protodec::Any.from_json(i) }
 | 
			
		||||
      .try { |i| Base64.urlsafe_encode(i) }
 | 
			
		||||
      .try { |i| URI.encode_www_form(i) }
 | 
			
		||||
 | 
			
		||||
    return continuation
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user