/* Sets current thumbnail content to the specified playlist entry. * Returns true if content is valid. * > Note: It is always best to use playlists when setting * thumbnail content, since there is no guarantee that the * corresponding menu entry label will contain a useful * identifier (it may be 'tainted', e.g. with the current * core name). 'Real' labels should be extracted from source */ bool menu_thumbnail_set_content_playlist(menu_thumbnail_path_data_t *path_data, playlist_t *playlist, size_t idx) { const char *content_path = NULL; const char *content_label = NULL; const char *core_name = NULL; const char *db_name = NULL; const struct playlist_entry *entry = NULL; if (!path_data) return false; /* When content is updated, must regenerate right/left * thumbnail paths */ path_data->right_path[0] = '\0'; path_data->left_path[0] = '\0'; /* 'Reset' path_data content strings */ path_data->content_path[0] = '\0'; path_data->content_label[0] = '\0'; path_data->content_core_name[0] = '\0'; path_data->content_db_name[0] = '\0'; path_data->content_img[0] = '\0'; if (!playlist) return false; if (idx >= playlist_get_size(playlist)) return false; /* Read playlist values */ playlist_get_index(playlist, idx, &entry); content_path = entry->path; content_label = entry->label; core_name = entry->core_name; db_name = entry->db_name; /* Content without a path is invalid by definition */ if (string_is_empty(content_path)) return false; /* Cache content path * (This is required for imageviewer, history and favourites content) */ strlcpy(path_data->content_path, content_path, sizeof(path_data->content_path)); /* Cache core name * (This is required for imageviewer content) */ if (!string_is_empty(core_name)) strlcpy(path_data->content_core_name, core_name, sizeof(path_data->content_core_name)); /* Get content label */ if (!string_is_empty(content_label)) strlcpy(path_data->content_label, content_label, sizeof(path_data->content_label)); else fill_short_pathname_representation(path_data->content_label, content_path, sizeof(path_data->content_label)); /* Determine content image name */ fill_content_img(path_data); /* Redundant error check... */ if (string_is_empty(path_data->content_img)) return false; /* Thumbnail image name is done -> now check if * per-content database name is defined */ if (!string_is_empty(db_name)) { /* Hack: There is only one MAME thumbnail repo, * so filter any input starting with 'MAME...' */ if (strncmp(db_name, "MAME", 4) == 0) strlcpy(path_data->content_db_name, "MAME", sizeof(path_data->content_db_name)); else { char *db_name_no_ext = NULL; char tmp_buf[PATH_MAX_LENGTH]; tmp_buf[0] = '\0'; /* Remove .lpl extension * > path_remove_extension() requires a char * (not const) * so have to use a temporary buffer... */ strlcpy(tmp_buf, db_name, sizeof(tmp_buf)); db_name_no_ext = path_remove_extension(tmp_buf); if (!string_is_empty(db_name_no_ext)) strlcpy(path_data->content_db_name, db_name_no_ext, sizeof(path_data->content_db_name)); else strlcpy(path_data->content_db_name, tmp_buf, sizeof(path_data->content_db_name)); } } return true; }
QVector<QHash<QString, QString> > MainWindow::getPlaylistItems(QString pathString) { QByteArray pathArray; QVector<QHash<QString, QString> > items; const char *pathData = NULL; playlist_t *playlist = NULL; unsigned playlistSize = 0; unsigned i = 0; pathArray.append(pathString); pathData = pathArray.constData(); playlist = playlist_init(pathData, COLLECTION_SIZE); playlistSize = playlist_get_size(playlist); for (i = 0; i < playlistSize; i++) { const char *path = NULL; const char *label = NULL; const char *core_path = NULL; const char *core_name = NULL; const char *crc32 = NULL; const char *db_name = NULL; QHash<QString, QString> hash; playlist_get_index(playlist, i, &path, &label, &core_path, &core_name, &crc32, &db_name); if (string_is_empty(path)) continue; else hash["path"] = path; hash["index"] = QString::number(i); if (string_is_empty(label)) { hash["label"] = path; hash["label_noext"] = path; } else { hash["label"] = label; hash["label_noext"] = label; } if (!string_is_empty(core_path)) hash["core_path"] = core_path; if (!string_is_empty(core_name)) hash["core_name"] = core_name; if (!string_is_empty(crc32)) hash["crc32"] = crc32; if (!string_is_empty(db_name)) { hash["db_name"] = db_name; hash["db_name"].remove(file_path_str(FILE_PATH_LPL_EXTENSION)); } items.append(hash); } playlist_free(playlist); playlist = NULL; return items; }