/// <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;
        }
Ejemplo n.º 5
0
        /*
         *  パブリックメソッド
         */
        #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));
            }
        }