// RegistryPlugins.cpp

#include "StdAfx.h"

/*
#include "../../../Windows/DLL.h"
#include "../../../Windows/FileFind.h"
#include "../../../Windows/PropVariant.h"

#include "IFolder.h"
*/
#include "RegistryPlugins.h"

// using namespace NWindows;
// using namespace NFile;

/*
typedef UINT32 (WINAPI * Func_GetPluginProperty)(PROPID propID, PROPVARIANT *value);

static bool ReadPluginInfo(CPluginInfo &plugin, bool needCheckDll)
{
  if (needCheckDll)
  {
    NDLL::CLibrary lib;
    if (!lib.LoadEx(plugin.FilePath, LOAD_LIBRARY_AS_DATAFILE))
      return false;
  }
  NDLL::CLibrary lib;
  if (!lib.Load(plugin.FilePath))
    return false;
  const
  Func_GetPluginProperty
     f_GetPluginProperty = ZIP7_GET_PROC_ADDRESS(
  Func_GetPluginProperty, lib.Get_HMODULE(),
      "GetPluginProperty");
  if (!f_GetPluginProperty)
    return false;

  NCOM::CPropVariant prop;
  if (f_GetPluginProperty(NPlugin::kType, &prop) != S_OK)
    return false;
  if (prop.vt == VT_EMPTY)
    plugin.Type = kPluginTypeFF;
  else if (prop.vt == VT_UI4)
    plugin.Type = (EPluginType)prop.ulVal;
  else
    return false;
  prop.Clear();
  
  if (f_GetPluginProperty(NPlugin::kName, &prop) != S_OK)
    return false;
  if (prop.vt != VT_BSTR)
    return false;
  plugin.Name = prop.bstrVal;
  prop.Clear();
  
  if (f_GetPluginProperty(NPlugin::kClassID, &prop) != S_OK)
    return false;
  if (prop.vt == VT_EMPTY)
    plugin.ClassID_Defined = false;
  else if (prop.vt != VT_BSTR)
    return false;
  else
  {
    plugin.ClassID_Defined = true;
    plugin.ClassID = *(const GUID *)(const void *)prop.bstrVal;
  }
  prop.Clear();
  return true;
*/
  
/*
{
  if (f_GetPluginProperty(NPlugin::kOptionsClassID, &prop) != S_OK)
    return false;
  if (prop.vt == VT_EMPTY)
    plugin.OptionsClassID_Defined = false;
  else if (prop.vt != VT_BSTR)
    return false;
  else
  {
    plugin.OptionsClassID_Defined = true;
    plugin.OptionsClassID = *(const GUID *)(const void *)prop.bstrVal;
  }
}
*/

    /*
    {
      // very old 7-zip used agent plugin in "7-zip.dll"
      // but then agent code was moved to 7zfm.
      // so now we don't need to load "7-zip.dll" here
      CPluginInfo plugin;
      plugin.FilePath = baseFolderPrefix + FTEXT("7-zip.dll");
      if (::ReadPluginInfo(plugin, false))
      if (plugin.Type == kPluginTypeFF)
        plugins.Add(plugin);
    }
    */
    /*
    FString folderPath = NDLL::GetModuleDirPrefix();
    folderPath += "Plugins" STRING_PATH_SEPARATOR;
    NFind::CEnumerator enumerator;
    enumerator.SetDirPrefix(folderPath);
    NFind::CFileInfo fi;
    while (enumerator.Next(fi))
    {
      if (fi.IsDir())
        continue;
      CPluginInfo plugin;
      plugin.FilePath = folderPath + fi.Name;
      if (::ReadPluginInfo(plugin, true))
      if (plugin.Type == kPluginTypeFF)
        plugins.Add(plugin);
    }
    */

  /*
  ReadPluginInfoList(plugins);
  for (unsigned i = 0; i < plugins.Size();)
    if (plugins[i].Type != kPluginTypeFF)
      plugins.Delete(i);
    else
      i++;
  */

/*
void ReadFileFolderPluginInfoList(CObjectVector<CPluginInfo> &plugins)
{
  plugins.Clear();
  {
  }

  {
    CPluginInfo &plugin = plugins.AddNew();
    // p.FilePath.Empty();
    plugin.Type = kPluginTypeFF;
    plugin.Name = "7-Zip";
    // plugin.ClassID = CLSID_CAgentArchiveHandler;
    // plugin.ClassID_Defined = true;
    // plugin.ClassID_Defined = false;
    // plugin.OptionsClassID_Defined = false;
  }
}
*/
