Example #1
0
void gToxFileRecv::resume() {
    if (m_state != PAUSED) {
        return;
    }
    m_state = RECVING;
    if (m_file.file_size == m_position) {
        cancel();

        std::clog << "Friend " << m_file.nr <<
                     " File " << m_file.file_number <<
                     " " << m_position << "/" << m_file.file_size << std::endl;

        observer_notify(ToxEvent(EventFileProgress{
                                     this,
                                     m_file.nr,
                                     m_file.kind,
                                     m_file.file_number,
                                     m_position,
                                     m_file.file_size
                                 }));

        if (m_file.kind == TOX_FILE_KIND_AVATAR) {
            WidgetAvatar::set_avatar(observable(),
                                     m_path,
                                     WidgetAvatar::get_avatar(m_path, true));
        }

        return;
    }
    tox().file_control(m_file.nr, m_file.file_number, TOX_FILE_CONTROL_RESUME);
}
Example #2
0
/*!
 * Function which is used for notify all the observers.
 *
 * \param this_ptr - A pointer to the subject.
 * \param msg - A pointer to the message that is sent to the observers.
 */
int subject_notify(subject_t *this_ptr, void *msg)
{
    int status = SUBJECT_SUCESS;

    if (this_ptr != NULL) {
        observer_t *current;

        queue_first(&this_ptr->queue);
        while((current = queue_get_current(&this_ptr->queue)) != NULL) {
            if (observer_notify(current, this_ptr, msg) != OBSERVER_SUCESS) {
                status = SUBJECT_MISSING_OBSERVER;
            }
            queue_next(&this_ptr->queue);
        }

    } else {
        status = SUBJECT_NULL;
    }
    return status;
}
Example #3
0
File: kbd.c Project: mtarek/BeRTOS
/**
 * This is the default key handler, called after
 * all other handlers have had their chance to
 * do their special processing. This handler
 * pushes all input in the keyboard FIFO buffer.
 */
static keymask_t kbd_defHandlerFunc(keymask_t key)
{
    if (key)
    {
        /* Force a single event in kbd buffer */
        kbd_buf = key;
        kbd_cnt = 1;

#if CONFIG_KBD_OBSERVER
        observer_notify(&kbd_subject, KBD_EVENT_KEY, &key);
#endif

#if CONFIG_KBD_BEEP
        if (!(key & K_REPEAT))
            buz_beep(KBD_BEEP_TIME);
#endif
    }

    /* Eat all input */
    return 0;
}
Example #4
0
void gToxFileRecv::observer_handle(const ToxEvent& ev) {
    if (ev.type() != typeid(Toxmm::EventFileRecvChunk)) {
        return;
    }
    auto data = ev.get<Toxmm::EventFileRecvChunk>();
    if (data.nr != m_file.nr && data.file_number != m_file.file_number) {
        return;
    }

    if (m_fd == -1) {
        return;
    }

    //Handle download
    std::clog << "Recv fd " << m_fd << std::endl;
    auto ret = write(m_fd, data.file_data.data(), data.file_data.size());
    if (ret != ssize_t(data.file_data.size())) {
        std::clog << Glib::strerror(errno) << std::endl;
        throw std::runtime_error("gToxFileRecv couldn't write file");
    }

    m_position += data.file_data.size();

    std::clog << "Friend " << m_file.nr <<
                 " File " << m_file.file_number <<
                 " " << m_position << "/" << m_file.file_size << std::endl;

    observer_notify(ToxEvent(EventFileProgress{
                                 this,
                                 m_file.nr,
                                 m_file.kind,
                                 m_file.file_number,
                                 m_position,
                                 m_file.file_size
                             }));
}