示例#1
0
void CUDisks2Provider::ParseInterface(const char *object, const char *iface, DBusMessageIter *propsIter)
{
  if (strcmp(iface, UDISKS2_INTERFACE_DRIVE) == 0)
  {
    auto *drive = new Drive(object);
    auto f = std::bind(&CUDisks2Provider::ParseDriveProperty, this, std::placeholders::_1,
                       std::placeholders::_2, std::placeholders::_3);
    ParseProperties(drive, propsIter, f);
    DriveAdded(drive);
  }
  else if (strcmp(iface, UDISKS2_INTERFACE_BLOCK) == 0)
  {
    auto *block = new Block(object);
    auto f = std::bind(&CUDisks2Provider::ParseBlockProperty, this, std::placeholders::_1,
                       std::placeholders::_2, std::placeholders::_3);
    ParseProperties(block, propsIter, f);
    BlockAdded(block);
  }
  else if (strcmp(iface, UDISKS2_INTERFACE_FILESYSTEM) == 0)
  {
    auto *fs = new Filesystem(object);
    auto f = std::bind(&CUDisks2Provider::ParseFilesystemProperty, this, std::placeholders::_1,
                       std::placeholders::_2, std::placeholders::_3);
    ParseProperties(fs, propsIter, f);
    FilesystemAdded(fs);
  }
}
示例#2
0
/*
 * Start rainbow session
 */
NS_IMETHODIMP
MediaRecorder::BeginSession(
    nsIPropertyBag2 *prop,
    nsIDOMCanvasRenderingContext2D *ctx,
    nsIMediaStateObserver *obs
)
{
    canvas = ctx;
    observer = obs;
    ParseProperties(prop);
    
    if (m_session) {
        NS_DispatchToMainThread(new MediaCallback(
            observer, "error", "session already in progress"
        ));
        return NS_ERROR_FAILURE;
    }
    
    PR_CreateThread(
        PR_SYSTEM_THREAD,
        MediaRecorder::BeginSessionThread, this,
        PR_PRIORITY_NORMAL,
        PR_GLOBAL_THREAD,
        PR_JOINABLE_THREAD, 0
    );
    return NS_OK;
}
示例#3
0
/*
 * Start recording to file
 */
