<?xml version="1.0" encoding="utf-8"?>
<HmsMediaItem>
  <MediaType>1</MediaType>
  <ClassID>53</ClassID>
  <ItemID>db583df9-7aef-4ddc-a4f9-01ed1fa52f8a</ItemID>
  <ItemPath>http://www.aimp.ru/forum/index.php?PHPSESSID=a3c44f7du6s2kg884n62liti70&amp;action=dlattach;topic=22023.0;attach=51695</ItemPath>
  <ParentID>F38A68A9-EF1A-4862-972C-1E254946A010</ParentID>
  <Properties>
    <Property>
      <ID>4</ID>
      <Value>101.ru</Value>
    </Property>
    <Property>
      <ID>515</ID>
      <Value>1</Value>
    </Property>
    <Property>
      <ID>700</ID>
      <Value>0</Value>
    </Property>
    <Property>
      <ID>701</ID>
      <Value>-1</Value>
    </Property>
    <Property>
      <ID>702</ID>
      <Value>-1</Value>
    </Property>
    <Property>
      <ID>517</ID>
      <Value>578-720,722-1080,482-576,402-480,322-400,202-320,0-200</Value>
    </Property>
    <Property>
      <ID>518</ID>
      <Value>0</Value>
    </Property>
    <Property>
      <ID>512</ID>
      <Value>0</Value>
    </Property>
    <Property>
      <ID>532</ID>
      <Value>1</Value>
    </Property>
    <Property>
      <ID>553</ID>
      <Value>0</Value>
    </Property>
    <Property>
      <ID>522</ID>
      <Value>0</Value>
    </Property>
    <Property>
      <ID>245</ID>
      <Value>db583df9-7aef-4ddc-a4f9-01ed1fa52f8a</Value>
    </Property>
    <Property>
      <ID>93</ID>
      <Value>42793,0069451042</Value>
    </Property>
    <Property>
      <ID>525</ID>
      <Value>43088,609837581</Value>
    </Property>
    <Property>
      <ID>530</ID>
      <Value>int gnTotal=0;
