~xavi-garcia-mena/keeper/mcloud-provided-crash-test

« back to all changes in this revision

Viewing changes to src/helper/backup-helper.cpp

mergeĀ lp:~charlesk/keeper/lp-1614764-fix-excess-signal-subscriptions

Show diffs side-by-side

added added

removed removed

Lines of Context:
104
104
        storage_framework_socket_ = sf_socket;
105
105
 
106
106
        // listen for data uploaded
107
 
        QObject::connect(storage_framework_socket_.get(), &QLocalSocket::bytesWritten,
108
 
                         std::bind(&BackupHelperPrivate::on_data_uploaded, this, std::placeholders::_1)
109
 
                         );
 
107
        storage_framework_socket_connection_.reset(
 
108
            new QMetaObject::Connection(
 
109
                QObject::connect(
 
110
                    storage_framework_socket_.get(), &QLocalSocket::bytesWritten,
 
111
                    std::bind(&BackupHelperPrivate::on_data_uploaded, this, std::placeholders::_1)
 
112
                )
 
113
            ),
 
114
            [](QMetaObject::Connection* c){
 
115
                QObject::disconnect(*c);
 
116
            }
 
117
        );
110
118
 
111
119
        // TODO xavi is going to remove this line
112
120
        q_ptr->set_state(Helper::State::STARTED);
147
155
 
148
156
    void on_data_uploaded(qint64 n)
149
157
    {
150
 
        // TODO review this after checking if there's a bug in storage framework.
151
 
        // TODO The issue is that bytesWritten is called for every backup helper that was
152
 
        // TODO executed before.
153
 
//        n_uploaded_ += n;
 
158
        n_uploaded_ += n;
 
159
        q_ptr->record_data_transferred(n);
154
160
        qDebug("n_read %zu n_uploaded %zu (newly uploaded %zu)", size_t(n_read_), size_t(n_uploaded_), size_t(n));
 
161
        check_for_done();
155
162
        process_more();
156
163
    }
157
164
 
181
188
            if (n > 0) {
182
189
                upload_buffer_.remove(0, int(n));
183
190
                qDebug("upload_buffer_.size() is %zu after writing %zu to cloud", size_t(upload_buffer_.size()), size_t(n));
184
 
                n_uploaded_ += n;
185
 
                q_ptr->record_data_transferred(n);
186
191
                continue;
187
192
            }
188
193
            else {
209
214
        timer_->stop();
210
215
    }
211
216
 
212
 
    void wait_backup_socket_is_clear()
213
 
    {
214
 
        while (read_socket_->bytesAvailable())
215
 
        {
216
 
            process_more();
217
 
        }
218
 
    }
219
 
 
220
217
    void check_for_done()
221
218
    {
222
 
        wait_backup_socket_is_clear();
223
 
 
224
219
        if (n_uploaded_ == q_ptr->expected_size())
225
220
        {
226
221
            q_ptr->set_state(Helper::State::COMPLETE);
227
222
        }
228
 
        else if (read_error_ || write_error_ || n_uploaded_ != q_ptr->expected_size())
 
223
        else if (read_error_ || write_error_ || (n_uploaded_ > q_ptr->expected_size()))
229
224
        {
230
225
            q_ptr->set_state(Helper::State::FAILED);
231
226
        }
244
239
    BackupHelper * const q_ptr;
245
240
    QScopedPointer<QTimer> timer_;
246
241
    std::shared_ptr<QLocalSocket> storage_framework_socket_;
 
242
    std::shared_ptr<QMetaObject::Connection> storage_framework_socket_connection_;
247
243
    QScopedPointer<QLocalSocket> helper_socket_;
248
244
    QScopedPointer<QLocalSocket> read_socket_;
249
245
    QByteArray upload_buffer_;