Example #1
0
Library::Library(BackgroundThread<Database>* db_thread, TaskManager* task_manager,
                 QObject *parent)
  : QObject(parent),
    task_manager_(task_manager),
    backend_(NULL),
    model_(NULL),
    watcher_factory_(new BackgroundThreadFactoryImplementation<LibraryWatcher, LibraryWatcher>),
    watcher_(NULL)
{
  backend_ = new LibraryBackend;
  backend()->moveToThread(db_thread);

  backend_->Init(db_thread->Worker(), kSongsTable, kDirsTable, kSubdirsTable, kFtsTable);

  using smart_playlists::Generator;
  using smart_playlists::GeneratorPtr;
  using smart_playlists::QueryGenerator;
  using smart_playlists::Search;
  using smart_playlists::SearchTerm;

  model_ = new LibraryModel(backend_, task_manager_, this);
  model_->set_show_smart_playlists(true);
  model_->set_default_smart_playlists(LibraryModel::DefaultGenerators()
    << (LibraryModel::GeneratorList()
      << GeneratorPtr(new QueryGenerator(QT_TRANSLATE_NOOP("Library", "50 random tracks"), Search(
                  Search::Type_All, Search::TermList(),
                  Search::Sort_Random, SearchTerm::Field_Title, 50)))
      << GeneratorPtr(new QueryGenerator(QT_TRANSLATE_NOOP("Library", "Ever played"), Search(
                  Search::Type_And, Search::TermList()
                    << SearchTerm(SearchTerm::Field_PlayCount, SearchTerm::Op_GreaterThan, 0),
                  Search::Sort_Random, SearchTerm::Field_Title)))
      << GeneratorPtr(new QueryGenerator(QT_TRANSLATE_NOOP("Library", "Never played"), Search(
                  Search::Type_And, Search::TermList()
                    << SearchTerm(SearchTerm::Field_PlayCount, SearchTerm::Op_Equals, 0),
                  Search::Sort_Random, SearchTerm::Field_Title)))
      << GeneratorPtr(new QueryGenerator(QT_TRANSLATE_NOOP("Library", "Last played"), Search(
                  Search::Type_All, Search::TermList(),
                  Search::Sort_FieldDesc, SearchTerm::Field_LastPlayed)))
      << GeneratorPtr(new QueryGenerator(QT_TRANSLATE_NOOP("Library", "Most played"), Search(
                  Search::Type_All, Search::TermList(),
                  Search::Sort_FieldDesc, SearchTerm::Field_PlayCount)))
      << GeneratorPtr(new QueryGenerator(QT_TRANSLATE_NOOP("Library", "Favourite tracks"), Search(
                  Search::Type_All, Search::TermList(),
                  Search::Sort_FieldDesc, SearchTerm::Field_Score)))
      << GeneratorPtr(new QueryGenerator(QT_TRANSLATE_NOOP("Library", "Newest tracks"), Search(
                  Search::Type_All, Search::TermList(),
                  Search::Sort_FieldDesc, SearchTerm::Field_DateCreated)))
    ) << (LibraryModel::GeneratorList()
      << GeneratorPtr(new QueryGenerator(QT_TRANSLATE_NOOP("Library", "All tracks"), Search(
                  Search::Type_All, Search::TermList(),
                  Search::Sort_FieldAsc, SearchTerm::Field_Artist, -1)))
      << GeneratorPtr(new QueryGenerator(QT_TRANSLATE_NOOP("Library", "Least favourite tracks"), Search(
                  Search::Type_Or, Search::TermList()
                    << SearchTerm(SearchTerm::Field_Rating, SearchTerm::Op_LessThan, 0.6)
                    << SearchTerm(SearchTerm::Field_SkipCount, SearchTerm::Op_GreaterThan, 4),
                  Search::Sort_FieldDesc, SearchTerm::Field_SkipCount)))
    ) << (LibraryModel::GeneratorList()
      << GeneratorPtr(new QueryGenerator(QT_TRANSLATE_NOOP("Library", "Dynamic random mix"), Search(
                  Search::Type_All, Search::TermList(),
                  Search::Sort_Random, SearchTerm::Field_Title), true))
    )
  );

  // full rescan revisions
  full_rescan_revisions_[26] = tr("CUE sheet support");
}
Example #2
0
Library::Library(Application* app, QObject* parent)
    : QObject(parent),
      app_(app),
      backend_(nullptr),
      model_(nullptr),
      watcher_(nullptr),
      watcher_thread_(nullptr),
      save_statistics_in_files_(false),
      save_ratings_in_files_(false) {
  backend_ = new LibraryBackend;
  backend()->moveToThread(app->database()->thread());

  backend_->Init(app->database(), kSongsTable, kDirsTable, kSubdirsTable,
                 kFtsTable);

  using smart_playlists::Generator;
  using smart_playlists::GeneratorPtr;
  using smart_playlists::QueryGenerator;
  using smart_playlists::Search;
  using smart_playlists::SearchTerm;

  model_ = new LibraryModel(backend_, app_, this);
  model_->set_show_smart_playlists(true);
  model_->set_default_smart_playlists(
      LibraryModel::DefaultGenerators()
      << (LibraryModel::GeneratorList()
          << GeneratorPtr(new QueryGenerator(
                 QT_TRANSLATE_NOOP("Library", "50 random tracks"),
                 Search(Search::Type_All, Search::TermList(),
                        Search::Sort_Random, SearchTerm::Field_Title, 50)))
          << GeneratorPtr(new QueryGenerator(
                 QT_TRANSLATE_NOOP("Library", "Ever played"),
                 Search(Search::Type_And, Search::TermList() << SearchTerm(
                                              SearchTerm::Field_PlayCount,
                                              SearchTerm::Op_GreaterThan, 0),
                        Search::Sort_Random, SearchTerm::Field_Title)))
          << GeneratorPtr(new QueryGenerator(
                 QT_TRANSLATE_NOOP("Library", "Never played"),
                 Search(Search::Type_And, Search::TermList() << SearchTerm(
                                              SearchTerm::Field_PlayCount,
                                              SearchTerm::Op_Equals, 0),
                        Search::Sort_Random, SearchTerm::Field_Title)))
          << GeneratorPtr(new QueryGenerator(
                 QT_TRANSLATE_NOOP("Library", "Last played"),
                 Search(Search::Type_All, Search::TermList(),
                        Search::Sort_FieldDesc, SearchTerm::Field_LastPlayed)))
          << GeneratorPtr(new QueryGenerator(
                 QT_TRANSLATE_NOOP("Library", "Most played"),
                 Search(Search::Type_All, Search::TermList(),
                        Search::Sort_FieldDesc, SearchTerm::Field_PlayCount)))
          << GeneratorPtr(new QueryGenerator(
                 QT_TRANSLATE_NOOP("Library", "Favourite tracks"),
                 Search(Search::Type_All, Search::TermList(),
                        Search::Sort_FieldDesc, SearchTerm::Field_Score)))
          << GeneratorPtr(new QueryGenerator(
                 QT_TRANSLATE_NOOP("Library", "Newest tracks"),
                 Search(Search::Type_All, Search::TermList(),
                        Search::Sort_FieldDesc,
                        SearchTerm::Field_DateCreated))))
      << (LibraryModel::GeneratorList()
          << GeneratorPtr(new QueryGenerator(
                 QT_TRANSLATE_NOOP("Library", "All tracks"),
                 Search(Search::Type_All, Search::TermList(),
                        Search::Sort_FieldAsc, SearchTerm::Field_Artist, -1)))
          << GeneratorPtr(new QueryGenerator(
                 QT_TRANSLATE_NOOP("Library", "Least favourite tracks"),
                 Search(Search::Type_Or,
                        Search::TermList()
                            << SearchTerm(SearchTerm::Field_Rating,
                                          SearchTerm::Op_LessThan, 0.6)
                            << SearchTerm(SearchTerm::Field_SkipCount,
                                          SearchTerm::Op_GreaterThan, 4),
                        Search::Sort_FieldDesc, SearchTerm::Field_SkipCount))))
      << (LibraryModel::GeneratorList() << GeneratorPtr(new QueryGenerator(
              QT_TRANSLATE_NOOP("Library", "Dynamic random mix"),
              Search(Search::Type_All, Search::TermList(), Search::Sort_Random,
                     SearchTerm::Field_Title),
              true))));

  // full rescan revisions
  full_rescan_revisions_[26] = tr("CUE sheet support");
  full_rescan_revisions_[50] = tr("Original year tag support");

  ReloadSettings();
}