/// <summary> /// グリッドにアイテムを追加する /// </summary> /// <param name="filePath"></param> public override void addItem(ISourceGridItem sgi) { // 新規行番号を取得 int i = Grid.RowsCount; // 新規行を追加 Grid.Rows.Insert(i); // SourceGrid用イベント初期化 ConditionGridItemInfo gi = (ConditionGridItemInfo)sgi; // ToolTip Controller //toolTipController.ToolTipTitle = gi.Title; // ID用 Grid[i, (int)EnuGrid.FILTERING] = new Cell(gi.DisplayValue); Grid[i, (int)EnuGrid.FILTERING].Tag = gi; Grid[i, (int)EnuGrid.FILTERING].AddController(clickController); if (i == 0) { Grid[i, (int)EnuGrid.FILTERING].Column.Width = 255; } // セルビューをセット this.setCellView(i, EnuPlayType.NOPLAY); }
/// <summary> /// RowNoのデータをGridItemInfoで返す。 /// </summary> /// <returns></returns> public override ISourceGridItem getRowGridItem(int rowNo) { ConditionGridItemInfo cii = new ConditionGridItemInfo(); cii.DisplayValue = this.getValue(rowNo, (int)EnuGrid.FILTERING); cii.Value = Grid[rowNo, (int)EnuGrid.FILTERING].Tag.ToString(); return(cii); }
public bool isShowPlayingList() { bool result = false; IList <int> rows = getSelectRowNoList(); if (rows.Count > 0) { ConditionGridItemInfo cgi = (ConditionGridItemInfo)Grid[rows[0], (int)EnuGrid.FILTERING].Tag; if ("PLAYINGLIST".Equals(cgi.Value)) { result = true; } } return(result); }
/// <summary> /// 再生中リストをDBから復元 /// </summary> public void restorePlayingList() { ConditionGridItemInfo cgi = new ConditionGridItemInfo(); cgi.Value = SQL; object[][] resultList = SQLiteManager.Instance.executeQueryNormal( SQLBuilder.selectPlaylist( SQLResource.SQL001, LinearGlobal.PlaylistMode, "", LinearEnum.FilteringMode.DEFAULT, cgi)); foreach (object[] recordList in resultList) { GridItemInfo gi = LinearAudioPlayer.GridController.createLoadGridItem(recordList); playingList.AddLast(gi); } LinearGlobal.LinearConfig.PlayerConfig.RestCount = playingList.Count; LinearGlobal.LinearConfig.PlayerConfig.RestMaxCount = playingList.Count; }
/* * パブリックメソッド */ #region Public Method /// <summary> /// プレイリスト取得用SQL生成 /// </summary> /// <param name="baseSql"></param> /// <param name="playlistMode"></param> /// <param name="filterString"></param> /// <returns></returns> public static string selectPlaylist( string baseSql, LinearEnum.PlaylistMode playlistMode, string filterString, LinearEnum.FilteringMode filteringMode, ConditionGridItemInfo conditionItem) { bool isNotOrder = false; bool isFullSQL = false; StringBuilder sb = new StringBuilder(); //sb.Append(baseSql); // プレイリストによる絞り込み sb.Append(WHERE_STRING); sb.Append(getRatingWhereString(playlistMode)); if (!String.IsNullOrEmpty(filterString)) { sb.Append(AND_STRING); if (filterString.Length < 3 || !Regex.IsMatch(filterString, @"^[a-zA-Z0-9 \-]+$")) { sb.Append( "IFNULL(TITLE,'') || IFNULL(ARTIST,'') || IFNULL(ALBUM,'') || IFNULL(TAG,'') LIKE '%" + escapeSQL(filterString) + "%'"); } else { sb.Append( "(( IFNULL(TITLE,'') || IFNULL(ARTIST,'') || IFNULL(ALBUM,'') || IFNULL(TAG,'') LIKE '%" + escapeSQL(filterString) + "%' ) OR ("); sb.Append("ISMATCHMIGEMO('" + escapeSQL(filterString) + "',IFNULL(TITLE,'') || IFNULL(ARTIST,'') || IFNULL(ALBUM,'') || IFNULL(TAG,'')) ))"); } //sb.Append(AND_STRING); } // コンディションによる絞り込み switch (filteringMode) { case LinearEnum.FilteringMode.DEFAULT: // カスタム if (!String.IsNullOrEmpty(conditionItem.Value)) { if (!(conditionItem.Value.Substring(0, 3).ToUpper().Equals("AND") || conditionItem.Value.Substring(0, 2).ToUpper().Equals("OR"))) { isFullSQL = true; } sb.Append(" "); string customSql = conditionItem.Value; if (!StringUtils.hasString(customSql, "#LIMIT#") || LinearGlobal.LinearConfig.DatabaseConfig.LimitCount == 0) { customSql = customSql.Replace("#LIMIT#", ""); } else { customSql = customSql.Replace( "#LIMIT#", " LIMIT " + LinearGlobal.LinearConfig.DatabaseConfig.LimitCount.ToString()); } sb.Append(customSql); isNotOrder = true; } break; case LinearEnum.FilteringMode.TAG: if (conditionItem.Value != null) { sb.Append(AND_STRING); if (!String.IsNullOrEmpty(conditionItem.Value)) { sb.Append("ISMATCHTAG(TAG, '" + escapeSQL(conditionItem.Value) + "')"); } else { sb.Append("("); sb.Append(filteringMode.ToString() + " = ''"); sb.Append(OR_STRING); sb.Append(filteringMode.ToString() + " IS NULL"); sb.Append(")"); } } break; case LinearEnum.FilteringMode.FOLDER: if (conditionItem.Value != null) { sb.Append(AND_STRING); if (!String.IsNullOrEmpty(conditionItem.Value)) { sb.Append("GETDIRNAME(FILEPATH) = '" + escapeSQL(conditionItem.Value) + "'"); } else { sb.Append("GETDIRNAME(FILEPATH) = ''"); sb.Append(OR_STRING); sb.Append("GETDIRNAME(FILEPATH) IS NULL"); } } break; default: if (conditionItem.Value != null) { sb.Append(AND_STRING); if (!String.IsNullOrEmpty(conditionItem.Value)) { if (filteringMode != LinearEnum.FilteringMode.GENRE) { sb.Append(filteringMode.ToString() + " = '" + escapeSQL(conditionItem.Value) + "'"); } else { // ジャンルだけ大文字でマッチングする sb.Append("trim(upper(" + filteringMode.ToString() + ")) = '" + escapeSQL(conditionItem.Value) + "'"); } } else { sb.Append(filteringMode.ToString() + " = ''"); sb.Append(OR_STRING); sb.Append(filteringMode.ToString() + " IS NULL"); } if (filteringMode == LinearEnum.FilteringMode.ALBUM) { sb.Append("ORDER BY ABS(PL.TRACK)"); isNotOrder = true; } } break; } LAST_WHERE_SQL = sb.ToString(); if (!isNotOrder) { if (LinearGlobal.SortMode == LinearEnum.SortMode.DEFAULT) { sb.Append(ORDERBY_STRING); } else { if (LinearGlobal.FilteringMode == LinearEnum.FilteringMode.ARTIST && LinearGlobal.ShuffleMode == LinearEnum.ShuffleMode.OFF) { sb.Append(ORDERBY_STRING_ORIGINAL_SORT); } else { sb.Append(ORDERBY_STRING); } } LAST_WHERE_SQL = sb.ToString(); } if (isFullSQL) { return(baseSql + " " + conditionItem.Value); } if (LinearGlobal.ShuffleMode == LinearEnum.ShuffleMode.OFF) { LAST_WHERE_SQL = LAST_WHERE_SQL.Replace("#NOSHUFFLE#", ""); return(baseSql + LAST_WHERE_SQL); } else { return(SQLResource.SQL029.Replace("#SQL#", baseSql + LAST_WHERE_SQL)); } }