Skip to content

Commit

Permalink
Support custom tags
Browse files Browse the repository at this point in the history
Custom tags can be added to artists, albums and tracks.
  • Loading branch information
DocMarty84 committed Feb 23, 2019
1 parent 5078bfd commit 7e7ba12
Show file tree
Hide file tree
Showing 13 changed files with 131 additions and 28 deletions.
1 change: 1 addition & 0 deletions __manifest__.py
Expand Up @@ -30,6 +30,7 @@
'views/oomusic_folder_views.xml',
'views/oomusic_genre_views.xml',
'views/oomusic_playlist_views.xml',
'views/oomusic_tag_views.xml',
'views/oomusic_track_views.xml',
'views/oomusic_suggestion_views.xml',
'views/oomusic_transcoder_views.xml',
Expand Down
1 change: 1 addition & 0 deletions models/__init__.py
Expand Up @@ -15,6 +15,7 @@
from . import oomusic_lastfm
from . import oomusic_playlist
from . import oomusic_suggestion
from . import oomusic_tag
from . import oomusic_track
from . import oomusic_transcoder
from . import res_users
4 changes: 4 additions & 0 deletions models/oomusic_album.py
Expand Up @@ -34,6 +34,10 @@ class MusicAlbum(models.Model):
[('0', '0'), ('1', '1'), ('2', '2'), ('3', '3'), ('4', '4'), ('5', '5')],
'Rating', compute='_compute_rating', inverse='_inverse_rating', search='_search_rating'
)
tag_ids = fields.Many2many(
'oomusic.tag', string='Custom Tags',
compute='_compute_tag_ids', inverse='_inverse_tag_ids', search='_search_tag_ids'
)

image_folder = fields.Binary(
'Folder Image', related='folder_id.image_folder', related_sudo=False)
Expand Down
4 changes: 4 additions & 0 deletions models/oomusic_artist.py
Expand Up @@ -53,6 +53,10 @@ class MusicArtist(models.Model):
search='_search_bit_follow')
bit_event_ids = fields.One2many(
'oomusic.bandsintown.event', 'artist_id', string='Events', readonly=True)
tag_ids = fields.Many2many(
'oomusic.tag', string='Custom Tags',
compute='_compute_tag_ids', inverse='_inverse_tag_ids', search='_search_tag_ids'
)

_sql_constraints = [
('oomusic_artist_name_uniq', 'unique(name, user_id)', 'Artist name must be unique!'),
Expand Down
15 changes: 14 additions & 1 deletion models/oomusic_preference.py
Expand Up @@ -35,6 +35,7 @@ class MusicPreference(models.Model):
('normal', 'Not Followed'),
('done', 'Followed')
], 'Follow Events', default='normal')
tag_ids = fields.Many2many('oomusic.tag', string='Custom Tags')


class MusicPreferenceMixin(models.AbstractModel):
Expand Down Expand Up @@ -109,6 +110,18 @@ def _inverse_bit_follow(self):
def _search_bit_follow(self, operator, value):
return self._search_pref('bit_follow', operator, value)

@api.depends('pref_ids')
def _compute_tag_ids(self):
for obj in self:
obj.tag_ids = obj._get_pref('tag_ids')

def _inverse_tag_ids(self):
for obj in self:
obj._set_pref({'tag_ids': [(6, 0, obj.tag_ids.ids)]})

def _search_tag_ids(self, operator, value):
return self._search_pref('tag_ids', operator, value)

def _get_pref(self, field):
return self.pref_ids[field]

Expand Down Expand Up @@ -142,7 +155,7 @@ def write(self, vals):
# `oomusic.preference`.
# When the library is shared, this triggers an AccessError if the user is not the owner
# of the object.
fields = {'play_count', 'last_play', 'star', 'rating', 'bit_follow'}
fields = {'play_count', 'last_play', 'star', 'rating', 'bit_follow', 'tag_ids'}
new_self = self
if any([k in fields for k in vals.keys()]):
self.check_access_rule('read')
Expand Down
13 changes: 13 additions & 0 deletions models/oomusic_tag.py
@@ -0,0 +1,13 @@
# -*- coding: utf-8 -*-

from odoo import fields, models


