288{
289 Writer& out =
args().output();
291
293 String sql = L""
294 "SELECT COALESCE(MAX(DIR_ID), 1000) FROM STOR_DIR"
295 ;
297 q.execute(sql);
298 q.fetch();
299 __dirId = q.fields()[0].asInt32();
300 }
301
303 String sql = L""
304 "SELECT COALESCE(MAX(FILE_ID), 10000) FROM STOR_FILE"
305 ;
307 q.execute(sql);
308 q.fetch();
310 }
311
316
317 String sql = L""
318 "INSERT INTO STOR_DIR ("
319 "DIR_ID, PATH, CREA_TS, MODI_TS"
320 ")"
321 "\nVALUES ("
322 ":DIR_ID, :PATH, :CREA_TS, :MODI_TS"
323 ")" ;
325 q.prepare(sql);
326 q.params()[0].setValue(
__dirId);
328 q.params()[2].setValue(now);
329 q.params()[3].setValue(now);
330 q.execute();
331
332 out << L
" INSERT STOR_DIR [" <<
__dirId << L
"]["
334 }
335
337 String sql = L""
338 "INSERT INTO STOR_FILE ("
339 "FILE_ID, NAME, USER_ID, STOR_ID, TYPE_ID"
340 ", DIR_ID, FILE_NM, FILE_SZ, FILE_AT, FILE_MT, FILE_CT, FILE_ER"
341 ", MEDI_FM, MEDI_WI, MEDI_HE, MEDI_DU, MEDI_NF"
342 ", READ_CO, CREA_TS, MODI_TS"
343 ")"
344 "\nVALUES ("
345 ":FILE_ID, :NAME, 0, 0, 0"
346 ", :DIR_ID, :FILE_NM, :FILE_SZ, :FILE_AT, :FILE_MT, :FILE_CT, :FILE_ER"
347 ", :MEDI_FM, :MEDI_WI, :MEDI_HE, :MEDI_DU, :MEDI_NF"
348 ", 0, :CREA_TS, :MODI_TS"
349 ")";
351 q.prepare(sql);
352 q.params().byName(L
"FILE_ID").setValue(
__fileId);
353 q.params().byName(L"NAME").setValue(_info.filename);
354 q.params().byName(L
"DIR_ID").setValue(
__dirId);
355 q.params().byName(L"FILE_NM").setValue(_info.filename);
356 q.params().byName(L"FILE_SZ").setValue(_info.size);
357 q.params().byName(L"FILE_AT").setValue(_info.atime);
358 q.params().byName(L"FILE_MT").setValue(_info.mtime);
359 q.params().byName(L"FILE_CT").setValue(_info.ctime);
360 q.params().byName(L"FILE_ER").setValue(_info.notes);
361 q.params().byName(L"MEDI_FM").setValue(_info.format);
362 q.params().byName(L"MEDI_WI").setValue(_info.width);
363 q.params().byName(L"MEDI_HE").setValue(_info.height);
364 q.params().byName(L"MEDI_DU").setValue(_info.duration);
365 q.params().byName(L"MEDI_NF").setValue(_info.inform);
366 q.params().byName(L"CREA_TS").setValue(now);
367 q.params().byName(L"MODI_TS").setValue(now);
368 q.execute();
369
370 out << L
" INSERT STOR_FILE [" <<
__fileId << L
"]["
371 << _info.filename << L
"]" <<
endl;
372
373 if (_info.id3v1.version() > 0) {
374 if (_info.id3v1.title().length() > 0) {
375 String sql = L""
376 "INSERT INTO ID3V1 ("
377 "FILE_ID, TITLE, ARTIST, ALBUM, YEAR_"
378 ", COMMENT_, TRACK, GENRE"
379 ")"
380 "\nVALUES ("
381 ":FILE_ID, :TITLE, :ARTIST, :ALBUM, :YEAR_"
382 ", :COMMENT_, :TRACK, :GENRE"
383 ")";
385 q.prepare(sql);
386 q.params().byName(L
"FILE_ID").setValue(
__fileId);
387 q.params().byName(L"TITLE").setValue(_info.id3v1.title());
388
389 if (_info.id3v1.artist().isEmpty())
390 q.params().byName(L"ARTIST").setNull();
391 else
392 q.params().byName(L"ARTIST").setValue(_info.id3v1.artist());
393
394 if (_info.id3v1.album().isEmpty())
395 q.params().byName(L"ALBUM").setNull();
396 else
397 q.params().byName(L"ALBUM").setValue(_info.id3v1.album());
398
399 if (_info.id3v1.year().isEmpty())
400 q.params().byName(L"YEAR_").setNull();
401 else
402 q.params().byName(L"YEAR_").setValue(_info.id3v1.year());
403
404 if (_info.id3v1.comment().isEmpty())
405 q.params().byName(L"COMMENT_").setNull();
406 else
407 q.params().byName(L"COMMENT_").setValue(_info.id3v1.comment());
408
409 q.params().byName(L"TRACK").setValue(_info.id3v1.track());
410 q.params().byName(L"GENRE").setValue(_info.id3v1.genre());
411 q.execute();
412
414 out << L
" INSERT ID3V1" <<
endl;
415 }
416 }
417 else {
418 args().errout() << L
"Title is NULL "
420 << L
" [" << _info.dirname << _info.filename << L
"]" <<
endl;
421 }
422 }
423
424 if (_info.id3v2.version() > 0) {
425 String sql = L""
426 "INSERT INTO ID3V2 ("
427 "FILE_ID, VERSION, FLAGS, SIZE_, FSBITS"
428 ")"
429 "\nVALUES ("
430 ":FILE_ID, :VERSION, :FLAGS, :SIZE_, :FSBITS"
431 ")";
433 q.prepare(sql);
434 q.params().byName(L
"FILE_ID").setValue(
__fileId);
435 q.params().byName(L"VERSION").setValue(_info.id3v2.version());
436 q.params().byName(L"FLAGS").setValue(_info.id3v2.flags());
437 q.params().byName(L"SIZE_").setValue(_info.id3v2.size());
438 q.params().byName(L"FSBITS").setValue(_info.id3v2.fsbits());
439 q.execute();
440
441 sql = L""
442 "INSERT INTO ID3V2_FRAME ("
443 "FILE_ID, NO_, FRAME_ID, SIZE_, FLAGS"
444 ", ENCODING, TYPE_, URL, DESCRIPTION, TEXT_, BINARY_"
445 ")"
446 "\nVALUES ("
447 ":FILE_ID, :NO_, :FRAME_ID, :SIZE_, :FLAGS"
448 ", :ENCODING, :TYPE_, :URL, :DESCRIPTION, :TEXT_, :BINARY_"
449 ")";
450 q.prepare(sql);
451 for (size_t i = 0; i < _info.id3v2.frames().size(); i++) {
452 ID3v2Frame& frame = *(ID3v2Frame*)_info.id3v2.frames()[i];
453 q.params().byName(L
"FILE_ID").setValue(
__fileId);
454 q.params().byName(L"NO_").setValue((int)(i + 1));
455 q.params().byName(L
"FRAME_ID").setValue(frame.
id());
456 q.params().byName(L
"SIZE_").setValue(frame.
size());
457 q.params().byName(L
"FLAGS").setValue(frame.
flags());
458 q.params().byName(L
"ENCODING").setValue(frame.
encoding());
459 q.params().byName(L
"TYPE_").setValue(frame.
type());
460
461 if (frame.
url().isEmpty())
462 q.params().byName(L"URL").setNull();
463 else
464 q.params().byName(L
"URL").setValue(frame.
url());
465
467 q.params().byName(L"DESCRIPTION").setNull();
468 else
469 q.params().byName(L
"DESCRIPTION").setValue(frame.
description());
470
471 if (frame.
text().isEmpty())
472 q.params().byName(L"TEXT_").setNull();
473 else
474 q.params().byName(L
"TEXT_").setValue(frame.
text());
475
476 if (frame.
binary().length() == 0 || 100 < frame.
binary().length())
477
478 q.params().byName(L"BINARY_").setNull();
479 else
480 q.params().byName(L
"BINARY_").setValue(frame.
binary());
481
482 q.execute();
483 }
484
486 out << L" INSERT ID3V2 ID3V2_FRAME["
487 << _info.id3v2.frames().size() << L
"]" <<
endl;
488 }
489 }
490
491 if (_info.apev2.version() > 0) {
492 String sql = L""
493 "INSERT INTO APE ("
494 "FILE_ID, VERSION, SIZE_, COUNT_, FLAGS"
495 ")"
496 "\nVALUES ("
497 ":FILE_ID, :VERSION, :SIZE_, :COUNT_, :FLAGS"
498 ")";
500 q.prepare(sql);
501 q.params().byName(L
"FILE_ID").setValue(
__fileId);
502 q.params().byName(L"VERSION").setValue(_info.apev2.version());
503 q.params().byName(L"SIZE_").setValue(_info.apev2.size());
504 q.params().byName(L"COUNT_").setValue(_info.apev2.count());
505 q.params().byName(L"FLAGS").setValue((int32_t)_info.apev2.flags());
506 q.execute();
507
508 sql = L""
509 "INSERT INTO APE_ITEM ("
510 "FILE_ID, NO_, SIZE_, FLAGS"
511 ", KEY_, VALUE_"
512 ")"
513 "\nVALUES ("
514 ":FILE_ID, :NO_, :SIZE_, :FLAGS"
515 ", :KEY_, :VALUE_"
516 ")";
517 q.prepare(sql);
518 for (size_t i = 0; i < _info.apev2.items().size(); i++) {
519 APEv2Item& item = *(APEv2Item*)_info.apev2.items()[i];
520 q.params().byName(L
"FILE_ID").setValue(
__fileId);
521 q.params().byName(L"NO_").setValue((int)(i + 1));
522 q.params().byName(L"SIZE_").setValue(item.size());
523 q.params().byName(L"FLAGS").setValue((int32_t)item.flags());
524 q.params().byName(L"KEY_").setValue(item.key());
525
526 if (item.value().isEmpty())
527 q.params().byName(L"VALUE_").setNull();
528 else
529 q.params().byName(L"VALUE_").setValue(item.value());
530
531 q.execute();
532 }
533
535 out << L" INSERT APE APE_ITEM["
536 << _info.apev2.items().size() << L
"]" <<
endl;
537 }
538 }
539}
static DateTime getCurrentLocalTime()
const String & url() const
const String & description() const
const String & text() const
const ByteString & binary() const
virtual String toString() const
const MainArguments & args() const