Пример #1
0
  // ClientTrack(int trackID, String trackName, String path, int albumID, int artistID,int length,
  // int trackNo) {
  public ArrayList<ClientTrack> matchLyrics(String searchLyrics, int artistID, int albumID) {
    CavaResultSet rs = trackDatabase.getLyricsSmart(artistID, albumID);
    ArrayList<ClientTrack> toReturn = new ArrayList<ClientTrack>();
    ClientTrack tempTrack;
    String lyrics, trackName, path;
    int trackID, _albumID, _artistID, length, trackNo;
    searchLyrics = cleanSearchTerm(searchLyrics);
    while (rs.fetchRow()) {
      lyrics = rs.fetchString(1);
      trackID = rs.fetchInt(2);
      trackName = rs.fetchString(3);
      path = rs.fetchString(4);
      _albumID = rs.fetchInt(5);
      _artistID = rs.fetchInt(6);
      length = rs.fetchInt(7);
      trackNo = rs.fetchInt(8);

      // System.out.println("LYRICS:\n|"+lyrics+"|");
      if (lyrics != null) {
        if (dmp.fuzzyMatch(searchLyrics, lyrics, 0) != -1 && lyrics != null) {
          // System.out.println(lyrics);
          tempTrack =
              new ClientTrack(trackID, trackName, path, _albumID, _artistID, length, trackNo);
          toReturn.add(tempTrack);
        }
      }
    }
    return toReturn;
  }
Пример #2
0
  public void moveTracks(int[] indexesToMove, int insertionPoint, TrackDatabase db) {
    Arrays.sort(indexesToMove);
    Track[] oldPlaylist = getTracksInPlaylist(db);

    int[] newTrackIDs = new int[oldPlaylist.length];
    TrackType[] trackTypes = new TrackType[oldPlaylist.length];
    boolean allLocal = true;
    boolean allSpotify = true;
    // Create the array of track IDs based on the insertion point and indexes to move
    int addAt = 0;
    for (int i = 0; i <= oldPlaylist.length; i++) {
      // if i = row, this is the insertion point. cyle through indexesToMove and copy them across
      if (i == insertionPoint) {
        for (int j = 0; j < indexesToMove.length; j++) {
          newTrackIDs[addAt] = oldPlaylist[indexesToMove[j]].getTrackID();
          if (oldPlaylist[indexesToMove[j]] instanceof ClientTrack) {
            trackTypes[addAt] = TrackType.Local;
            allSpotify = false;
          } else {
            trackTypes[addAt] = TrackType.Spotify;
            allLocal = false;
          }
          addAt++;
        }
      }

      // Add track.get(i) to new tracks if it's not in the list of indexes to move
      // Also check array bounds -- we have to cycle with i untill one after the length, in case we
      // drop at the end of the list.

      if (i < oldPlaylist.length && Arrays.binarySearch(indexesToMove, i) < 0) {
        newTrackIDs[addAt] = oldPlaylist[i].getTrackID();
        if (oldPlaylist[i].isClientTrack()) {
          trackTypes[addAt] = TrackType.Local;
          allSpotify = false;
        } else {
          trackTypes[addAt] = TrackType.Spotify;
          allLocal = false;
        }
        addAt++;
      }
    }
    // Recreate the playlist with the new trackIDs
    db.recreatePlaylist(newTrackIDs, this.playlistID, allLocal, allSpotify, trackTypes);
  }
Пример #3
0
  public void addTracks(ClientTrack[] tracksToAdd, int insertionPoint, TrackDatabase db) {
    Track[] oldPlaylist = getTracksInPlaylist(db);
    int[] newTrackIDs = new int[oldPlaylist.length + tracksToAdd.length];
    TrackType[] trackTypes = new TrackType[oldPlaylist.length + tracksToAdd.length];
    boolean allLocal = true;
    boolean allSpotify = true;

    int addAt = 0;

    for (int i = 0; i <= oldPlaylist.length; i++) {
      if (i == insertionPoint) {
        for (int j = 0; j < tracksToAdd.length; j++) {
          newTrackIDs[addAt] = tracksToAdd[j].getTrackID();
          if (tracksToAdd[j] instanceof ClientTrack) {
            trackTypes[addAt] = TrackType.Local;
            allSpotify = false;
          } else {
            trackTypes[addAt] = TrackType.Spotify;
            allLocal = false;
          }
          addAt++;
        }
      }

      if (i < oldPlaylist.length) {
        newTrackIDs[addAt] = oldPlaylist[i].getTrackID();
        if (oldPlaylist[i] instanceof ClientTrack) {
          trackTypes[addAt] = TrackType.Local;
          allSpotify = false;
        } else {
          trackTypes[addAt] = TrackType.Spotify;
          allLocal = false;
        }
        addAt++;
      }
    }
    db.recreatePlaylist(newTrackIDs, this.playlistID, allLocal, allSpotify, trackTypes);
  }
Пример #4
0
  private static void generateSpotifyOperation(
      ClientTrack[] selectedTracks, TrackDatabase db, PlaylistTableModel playlistTableModel) {
    Client client = new Client(5000, db);
    ServerTrack[] seeds = new ServerTrack[selectedTracks.length];

    boolean someSCMSDataAvailable = false;
    for (int i = 0; i < selectedTracks.length; i++) {
      if (selectedTracks[i].getScms(db) != null) {
        someSCMSDataAvailable = true;
        seeds[i] =
            new ServerTrack(
                i,
                selectedTracks[i].getTrackName(),
                selectedTracks[i].getArtistName(db),
                selectedTracks[i].getScms());
      } else {
        seeds[i] = null;
      }
    }
    if (someSCMSDataAvailable) {
      try {
        db.createNewSpotifyPlaylist(client.similarTracks(seeds));
      } catch (Exception e) {
        new ErrorMessage("Error in connection to server. Could not generate Spotify playlist");
      }
      playlistTableModel.setPlaylists();
      playlistTableModel.fireTableDataChanged();
    } else {
      new ErrorMessage("No SCMS data is available for any of the selected tracks");
    }

    // Unset SCMS data in tracks
    for (int i = 0; i < selectedTracks.length; i++) {
      if (selectedTracks[i] != null) {
        selectedTracks[i].unsetScms();
      }
    }
  }
Пример #5
0
 public Track[] getTracksInPlaylist(TrackDatabase db) {
   return db.getTracksInPlaylist(this.playlistID);
 }