NS_IMETHODIMP
MediaRecorder::RecordToFile(
    nsIPropertyBag2 *prop,
    nsIDOMCanvasRenderingContext2D *ctx,
    nsILocalFile *file,
    nsIMediaStateObserver *obs
)
{
    nsresult rv;
    ParseProperties(prop);
    
    canvas = ctx;
    observer = obs;
    
    /* Get a file stream from the local file */
    nsCOMPtr<nsIFileOutputStream> stream(
        do_CreateInstance("@mozilla.org/network/file-output-stream;1")
    );
    pipeStream = do_QueryInterface(stream, &rv);
    if (NS_FAILED(rv)) return rv;
    rv = stream->Init(file, -1, -1, 0);
    if (NS_FAILED(rv)) return rv;

    thread = PR_CreateThread(
        PR_SYSTEM_THREAD,
        MediaRecorder::Record, this,
        PR_PRIORITY_NORMAL,
        PR_GLOBAL_THREAD,
        PR_JOINABLE_THREAD, 0
    );
    
    return NS_OK;
}
示例#4
0
bool CUDisks2Provider::FilesystemPropertiesChanged(const char *object, DBusMessageIter *propsIter, IStorageEventsCallback *callback)
{
  if (m_filesystems.count(object) > 0)
  {
    auto fs = m_filesystems[object];
    CLog::Log(LOGDEBUG, LOGDBUS, "UDisks2: Before update: %s", fs->toString());
    bool wasMounted = fs->m_isMounted;
    auto ParseFilesystemProperty = std::bind(&CUDisks2Provider::ParseFilesystemProperty, this,
                                             std::placeholders::_1,
                                             std::placeholders::_2, std::placeholders::_3);
    ParseProperties(fs, propsIter, ParseFilesystemProperty);
    CLog::Log(LOGDEBUG, LOGDBUS, "UDisks2: After update: %s", fs->toString());

    if (!wasMounted && fs->m_isMounted && fs->IsApproved())
    {
      CLog::Log(LOGINFO, "UDisks2: Added %s", fs->m_mountPoint);
      if (callback)
        callback->OnStorageAdded(fs->GetDisplayName(), fs->m_mountPoint);
      return true;
    }
    else if (wasMounted && !fs->m_isMounted)
    {
      CLog::Log(LOGINFO, "UDisks2: Removed %s", fs->m_block->m_device);
      if (callback)
        callback->OnStorageSafelyRemoved(fs->GetDisplayName());
      return true;
    }
  }
  return false;
}
示例#5
0
  bool BodyMeshLoader::ParseBone (iDocumentNode* node, iLoaderContext* ldr_context,
				  CS::Animation::iBodySkeleton* skeleton)
  {
    // parse bone name
    const char* name = node->GetAttributeValue ("name");
    if (!name)
    {
      synldr->ReportError (msgid, node, "No name set for bone");
      return false;
    }

    CS::Animation::BoneID id = skeleton->GetSkeletonFactory ()->FindBone (name);
    if (id == CS::Animation::InvalidBoneID)
    {
      synldr->ReportError (msgid, node, "No bone with name %s in skeleton factory",
			   name);
      return false;
    }

    // create body bone
    CS::Animation::iBodyBone* bone = skeleton->CreateBodyBone (id);

    // parse child nodes
    csRef<iDocumentNodeIterator> it = node->GetNodes ();
    while (it->HasNext ())
    {
      csRef<iDocumentNode> child = it->Next ();
      if (child->GetType () != CS_NODE_ELEMENT) continue;
      const char* value = child->GetValue ();
      csStringID id = xmltokens.Request (value);
      switch (id)
      {
      case XMLTOKEN_PROPERTIES:
        if (!ParseProperties (child, bone))
          return false;
        break;

      case XMLTOKEN_COLLIDERS:
        if (!ParseColliders (child, ldr_context, bone))
          return false;
        break;

      case XMLTOKEN_JOINT:
        if (!ParseJoint (child, bone))
          return false;
        break;

      default:
        synldr->ReportBadToken (child);
        return false;
      }
    }

    return true;
  }
示例#6
0
bool CUDisks2Provider::BlockPropertiesChanged(const char *object, DBusMessageIter *propsIter)
{
  if (m_blocks.count(object) > 0)
  {
    auto block = m_blocks[object];
    CLog::Log(LOGDEBUG, LOGDBUS, "UDisks2: Before update: %s", block->toString());
    auto ParseBlockProperty = std::bind(&CUDisks2Provider::ParseBlockProperty, this, std::placeholders::_1,
                                        std::placeholders::_2, std::placeholders::_3);
    ParseProperties(block, propsIter, ParseBlockProperty);
    CLog::Log(LOGDEBUG, LOGDBUS, "UDisks2: After update: %s", block->toString());
  }
  return false;
}
示例#7
0
文件: rules.cpp 项目: josephnoir/kwm
internal bool
KwmParseRule(std::string RuleSym, window_rule *Rule)
{
    tokenizer Tokenizer = {};
    Tokenizer.At = const_cast<char*>(RuleSym.c_str());

    bool Result = true;
    bool Parsing = true;
    while(Parsing)
    {
        token Token = GetToken(&Tokenizer);
        switch(Token.Type)
        {
            case Token_EndOfStream:
            {
                Parsing = false;
            } break;
            case Token_Unknown:
            {
            } break;
            case Token_Identifier:
            {
                if(TokenEquals(Token, "owner"))
                    Result = Result && ParseIdentifier(&Tokenizer, &Rule->Owner);
                else if(TokenEquals(Token, "name"))
                    Result = Result && ParseIdentifier(&Tokenizer, &Rule->Name);
                else if(TokenEquals(Token, "role"))
                    Result = Result && ParseIdentifier(&Tokenizer, &Rule->Role);
                else if(TokenEquals(Token, "crole"))
                    Result = Result && ParseIdentifier(&Tokenizer, &Rule->CustomRole);
                else if(TokenEquals(Token, "properties"))
                    Result = Result && ParseProperties(&Tokenizer, &Rule->Properties);
                else if(TokenEquals(Token, "except"))
                    Result = Result && ParseIdentifier(&Tokenizer, &Rule->Except);
            } break;
            default: { } break;
        }
    }

    return Result;
}