class MusicTag(models.Model):
_name = "oomusic.tag"
_description = "Custom Tags"

name = fields.Char(required=True)
color = fields.Integer(string="Color Index")

_sql_constraints = [("name_uniq", "unique (name)", "Tag name already exists!")]
4 changes: 4 additions & 0 deletions models/oomusic_track.py
Expand Up @@ -70,6 +70,10 @@ class MusicTrack(models.Model):
[('0', '0'), ('1', '1'), ('2', '2'), ('3', '3'), ('4', '4'), ('5', '5')],
'Rating', compute='_compute_rating', inverse='_inverse_rating', search='_search_rating'
)
tag_ids = fields.Many2many(
'oomusic.tag', string='Custom Tags',
compute='_compute_tag_ids', inverse='_inverse_tag_ids', search='_search_tag_ids'
)

def _compute_in_playlist(self):
playlist = self.env['oomusic.playlist'].search([
Expand Down
2 changes: 2 additions & 0 deletions security/ir.model.access.csv
Expand Up @@ -13,6 +13,8 @@ access_oomusic_playlist_line,oomusic.playlist.line,model_oomusic_playlist_line,b
access_oomusic_preference,oomusic.preference,model_oomusic_preference,base.group_user,1,1,1,1
access_oomusic_converter,oomusic.converter,model_oomusic_converter,base.group_user,1,1,1,1
access_oomusic_converter_line,oomusic.converter.line,model_oomusic_converter_line,base.group_user,1,1,1,1
access_oomusic_tag,oomusic.tag,model_oomusic_tag,base.group_user,1,1,1,0
access_oomusic_tag_system,oomusic.tag,model_oomusic_tag,base.group_system,1,1,1,1
access_oomusic_track,oomusic.track,model_oomusic_track,base.group_user,1,1,0,0
access_oomusic_transcoder,oomusic.transcoder,model_oomusic_transcoder,base.group_user,1,0,0,0
access_oomusic_transcoder_system,oomusic.transcoder,model_oomusic_transcoder,base.group_system,1,1,1,1
22 changes: 13 additions & 9 deletions views/oomusic_album_views.xml
Expand Up @@ -32,6 +32,7 @@
</group>
<group>
<field name="rating" widget="priority"/>
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
</group>
</group>
<notebook>
Expand Down Expand Up @@ -78,6 +79,7 @@
<field name="year"/>
<field name="artist_id"/>
<field name="genre_id"/>
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
</tree>
</field>
</record>
Expand All @@ -91,6 +93,7 @@
<field name="artist_id"/>
<field name="genre_id"/>
<field name="year"/>
<field name="tag_ids"/>

<filter string="Released This Year" name="filter_released_this_year"
domain="[('year', '=', time.strftime('%%Y'))]"/>
Expand Down Expand Up @@ -120,18 +123,19 @@
<img t-att-src="kanban_image('oomusic.album', 'image_small', record.id.raw_value)" t-att-title="record.value" t-att-alt="record.value"/>
</div>
<div class="oe_kanban_content">
<strong>
<field name="name"/>
</strong>
<div>
<field name="year"/>
</div>
<div>
<field name="artist_id"/>
<div class="o_kanban_record_top">
<div class="o_kanban_record_headings">
<strong>
<field name="name"/><br/>
</strong>
<field name="year"/><br/>
<field name="artist_id"/><br/>
<field name="genre_id"/>
</div>
</div>
<div class="o_kanban_record_bottom">
<div class="oe_kanban_bottom_left">
<field name="genre_id"/>
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
</div>
<div class="oe_kanban_bottom_right">
<field name="star" widget="priority"/>
Expand Down
6 changes: 6 additions & 0 deletions views/oomusic_artist_views.xml
Expand Up @@ -29,6 +29,7 @@
</group>
<group>
<field name="rating" widget="priority"/>
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
</group>
<notebook>
<page string="Albums">
Expand Down Expand Up @@ -107,6 +108,7 @@
<field name="arch" type="xml">
<tree string="Artists" create="0">
<field name="name"/>
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
</tree>
</field>
</record>
Expand All @@ -118,6 +120,7 @@
<search string="Artists">
<field name="name"/>
<field name="album_ids"/>
<field name="tag_ids"/>

<filter string="Favorite" name="filter_favorite"
domain="[('star', '=', '1')]"/>
Expand All @@ -141,6 +144,9 @@
<strong>
<field name="name"/>
</strong>
<t t-if="record.tag_ids.raw_value.length gt 0">
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
</t>
</div>
</div>
</t>
Expand Down
38 changes: 20 additions & 18 deletions views/oomusic_suggestion_views.xml
Expand Up @@ -22,18 +22,19 @@
<img t-att-src="kanban_image('oomusic.album', 'image_small', record.id.raw_value)" t-att-title="record.value" t-att-alt="record.value"/>
</div>
<div class="oe_kanban_content">
<strong>
<field name="name"/>
</strong>
<div>
<field name="year"/>
</div>
<div>
<field name="artist_id"/>
<div class="o_kanban_record_top">
<div class="o_kanban_record_headings">
<strong>
<field name="name"/><br/>
</strong>
<field name="year"/><br/>
<field name="artist_id"/><br/>
<field name="genre_id"/>
</div>
</div>
<div class="o_kanban_record_bottom">
<div class="oe_kanban_bottom_left">
<field name="genre_id"/>
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
</div>
<div class="oe_kanban_bottom_right">
<button name="action_add_to_playlist" string="Add To Current Playlist"
Expand Down Expand Up @@ -63,18 +64,19 @@
<img t-att-src="kanban_image('oomusic.album', 'image_small', record.id.raw_value)" t-att-title="record.value" t-att-alt="record.value"/>
</div>
<div class="oe_kanban_content">
<strong>
<field name="name"/>
</strong>
<div>
<field name="year"/>
</div>
<div>
<field name="artist_id"/>
<div class="o_kanban_record_top">
<div class="o_kanban_record_headings">
<strong>
<field name="name"/><br/>
</strong>
<field name="year"/><br/>
<field name="artist_id"/><br/>
<field name="genre_id"/>
</div>
</div>
<div class="o_kanban_record_bottom">
<div class="oe_kanban_bottom_left">
<field name="genre_id"/>
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
</div>
<div class="oe_kanban_bottom_right">
<button name="action_add_to_playlist" string="Add To Current Playlist"
Expand Down
46 changes: 46 additions & 0 deletions views/oomusic_tag_views.xml
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="oomusic_tag_view_form" model="ir.ui.view">
<field name="name">oomusic.tag.form</field>
<field name="model">oomusic.tag</field>
<field name="arch" type="xml">
<form string="Tag" create="0">
<sheet>
<group>
<group>
<field name="name"/>
<field name="color"/>
</group>
</group>
</sheet>
</form>
</field>
</record>

<record id="oomusic_tag_view_tree" model="ir.ui.view">
<field name="name">oomusic.tag.tree</field>
<field name="model">oomusic.tag</field>
<field name="arch" type="xml">
<tree string="Tags" create="0" editable="bottom">
<field name="name"/>
<field name="color"/>
</tree>
</field>
</record>

<record id="action_tag" model="ir.actions.act_window">
<field name="name">Tags</field>
<field name="res_model">oomusic.tag</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p>
You will find here all your tags.
</p>
</field>
</record>

<!-- Third Level Menu -->
<menuitem id="menu_action_tag" parent="menu_oomusic_config" action="action_tag" sequence="40" groups="base.group_no_one"/>
</odoo>
3 changes: 3 additions & 0 deletions views/oomusic_track_views.xml
Expand Up @@ -52,6 +52,7 @@
<group>
<group>
<field name="rating" widget="priority"/>
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
<field name="play_count"/>
<field name="last_play"/>
<field name="last_modification" groups="base.group_no_one"/>
Expand Down Expand Up @@ -91,6 +92,7 @@
<field name="artist_id"/>
<field name="track_number"/>
<field name="genre_id"/>
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
<field name="duration_min" widget="float_time"/>
</tree>
</field>
Expand All @@ -106,6 +108,7 @@
<field name="album_id"/>
<field name="genre_id"/>
<field name="year"/>
<field name="tag_ids"/>
<field name="duration_min"/>
<field name="path"/>

Expand Down

0 comments on commit 7e7ba12

Please sign in to comment.