void ImportJson(COMMAND_T* pCommand) { char* selectedFile = BrowseForFiles("Select Auphonic JSON file", 0, 0, false, "Auphonic JSON (*.json)\0*.json\0All Files (*.*)\0*.*\0"); if((selectedFile != 0) && (strlen(selectedFile) > 0)) { std::string rawData = GetFileContents(std::string(selectedFile)); std::string errorMessage; json11::Json cookedData = json11::Json::parse(rawData, errorMessage); if(errorMessage.empty() == true) { std::map<std::string, std::set<ActivityItem>> trackActivities; const json11::Json statistics = cookedData["statistics"]; for(const json11::Json& track : statistics["tracks"].array_items()) { const std::string trackId = track["identifier"].string_value(); if(trackId.empty() == false) { std::set<ActivityItem> activities; for(const json11::Json& activity : track["activity"].array_items()) { const double begin = activity.array_items()[0].number_value(); const double end = activity.array_items()[1].number_value(); activities.insert(ActivityItem(begin, end)); } if(activities.empty() == false) { trackActivities.insert(std::map<std::string, std::set<ActivityItem>>::value_type(trackId, activities)); } else { ErrorMessage("No activities for track"); } } else { ErrorMessage("Found invalid track identifier"); } } std::map<std::string, MediaTrack*> reaperTracks; for(int i = 0; i < GetNumTracks(); ++i) { MediaTrack* reaperTrack = GetTrack(0, i); AssertTrue(reaperTrack != 0); std::string trackName = MediaTrack_GetStringProperty(reaperTrack, "P_NAME"); reaperTracks[trackName] = reaperTrack; } for(const std::map<std::string, std::set<ActivityItem>>::value_type& trackActivity : trackActivities) { const std::string& trackId = trackActivity.first; std::map<std::string, MediaTrack*>::iterator trackIterator = reaperTracks.find(trackId); if(trackIterator != reaperTracks.end()) { MediaTrack* reaperTrack = trackIterator->second; if(reaperTrack != 0) { MediaItem* reaperItem = AddMediaItemToTrack(reaperTrack); if(reaperItem != 0) { const std::set<ActivityItem>& activities = trackActivity.second; for(const ActivityItem& activity : activities) { SetMediaItemPosition(reaperItem, activity.Begin(), true); SetMediaItemLength(reaperItem, activity.Duration(), true); MediaItem_SetStringProperty(reaperItem, "P_NOTES", trackId); // int color = MediaTrack_GetIntProperty(reaperTrack, "I_CUSTOMCOLOR"); int color = MediaTrack_GetProperty<int>(reaperTrack, "I_CUSTOMCOLOR"); char buffer[4096] = {0}; sprintf(buffer, "%s (%.2fs)", trackId.c_str(), activity.Duration()); const char* activityLabel = AllocCopyString(buffer); AddProjectMarker2(0, true, activity.Begin(), activity.End(), activityLabel, 0, color); } } else { ErrorMessage("Failed to add activity"); } } else { ErrorMessage("Failed to find track"); } } } } else { ErrorMessage(errorMessage.c_str()); } } }
void InsertMarker(COMMAND_T* _ct) { AddProjectMarker2(NULL, false, (int)_ct->user && (GetPlayStateEx(NULL)&1) ? GetPlayPositionEx(NULL) : GetCursorPositionEx(NULL), 0.0, "", -1, 0); UpdateTimeline(); Undo_OnStateChangeEx2(NULL, SWS_CMD_SHORTNAME(_ct), UNDO_STATE_MISCCFG, -1); }
void MarkerItem::AddToProject() { AddProjectMarker2(NULL, m_bReg, m_dPos, m_dRegEnd, GetName(), m_num, m_iColor ? m_iColor | 0x1000000 : 0); }