~stolowski/unity-scope-home/canned-queries-session-id

« back to all changes in this revision

Viewing changes to src/search-query-state.vala

  • Committer: Pawel Stolowski
  • Date: 2013-09-19 11:13:39 UTC
  • Revision ID: pawel.stolowski@canonical.com-20130919111339-afqvredirsahz52e
Added CANNED_QUERY state to SearchQueryChange. Reuse existing session id for canned queries.

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
  {
24
24
    NOT_CHANGED,
25
25
    NEW_QUERY,
 
26
    CANNED_QUERY,
26
27
    APPENDS_TO_PREVIOUS_QUERY,
27
28
    REMOVES_FROM_PREVIOUS_QUERY
28
29
  }
30
31
  public class SearchQueryState
31
32
  {
32
33
    private HashTable<string, string> previous_query = new HashTable<string, string> (str_hash, str_equal);
 
34
    private HashTable<string, bool> canned_query = new HashTable<string, bool> (str_hash, str_equal);
33
35
    
34
36
    public void remove (string home_channel_id)
35
37
    {
41
43
      return previous_query.contains (home_channel_id);
42
44
    }
43
45
 
 
46
    public void set_canned_query (string channel_id)
 
47
    {
 
48
      canned_query[channel_id] = true;
 
49
    }
 
50
 
44
51
    /**
45
52
     * Compare search string with previous string for given home channel. Store new search string.
46
53
     */
47
54
    public SearchQueryChange search_query_changed (string channel_id, string search_string)
48
55
    {
49
56
      var query = search_string.strip ();
50
 
 
51
57
      var changed = SearchQueryChange.NEW_QUERY;
52
 
      if (previous_query.contains (channel_id))
53
 
      {
54
 
        var prev = previous_query[channel_id];
55
 
        if (query == "" && prev != "") // there was a query previously, but user removed all characters in new one
56
 
        {
57
 
          changed = SearchQueryChange.NEW_QUERY;
58
 
        }
59
 
        else
60
 
        {
61
 
          if (prev == query)
62
 
            changed = SearchQueryChange.NOT_CHANGED;
63
 
          else if (prev == "")
 
58
 
 
59
      if (canned_query.contains(channel_id))
 
60
      {
 
61
        changed = SearchQueryChange.CANNED_QUERY;
 
62
        canned_query.remove (channel_id);
 
63
      }
 
64
      else
 
65
      {
 
66
        if (previous_query.contains (channel_id))
 
67
        {
 
68
          var prev = previous_query[channel_id];
 
69
          if (query == "" && prev != "") // there was a query previously, but user removed all characters in new one
 
70
          {
64
71
            changed = SearchQueryChange.NEW_QUERY;
65
 
          else if (query.has_prefix (prev))
66
 
            changed = SearchQueryChange.APPENDS_TO_PREVIOUS_QUERY;
67
 
          else if (prev.has_prefix (query))
68
 
            changed = SearchQueryChange.REMOVES_FROM_PREVIOUS_QUERY;
 
72
          }
 
73
          else
 
74
          {
 
75
            if (prev == query)
 
76
              changed = SearchQueryChange.NOT_CHANGED;
 
77
            else if (prev == "")
 
78
              changed = SearchQueryChange.NEW_QUERY;
 
79
            else if (query.has_prefix (prev))
 
80
              changed = SearchQueryChange.APPENDS_TO_PREVIOUS_QUERY;
 
81
            else if (prev.has_prefix (query))
 
82
              changed = SearchQueryChange.REMOVES_FROM_PREVIOUS_QUERY;
 
83
          }
69
84
        }
70
85
      }
71
86