| 
									
										
										
										
											2024-10-23 15:56:56 -05:00
										 |  |  | package convids | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2024-10-23 21:24:10 -05:00
										 |  |  | 	"errors" | 
					
						
							| 
									
										
										
										
											2024-10-23 15:56:56 -05:00
										 |  |  | 	"fmt" | 
					
						
							|  |  |  | 	"iter" | 
					
						
							| 
									
										
										
										
											2024-10-23 21:24:10 -05:00
										 |  |  | 	"regexp" | 
					
						
							| 
									
										
										
										
											2024-10-23 15:56:56 -05:00
										 |  |  | 	"slices" | 
					
						
							| 
									
										
										
										
											2024-10-23 21:24:10 -05:00
										 |  |  | 	"strings" | 
					
						
							| 
									
										
										
										
											2024-10-23 15:56:56 -05:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-23 21:24:10 -05:00
										 |  |  | var ErrNoName = errors.New("missing name") | 
					
						
							| 
									
										
										
										
											2024-10-23 22:22:41 -05:00
										 |  |  | var ErrNilPointer = errors.New("nil pointer") | 
					
						
							| 
									
										
										
										
											2024-10-23 21:24:10 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-23 22:10:31 -05:00
										 |  |  | var animePattern = `^\[.+\] ` | 
					
						
							|  |  |  | var animeRegexp = regexp.MustCompile(animePattern) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-23 21:24:10 -05:00
										 |  |  | func (s *Show) Match(path string) (bool, error) { | 
					
						
							| 
									
										
										
										
											2024-10-23 22:22:41 -05:00
										 |  |  | 	if s == nil { | 
					
						
							|  |  |  | 		return false, ErrNilPointer | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2024-10-23 21:24:10 -05:00
										 |  |  | 	if s.Pattern != "" { | 
					
						
							|  |  |  | 		return s.matchRegexp(path) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if s.Name == "" { | 
					
						
							|  |  |  | 		return false, ErrNoName | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2024-10-23 22:10:31 -05:00
										 |  |  | 	if s.Anime { | 
					
						
							|  |  |  | 		if !animeRegexp.MatchString(path) { | 
					
						
							|  |  |  | 			return false, nil | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		path = animeRegexp.ReplaceAllString(path, "") | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2024-10-23 21:24:10 -05:00
										 |  |  | 	return strings.HasPrefix(path, s.Name), nil | 
					
						
							| 
									
										
										
										
											2024-10-23 15:56:56 -05:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-23 21:24:10 -05:00
										 |  |  | func (s *Show) matchRegexp(path string) (f bool, err error) { | 
					
						
							|  |  |  | 	if s.re == nil { | 
					
						
							|  |  |  | 		p := s.Pattern | 
					
						
							| 
									
										
										
										
											2024-10-23 22:10:31 -05:00
										 |  |  | 		if s.Anime { | 
					
						
							|  |  |  | 			if strings.HasPrefix(p, "^") { | 
					
						
							|  |  |  | 				p = strings.TrimPrefix(p, "^") | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			p = animePattern + p | 
					
						
							|  |  |  | 		} else if !strings.HasPrefix(p, "^") { | 
					
						
							| 
									
										
										
										
											2024-10-23 21:24:10 -05:00
										 |  |  | 			p = "^" + p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		s.re, err = regexp.Compile(p) | 
					
						
							|  |  |  | 		if err != nil { | 
					
						
							|  |  |  | 			return | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return s.re.MatchString(path), nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (ss *Shows) All() iter.Seq[*Show] { | 
					
						
							| 
									
										
										
										
											2024-10-23 22:22:41 -05:00
										 |  |  | 	if ss == nil { | 
					
						
							|  |  |  | 		return func(func(*Show) bool) {} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2024-10-23 21:24:10 -05:00
										 |  |  | 	return slices.Values(*ss) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (d *Data) AllShows(silent bool) iter.Seq[*Show] { | 
					
						
							|  |  |  | 	return func(yield func(*Show) bool) { | 
					
						
							| 
									
										
										
										
											2024-10-23 22:22:41 -05:00
										 |  |  | 		if d == nil || d.Config == nil { | 
					
						
							| 
									
										
										
										
											2024-10-23 21:24:10 -05:00
										 |  |  | 			return | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2024-10-23 15:56:56 -05:00
										 |  |  | 		for _, show := range d.Config.Shows { | 
					
						
							| 
									
										
										
										
											2024-10-23 21:24:10 -05:00
										 |  |  | 			sh := (*d.Shows)[show] | 
					
						
							|  |  |  | 			if sh == nil || len(*sh) < 1 { | 
					
						
							|  |  |  | 				continue | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2024-10-23 15:56:56 -05:00
										 |  |  | 			if !silent { | 
					
						
							| 
									
										
										
										
											2024-10-24 06:33:53 -05:00
										 |  |  | 				fmt.Println("Checking", show, "shows\n") | 
					
						
							| 
									
										
										
										
											2024-10-23 15:56:56 -05:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2024-10-23 21:24:10 -05:00
										 |  |  | 			for s := range sh.All() { | 
					
						
							|  |  |  | 				if s == nil { | 
					
						
							|  |  |  | 					continue | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2024-10-23 15:56:56 -05:00
										 |  |  | 				if !yield(s) { | 
					
						
							|  |  |  | 					return | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |