Changeset View
Changeset View
Standalone View
Standalone View
src/services/lastfm/LastFmTreeModel.cpp
Context not available. | |||||
41 | setupModelData( m_rootItem ); | 41 | setupModelData( m_rootItem ); | ||
---|---|---|---|---|---|
42 | 42 | | |||
43 | QNetworkReply *reply; | 43 | QNetworkReply *reply; | ||
44 | reply = m_user.getNeighbours(); | | |||
45 | connect(reply, &QNetworkReply::finished, this, &LastFmTreeModel::slotAddNeighbors ); | | |||
46 | 44 | | |||
47 | reply = m_user.getFriends(); | 45 | reply = m_user.getFriends(); | ||
48 | connect( reply, &QNetworkReply::finished, this, &LastFmTreeModel::slotAddFriends ); | 46 | connect( reply, &QNetworkReply::finished, this, &LastFmTreeModel::slotAddFriends ); | ||
Context not available. | |||||
59 | delete m_rootItem; | 57 | delete m_rootItem; | ||
60 | } | 58 | } | ||
61 | 59 | | |||
62 | void | | |||
63 | LastFmTreeModel::slotAddNeighbors() | | |||
64 | { | | |||
65 | QNetworkReply *reply = qobject_cast<QNetworkReply *>( sender() ); | | |||
66 | if( !reply ) | | |||
67 | { | | |||
68 | debug() << __PRETTY_FUNCTION__ << "null reply!"; | | |||
69 | return; | | |||
70 | } | | |||
71 | reply->deleteLater(); | | |||
72 | | ||||
73 | lastfm::XmlQuery lfm; | | |||
74 | if( lfm.parse( reply->readAll() ) ) | | |||
75 | { | | |||
76 | QList<lastfm::XmlQuery> children = lfm[ "neighbours" ].children( "user" ); | | |||
77 | int start = m_myNeighbors->childCount(); | | |||
78 | QModelIndex parent = index( m_myNeighbors->row(), 0 ); | | |||
79 | beginInsertRows( parent, start, start + children.size() ); | | |||
80 | | ||||
81 | foreach( const lastfm::XmlQuery &e, children ) | | |||
82 | { | | |||
83 | const QString name = e[ "name" ].text(); | | |||
84 | | ||||
85 | LastFmTreeItem* neighbor = new LastFmTreeItem( mapTypeToUrl(LastFm::NeighborsChild, name), | | |||
86 | LastFm::NeighborsChild, name, m_myNeighbors ); | | |||
87 | QUrl avatarUrl( e[ QLatin1String("image size=small") ].text() ); | | |||
88 | if( !avatarUrl.isEmpty() ) | | |||
89 | neighbor->setAvatarUrl( avatarUrl ); | | |||
90 | | ||||
91 | m_myNeighbors->appendChild( neighbor ); | | |||
92 | appendUserStations( neighbor, name ); | | |||
93 | } | | |||
94 | | ||||
95 | endInsertRows(); | | |||
96 | emit dataChanged( parent, parent ); | | |||
97 | } | | |||
98 | else | | |||
99 | { | | |||
100 | debug() << "Got exception in parsing from last.fm:" << lfm.parseError().message(); | | |||
101 | return; | | |||
102 | } | | |||
103 | } | | |||
104 | | ||||
105 | void | 60 | void | ||
106 | LastFmTreeModel::slotAddFriends() | 61 | LastFmTreeModel::slotAddFriends() | ||
107 | { | 62 | { | ||
Context not available. | |||||
239 | // beginInsertRows(). | 194 | // beginInsertRows(). | ||
240 | LastFmTreeItem* personal = new LastFmTreeItem( mapTypeToUrl( LastFm::UserChildPersonal, user ), | 195 | LastFmTreeItem* personal = new LastFmTreeItem( mapTypeToUrl( LastFm::UserChildPersonal, user ), | ||
241 | LastFm::UserChildPersonal, i18n( "Personal Radio" ), item ); | 196 | LastFm::UserChildPersonal, i18n( "Personal Radio" ), item ); | ||
242 | LastFmTreeItem* neigh = new LastFmTreeItem( mapTypeToUrl( LastFm::UserChildNeighborhood, user ), | | |||
243 | LastFm::UserChildNeighborhood, i18n( "Neighborhood" ), item ); | | |||
244 | item->appendChild( personal ); | 197 | item->appendChild( personal ); | ||
245 | item->appendChild( neigh ); | | |||
246 | } | 198 | } | ||
247 | 199 | | |||
248 | void | 200 | void | ||
Context not available. | |||||
288 | 240 | | |||
289 | // these 2 categories have a chance to be updated: | 241 | // these 2 categories have a chance to be updated: | ||
290 | QList<LastFmTreeItem *> categories; | 242 | QList<LastFmTreeItem *> categories; | ||
291 | categories << m_myFriends << m_myNeighbors; | 243 | categories << m_myFriends; | ||
292 | 244 | | |||
293 | // now go through all children of the categories and notify view as appropriate | 245 | // now go through all children of the categories and notify view as appropriate | ||
294 | foreach( LastFmTreeItem *category, categories ) | 246 | foreach( LastFmTreeItem *category, categories ) | ||
Context not available. | |||||
359 | return i18n( "My Radio Station" ); | 311 | return i18n( "My Radio Station" ); | ||
360 | case MixRadio: | 312 | case MixRadio: | ||
361 | return i18n( "My Mix Radio" ); | 313 | return i18n( "My Mix Radio" ); | ||
362 | case NeighborhoodRadio: | | |||
363 | return i18n( "My Neighborhood" ); | | |||
364 | // case RecentlyPlayed: return tr("Recently Played"); | | |||
365 | // case RecentlyLoved: return tr("Recently Loved"); | | |||
366 | // case RecentlyBanned: return tr("Recently Banned"); | | |||
367 | case TopArtists: | 314 | case TopArtists: | ||
368 | return i18n( "My Top Artists" ); | 315 | return i18n( "My Top Artists" ); | ||
369 | case MyTags: | 316 | case MyTags: | ||
370 | return i18n( "My Tags" ); | 317 | return i18n( "My Tags" ); | ||
371 | case Friends: | 318 | case Friends: | ||
372 | return i18n( "Friends" ); | 319 | return i18n( "Friends" ); | ||
373 | case Neighbors: | | |||
374 | return i18n( "Neighbors" ); | | |||
375 | // case History: return tr("History"); | | |||
376 | | ||||
377 | // case RecentlyPlayedTrack: return m_played.value( index.row() ); | | |||
378 | // case RecentlyLovedTrack: return m_loved.value( index.row() ); | | |||
379 | // case RecentlyBannedTrack: return m_banned.value( index.row() ); | | |||
380 | // case MyTagsChild: return m_tags.value( index.row() ); | | |||
381 | case FriendsChild: | 320 | case FriendsChild: | ||
382 | case ArtistsChild: | 321 | case ArtistsChild: | ||
383 | case NeighborsChild: | | |||
384 | case UserChildPersonal: | 322 | case UserChildPersonal: | ||
385 | case UserChildNeighborhood: | | |||
386 | case MyTagsChild: | 323 | case MyTagsChild: | ||
387 | return i->data(); | 324 | return i->data(); | ||
388 | default: | 325 | default: | ||
Context not available. | |||||
400 | return QIcon::fromTheme( "lastfm-personal-radio-amarok" ); | 337 | return QIcon::fromTheme( "lastfm-personal-radio-amarok" ); | ||
401 | case MixRadio: | 338 | case MixRadio: | ||
402 | return QIcon::fromTheme( "lastfm-mix-radio-amarok" ); | 339 | return QIcon::fromTheme( "lastfm-mix-radio-amarok" ); | ||
403 | case NeighborhoodRadio: | | |||
404 | return QIcon::fromTheme( "lastfm-neighbour-radio-amarok" ); | | |||
405 | // case RecentlyPlayed: return QIcon::fromTheme( "lastfm-recent-tracks-amarok" ); | | |||
406 | // case RecentlyLoved: return QIcon::fromTheme( "lastfm-recently-loved-amarok" ); | | |||
407 | // case RecentlyBanned: return QIcon::fromTheme( "lastfm-recently-banned-amarok" ); | | |||
408 | case MyTags: | 340 | case MyTags: | ||
409 | return QIcon::fromTheme( "lastfm-my-tags-amarok" ); | 341 | return QIcon::fromTheme( "lastfm-my-tags-amarok" ); | ||
410 | case Friends: | 342 | case Friends: | ||
411 | return QIcon::fromTheme( "lastfm-my-friends-amarok" ); | 343 | return QIcon::fromTheme( "lastfm-my-friends-amarok" ); | ||
412 | case Neighbors: | | |||
413 | return QIcon::fromTheme( "lastfm-my-neighbours-amarok" ); | | |||
414 | 344 | | |||
415 | case RecentlyPlayedTrack: | 345 | case RecentlyPlayedTrack: | ||
416 | Q_FALLTHROUGH(); | 346 | Q_FALLTHROUGH(); | ||
Context not available. | |||||
425 | return avatar( i->data().toString(), i->avatarUrl() ); | 355 | return avatar( i->data().toString(), i->avatarUrl() ); | ||
426 | case UserChildPersonal: | 356 | case UserChildPersonal: | ||
427 | return QIcon::fromTheme( "lastfm-personal-radio-amarok" ); | 357 | return QIcon::fromTheme( "lastfm-personal-radio-amarok" ); | ||
428 | case UserChildNeighborhood: | | |||
429 | return QIcon::fromTheme( "lastfm-neighbour-radio-amarok" ); | | |||
430 | | ||||
431 | case NeighborsChild: | | |||
432 | return avatar( i->data().toString(), i->avatarUrl() ); | | |||
433 | 358 | | |||
434 | case HistoryStation: | 359 | case HistoryStation: | ||
435 | return QIcon::fromTheme( "icon_radio" ); | 360 | return QIcon::fromTheme( "icon_radio" ); | ||
Context not available. | |||||
446 | case LastFm::MyRecommendations: | 371 | case LastFm::MyRecommendations: | ||
447 | case LastFm::PersonalRadio: | 372 | case LastFm::PersonalRadio: | ||
448 | case LastFm::MixRadio: | 373 | case LastFm::MixRadio: | ||
449 | case LastFm::NeighborhoodRadio: | | |||
450 | case LastFm::FriendsChild: | 374 | case LastFm::FriendsChild: | ||
451 | case LastFm::NeighborsChild: | | |||
452 | case LastFm::MyTagsChild: | 375 | case LastFm::MyTagsChild: | ||
453 | case LastFm::ArtistsChild: | 376 | case LastFm::ArtistsChild: | ||
454 | case LastFm::UserChildPersonal: | 377 | case LastFm::UserChildPersonal: | ||
455 | case LastFm::UserChildNeighborhood: | | |||
456 | return QVariant::fromValue( i->track() ); | 378 | return QVariant::fromValue( i->track() ); | ||
457 | default: | 379 | default: | ||
458 | break; | 380 | break; | ||
Context not available. | |||||
477 | case MyRecommendations: | 399 | case MyRecommendations: | ||
478 | case PersonalRadio: | 400 | case PersonalRadio: | ||
479 | case MixRadio: | 401 | case MixRadio: | ||
480 | case NeighborhoodRadio: | | |||
481 | case RecentlyPlayedTrack: | 402 | case RecentlyPlayedTrack: | ||
482 | case RecentlyLovedTrack: | 403 | case RecentlyLovedTrack: | ||
483 | case RecentlyBannedTrack: | 404 | case RecentlyBannedTrack: | ||
484 | case MyTagsChild: | 405 | case MyTagsChild: | ||
485 | case FriendsChild: | 406 | case FriendsChild: | ||
486 | case ArtistsChild: | 407 | case ArtistsChild: | ||
487 | case NeighborsChild: | | |||
488 | case HistoryStation: | 408 | case HistoryStation: | ||
489 | case UserChildPersonal: | 409 | case UserChildPersonal: | ||
490 | case UserChildNeighborhood: | | |||
491 | flags |= Qt::ItemIsSelectable; | 410 | flags |= Qt::ItemIsSelectable; | ||
492 | break; | 411 | break; | ||
493 | 412 | | |||
Context not available. | |||||
498 | switch( i->type() ) | 417 | switch( i->type() ) | ||
499 | { | 418 | { | ||
500 | case UserChildPersonal: | 419 | case UserChildPersonal: | ||
501 | case UserChildNeighborhood: | | |||
502 | case MyTagsChild: | 420 | case MyTagsChild: | ||
503 | case ArtistsChild: | 421 | case ArtistsChild: | ||
504 | case MyRecommendations: | 422 | case MyRecommendations: | ||
505 | case PersonalRadio: | 423 | case PersonalRadio: | ||
506 | case MixRadio: | 424 | case MixRadio: | ||
507 | case NeighborhoodRadio: | | |||
508 | flags |= Qt::ItemIsDragEnabled; | 425 | flags |= Qt::ItemIsDragEnabled; | ||
509 | 426 | | |||
510 | default: | 427 | default: | ||
Context not available. | |||||
572 | parent->appendChild( new LastFmTreeItem( mapTypeToUrl( LastFm::MyRecommendations ), LastFm::MyRecommendations, parent ) ); | 489 | parent->appendChild( new LastFmTreeItem( mapTypeToUrl( LastFm::MyRecommendations ), LastFm::MyRecommendations, parent ) ); | ||
573 | parent->appendChild( new LastFmTreeItem( mapTypeToUrl( LastFm::PersonalRadio ), LastFm::PersonalRadio, parent ) ); | 490 | parent->appendChild( new LastFmTreeItem( mapTypeToUrl( LastFm::PersonalRadio ), LastFm::PersonalRadio, parent ) ); | ||
574 | parent->appendChild( new LastFmTreeItem( mapTypeToUrl( LastFm::MixRadio ), LastFm::MixRadio, parent ) ); | 491 | parent->appendChild( new LastFmTreeItem( mapTypeToUrl( LastFm::MixRadio ), LastFm::MixRadio, parent ) ); | ||
575 | parent->appendChild( new LastFmTreeItem( mapTypeToUrl( LastFm::NeighborhoodRadio ), LastFm::NeighborhoodRadio, parent ) ); | | |||
576 | 492 | | |||
577 | m_myTopArtists = new LastFmTreeItem( LastFm::TopArtists, parent ); | 493 | m_myTopArtists = new LastFmTreeItem( LastFm::TopArtists, parent ); | ||
578 | parent->appendChild( m_myTopArtists ); | 494 | parent->appendChild( m_myTopArtists ); | ||
Context not available. | |||||
583 | m_myFriends = new LastFmTreeItem( LastFm::Friends, parent ); | 499 | m_myFriends = new LastFmTreeItem( LastFm::Friends, parent ); | ||
584 | parent->appendChild( m_myFriends ); | 500 | parent->appendChild( m_myFriends ); | ||
585 | 501 | | |||
586 | m_myNeighbors = new LastFmTreeItem( LastFm::Neighbors, parent ); | | |||
587 | parent->appendChild( m_myNeighbors ); | | |||
588 | } | 502 | } | ||
589 | 503 | | |||
590 | QString | 504 | QString | ||
Context not available. | |||||
599 | return "lastfm://user/" + encoded_username + "/personal"; | 513 | return "lastfm://user/" + encoded_username + "/personal"; | ||
600 | case MixRadio: | 514 | case MixRadio: | ||
601 | return "lastfm://user/" + encoded_username + "/mix"; | 515 | return "lastfm://user/" + encoded_username + "/mix"; | ||
602 | case NeighborhoodRadio: | | |||
603 | return "lastfm://user/" + encoded_username + "/neighbours"; | | |||
604 | case MyTagsChild: | 516 | case MyTagsChild: | ||
605 | return "lastfm://usertags/" + encoded_username + "/" + QUrl::toPercentEncoding( key ); | 517 | return "lastfm://usertags/" + encoded_username + "/" + QUrl::toPercentEncoding( key ); | ||
606 | case FriendsChild: | 518 | case FriendsChild: | ||
607 | return "lastfm://user/" + QUrl::toPercentEncoding( key ) + "/personal"; | 519 | return "lastfm://user/" + QUrl::toPercentEncoding( key ) + "/personal"; | ||
608 | case ArtistsChild: | 520 | case ArtistsChild: | ||
609 | return "lastfm://artist/" + QUrl::toPercentEncoding( key ) + "/similarartists"; | 521 | return "lastfm://artist/" + QUrl::toPercentEncoding( key ) + "/similarartists"; | ||
610 | case NeighborsChild: | | |||
611 | return "lastfm://user/" + QUrl::toPercentEncoding( key ) + "/personal"; | | |||
612 | case UserChildPersonal: | 522 | case UserChildPersonal: | ||
613 | return "lastfm://user/" + QUrl::toPercentEncoding( key ) + "/personal"; | 523 | return "lastfm://user/" + QUrl::toPercentEncoding( key ) + "/personal"; | ||
614 | case UserChildNeighborhood: | | |||
615 | return "lastfm://user/" + QUrl::toPercentEncoding( key ) + "/neighbours"; | | |||
616 | default: | 524 | default: | ||
617 | return ""; | 525 | return ""; | ||
618 | } | 526 | } | ||
Context not available. |