// ----------------------------------------------------------------------------
void LoadPlaylist() {
  string sData, sLink, sName, sImg, sVal, spName, TSINDEXVALUE; THmsScriptMediaItem Item, tRootFolder; int i, iTmp;
  
  // Если ссылка плейлиста начинается на http, то скачиваем, если нет - загружаем как локальный файл
  if (LeftCopy(mpFilePath, 4)==&apos;http&apos;) sData = HmsDownloadUrl(mpFilePath, &apos;&apos;, true);  // Загрузка плейлиста из интернета
    else                                 sData = HmsStringFromFile(mpFilePath);         // Загрузка плейлиста с локального диска
    
  sData = HmsUtf8Decode(sData);   // Декодируем из UTF-8 кодировки
  
  tRootFolder = FolderItem;
  TStringList TSLINKS = TStringList.Create();
  TStringList TSINDEX = TStringList.Create();
  
  // Разрешаем создание дубликатов. Не работает, видимо неправильно делаю.
  TSLINKS.Duplicates=dupAccept;
  
  // Создаём объект для поиска по регулярному выражению (в C++Script символ \ экранирует, поэтому двойной)
  TRegExpr RE = TRegExpr.Create(&apos;#EXTINF:-1,(.*?)[\\r\\n]+(.*?)([\\r\\n]|$)&apos;);
  try {
    if (RE.Search(sData)) do {    // Запускаем поиск и создаём цикл, пока найдены совпадения
      sName = Trim(RE.Match(1));  // Получаем значение первой группировки регулярного выражения (первая строка после #EXTINF:)
      sLink = Trim(RE.Match(2));  // Получаем значение второй группировки регулярного выражения (вся вторая строка)
      sName = Trim(ReplaceStr(sName,&apos;=&apos;,&apos;&apos;)); // Убираем лишние знаки равенства (ну глючит с ними)
      sName = Lowercase(sName); // Все в строчные, иначе с папками накладки могут быть
      
      if (Pos(&apos;pcradio&apos;,sLink)) break; // Если ссылка на PC Radio - пропускаем ее
        
      // Костыль для ссылок с одинаковым названием
      if(TSLINKS.IndexOfName(sName) != -1) sName = sName + &apos; &apos; + Str(gnTotal);
      
      // Заполняем список название станции=сслыка на поток
      TSLINKS.Values[sName] = sLink;
      // Берем часть имени до первого пробела для формирования папок
      spName = ExtractStr(sName, &apos; &apos;, 0);
      // Заполняем индексный список имя папки=&lt;n&gt; или имя папки=&lt;n1&gt;+&lt;n2&gt;+&lt;nn&gt; 
      if (TSINDEX.IndexOfName(spName) == -1) TSINDEX.Values[spName] = &apos;&lt;&apos; + Str(gnTotal) + &apos;&gt;&apos;;
      else TSINDEX.Values[spName] = TSINDEX.Values[spName] + &apos;+&lt;&apos; + Str(gnTotal) + &apos;&gt;&apos;;
      gnTotal++;                  // Увеличиваем счетчик созданных ссылок
      
    } while (RE.SearchAgain());   // Повторяем цикл, пока найдены следующие совпадения
    
  } finally { RE.Free(); }        // Освобождаем объект из памяти, что бы ни случилось  
  
  // Перебираем индексный список и формируем ссылки (с папками или без)
  for (i = 0; i &lt;  TSINDEX.Count; i++) {
    TSINDEXVALUE = TSINDEX.Values[TSINDEX.Names[i]];
    if (Pos(&apos;+&apos;,TSINDEXVALUE) &gt; 0) {
      TRegExpr RE1 = TRegExpr.Create(&apos;&lt;([\\d]+)&gt;&apos;);
      try {
        if (RE1.Search(TSINDEXVALUE)) do {
          iTmp = StrToInt(Trim(RE1.Match(1)));
          Item = FolderItem.AddFolder(ExtractStr(TSLINKS.Names[iTmp],&apos; &apos;,0));
          CreateItems(Item, TSLINKS.Names[iTmp],TSLINKS.Values[TSLINKS.Names[iTmp]]);
        } while (RE1.SearchAgain());
      } finally { RE1.Free(); }
    } else {
      HmsRegExMatch(&apos;&lt;([\\d]+)&gt;&apos;,TSINDEXVALUE,spName);
      iTmp = StrToInt(Trim(spName));
      CreateItems(tRootFolder, TSLINKS.Names[iTmp],TSLINKS.Values[TSLINKS.Names[iTmp]]);
    }
  }
  TSLINKS.Free();
  TSINDEX.Free();
  
  HmsLogMessage(1, mpTitle+&apos;: создано ссылок &apos;+IntToStr(gnTotal));
}

void CreateItems(THmsScriptMediaItem aFolder, String aName, String aLink) {
  String sImg, sTmp;
  THmsScriptMediaItem Item;
  
  //Заглушка для иконки
  sImg = &apos;http://viscera.ru/music/img/glavnaya.jpg&apos;;
  
  // Создаём ссылку
  Item = HmsCreateMediaItem(aLink, aFolder.ItemID);
  Item[mpiTitle    ] = aName; // Наименование
  Item[mpiThumbnail] = sImg;  // Картинка
  Item[mpiAlbum] = aName;
  Item[mpiAuthor     ] = &apos;RadioSlyNet&apos;;
  Item[mpiAlbumArtist] = &apos;RadioSlyNet&apos;;
  
  //Дублируем настройки подкаста в ссылки
  
  if (mpDirectLink) {
    Item[mpiInternetItem] = &apos;1&apos;;
    Item[mpiDirectLink]   = &apos;1&apos;;          // Параметр "Передавать данную ссылку, как ссылку на медиаресурс
    Item[mpiMimeType]     = mpMimeType; // Тип MIME для ссылки
  }
}

///////////////////////////////////////////////////////////////////////////////
//                      Г Л А В Н А Я   П Р О Ц Е Д У Р А                    //
// ----------------------------------------------------------------------------
{
  FolderItem.DeleteChildItems(); // Удаляем созданные ранее ссылки
  LoadPlaylist();                // Вызов процедуры загрузки плейлиста и создания из него ссылок
}</Value>
    </Property>
    <Property>
      <ID>531</ID>
      <Value>C++Script</Value>
    </Property>
    <Property>
      <ID>43</ID>
      <Value>audio/mpeg</Value>
    </Property>
    <Property>
      <ID>55</ID>
      <Value>https://lh6.googleusercontent.com/sbrc0CQdzG6RSk6Fqw5o5evCkHk09p7Yh1WPzGEJgRSMVBI2k0DVe6HWXLrNawT2-v_vzT48deM=s640-h400-e365</Value>
    </Property>
    <Property>
      <ID>42</ID>
      <Value>4</Value>
    </Property>
  </Properties>
</HmsMediaItem>
